在 Azure Machine Learning 定型作業中使用驗證來認證秘密
本文中,您將瞭解如何在定型作業中安全地使用秘密。 驗證資訊 (例如使用者名稱和密碼) 是秘密。 例如,若您連線至外部資料庫以查詢定型資料,則必須將使用者名稱和密碼傳送至遠端作業內容。 以純文字將這類值寫進定型指令碼中會洩露秘密,並不安全。
相反地,Azure Machine Learning 工作區有一個相關聯的資源,稱為 Azure Key Vault。 使用此 Azure Key Vault 來透過 Azure Machine Learning Python SDK 中的一組 API,安全地將秘密傳送至遠端作業。
使用秘密的標準流程為:
- 在本機電腦上,登入 Azure 並連線至工作區。
- 在本機電腦上,在工作區金鑰保存庫中設定秘密。
- 提交遠端作業。
- 在遠端作業中,從 Key Vault 取得祕密,然後使用它。
設定秘密
在 Azure Machine Learning 中,Keyvault 類別包含用來設定秘密的方法。 在本機 Python 工作階段中,先取得工作區金鑰保存庫的參考,然後使用 set_secret()
方法,依名稱和值設定秘密。 如果名稱已存在,set_secret 方法會更新祕密值。
from azureml.core import Workspace
from azureml.core import Keyvault
import os
ws = Workspace.from_config()
my_secret = os.environ.get("MY_SECRET")
keyvault = ws.get_default_keyvault()
keyvault.set_secret(name="mysecret", value = my_secret)
請勿將秘密值放在 Python 程式碼中,因為以純文字儲存在檔案中並不安全。 相反地,請從環境變數取得秘密值,例如 Azure DevOps 組建祕密,或從互動式使用者輸入中取得。
您可以使用 list_secrets()
方法列出秘密名稱,還有批次版的 set_secrets() 可讓您一次設定多個祕密。
重要
使用 list_secrets()
只會列出透過 set_secret()
或 set_secrets()
使用 Azure Machine Learning SDK 所建立的秘密。 不會列出由 SDK 以外的工具建立的秘密。 例如,不會列出使用 Azure 入口網站或 Azure PowerShell 建立的秘密。
您可以使用 get_secret()
從金鑰保存庫取得秘密值 (無論如何建立)。 因此,您可以擷取 list_secrets()
未列出的秘密。
取得密碼
在本機程式碼中,您可以使用 get_secret()
方法,依名稱取得秘密值。
針對提交 Experiment.submit
的作業,請使用 get_secret()
方法搭配 Run
類別。 因為提交的執行知道其工作區,所以此方法會跳過工作區具現化,直接傳回秘密值。
# Code in submitted job
from azureml.core import Experiment, Run
run = Run.get_context()
secret_value = run.get_secret(name="mysecret")
請注意不要寫下或印出而曝露秘密值。
還有批次版的 get_secrets() 可同時存取多個秘密。