共用方式為


在 Azure Machine Learning 定型作業中使用驗證來認證秘密

適用於: Python SDK azureml v1 (部分機器翻譯)

本文中,您將瞭解如何在定型作業中安全地使用秘密。 驗證資訊 (例如使用者名稱和密碼) 是秘密。 例如,若您連線至外部資料庫以查詢定型資料,則必須將使用者名稱和密碼傳送至遠端作業內容。 以純文字將這類值寫進定型指令碼中會洩露秘密,並不安全。

相反地,Azure Machine Learning 工作區有一個相關聯的資源,稱為 Azure Key Vault。 使用此 Azure Key Vault 來透過 Azure Machine Learning Python SDK 中的一組 API,安全地將秘密傳送至遠端作業。

使用秘密的標準流程為:

  1. 在本機電腦上,登入 Azure 並連線至工作區。
  2. 在本機電腦上,在工作區金鑰保存庫中設定秘密。
  3. 提交遠端作業。
  4. 在遠端作業中,從 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() 可同時存取多個秘密。