共用方式為


在 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() 可同時存取多個秘密。

下一步