問題描述
在Azure Databricks上獲取Azure Key Vault中所儲存的機密(secret)的兩種方式?
問題解答
方式一: 在Databricks的Notebook 中,直接編寫Python程式碼讀取Key Vault的Secret
例項程式碼如下:
import os from azure.keyvault.secrets import SecretClient from azure.identity import DefaultAzureCredential KVUri = f"https://<your key vault name>.vault.azure.cn/" credential = DefaultAzureCredential() client = SecretClient(vault_url=KVUri, credential=credential) retrieved_secret = client.get_secret("<your secret name>") print(f"Your secret is '{retrieved_secret.value}'.")
在執行中,會先後遇見
- azure.keyvault.secrets 和 azure.identity module沒有安裝
- 當前環境使用的Application ID 沒有許可權訪問key vault的問題。
> 沒有安裝Module的解決辦法可以直接使用 %pip install <module name> 解決
%pip install azure.keyvault.secrets %pip install azure.identity dbutils.library.restartPython()
執行效果截圖:
> Application ID沒有許可權訪問的問題可以透過Key Vault的Access Policy頁面,為Application ID賦予讀取許可權來解決
解決以上兩個問題後,再次執行Python Code,可以成功獲取到Key Vault中的機密資訊。
方式二:為Databricks定義Key Vault backend-secret scope,然後使用Databricks的工具包獲取secret
當Azure Databricks和Azure Key Vault資源都建立成功後。
首先在Databricks的頁面中新增 key Vault backed-secret scope,使用如下的URL開啟Create Secret Scope
URL : https://<Azure Databricks Service URL>.databricks.azure.cn/#secrets/createScope
在儲存中如果遇見許可權問題,可以在Key Vault的 Access Policy中為 AzureDatabricks 新增許可權(GET, SET等許可權)
設定完成後,回到Databricks的Notebook頁面,使用如下語句進行驗證:
ENCODED_AUTH_KEY = dbutils.secrets.get(scope = "scope name in databricks", key = "the secret name in key value") print(f"this result is:'{ENCODED_AUTH_KEY}'")
執行效果截圖:
參考資料:
Databricks Secrets scopes: https://learn.microsoft.com/zh-cn/azure/databricks/security/secrets/secret-scopes
Databricks Secrets: https://learn.microsoft.com/zh-cn/azure/databricks/security/secrets/secrets
Databricks Escrets redaction: https://learn.microsoft.com/zh-cn/azure/databricks/security/secrets/redaction
【END】