重新產生儲存體帳戶存取金鑰

瞭解如何變更 Azure Machine Learning 所使用 Azure 儲存體帳戶的存取金鑰。 Azure Machine Learning 可以使用儲存體帳戶來儲存資料或定型的模型。

基於安全性考慮,您可能需要變更 Azure 儲存體帳戶的存取金鑰。 當您重新產生存取金鑰時,必須更新 Azure Machine Learning 以使用新的金鑰。 Azure Machine Learning 可能會同時針對模型儲存體和資料存放區使用儲存體帳戶。

重要

以資料存放區註冊的認證會儲存在與工作區相關聯的 Azure Key Vault 中。 如果您已啟用 Key Vault 的虛刪除功能,本文會提供更新認證的指示。 如果您取消註冊資料存放區,並嘗試以相同名稱重新註冊,此動作將會失敗。 如需如何在此案例中啟用虛刪除的資訊,請參閱針對現有的金鑰保存庫開啟虛刪除

必要條件

注意

已使用 Python SDK 的版本 1.0.83 對本文件中的程式碼片段進行測試。

必須更新的項目

儲存體帳戶可供 Azure Machine Learning 工作區使用 (儲存記錄、模型、快照集等),以及作為資料存放區。 更新工作區的程序是單一 Azure CLI 命令,而且可以在更新儲存體金鑰之後執行。 更新資料存放區的程序涉及更多步驟,而且需要探索哪些資料存放區目前正在使用儲存體帳戶,然後再重新註冊。

重要

同時使用 Azure CLI 更新工作區和使用 Python 來更新資料存放區。 在兩者都更新前只更新其中一個並不足夠,而且可能會造成錯誤。

若要探索您的資料存放區所使用的儲存體帳戶,請使用下列程式碼:

from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace_name = '<AZUREML_WORKSPACE_NAME>'

ml_client = MLClient(credential=DefaultAzureCredential(),
                        subscription_id=subscription_id, 
                        resource_group_name=resource_group,
                        workspace_name=workspace_name)

# list all the datastores
datastores = ml_client.datastores.list()
for ds in datastores:
    if ds.credentials.type == "account_key":
        if ds.type.name == "AZURE_BLOB":
            print("Blob store - datastore name: " + ds.name + ", storage account name: " +
                  ds.account_name + ", container name: " + ds.container_name)
        if ds.type.name == "AZURE_FILE":
            print("Blob store - datastore name: " + ds.name + ", storage account name: " +
                  ds.account_name + ", file share name: " + ds.file_share_name)

此程式碼會尋找使用 Azure 儲存體與金鑰驗證的任何已註冊資料存放區,並列出下列資訊:

  • 資料存放區名稱:儲存體帳戶註冊所在的資料存放區名稱。
  • 儲存體帳戶名稱:Azure 儲存體帳戶的名稱。
  • 容器:此註冊所使用之儲存體帳戶中的容器。
  • 檔案共用:此註冊所使用的檔案共用。
import azureml.core
from azureml.core import Workspace, Datastore

ws = Workspace.from_config()

default_ds = ws.get_default_datastore()
print("Default datstore: " + default_ds.name + ", storage account name: " +
      default_ds.account_name + ", container name: " + default_ds.container_name)

datastores = ws.datastores
for name, ds in datastores.items():
    if ds.datastore_type == "AzureBlob":
        print("Blob store - datastore name: " + name + ", storage account name: " +
              ds.account_name + ", container name: " + ds.container_name)
    if ds.datastore_type == "AzureFile":
        print("File share - datastore name: " + name + ", storage account name: " +
              ds.account_name + ", container name: " + ds.container_name)

此程式碼會尋找使用 Azure 儲存體的任何已註冊資料存放區,並列出下列資訊:

  • 資料存放區名稱:儲存體帳戶註冊所在的資料存放區名稱。
  • 儲存體帳戶名稱:Azure 儲存體帳戶的名稱。
  • 容器:此註冊所使用之儲存體帳戶中的容器。

其也會指出資料存放區是否適用於 Azure Blob 或 Azure 檔案共用,因為有不同的方法可重新註冊每一種類型的資料存放區。

如果您計畫要重新產生存取金鑰的儲存體帳戶有一個項目,請儲存資料存放區名稱、儲存體帳戶名稱和容器名稱。

更新存取金鑰

若要將 Azure Machine Learning 更新為使用新的金鑰,請使用下列步驟:

重要

執行所有步驟,使用 CLI 來更新工作區,然後使用 Python 更新資料存放區。 在兩者都更新前只更新其中一個可能會導致錯誤。

  1. 重新產生金鑰。 如需重新產生存取金鑰的詳細資訊,請參閱管理儲存體帳戶存取金鑰。 儲存新金鑰。

  2. Azure Machine Learning 工作區會自動同步處理新的金鑰,並在一小時後開始使用。 若要強制工作區立即同步處理新的金鑰,請使用下列步驟:

    1. 若要使用下列 Azure CLI 命令登入包含您工作區的 Azure 訂用帳戶:

      az login
      

      提示

      登入之後,您會看到一份與您的 Azure 帳戶相關聯的訂閱清單。 具有 isDefault: true 的訂用帳戶資訊是目前針對 Azure CLI 命令啟用的訂用帳戶。 此訂用帳戶必須是包含 Azure Machine Learning 工作區的相同訂用帳戶。 您可從 Azure 入口網站瀏覽工作區的概觀頁面來尋找訂用帳戶識別碼。

      若要選取另一個訂用帳戶,請使用 az account set -s <subscription name or ID> 命令並指定訂用帳戶名稱或識別碼以進行切換。 如需訂用帳戶選取的詳細資訊,請參閱使用多個 Azure 訂用帳戶

    2. 若要將工作區更新為使用新的金鑰,請使用下列命令。 以您的 Azure Machine Learning 工作區名稱取代 myworkspace,並以包含該工作區的 Azure 資源群組名稱取代 myresourcegroup

      az ml workspace sync-keys -n myworkspace -g myresourcegroup
      

      此命令會自動為工作區所使用的 Azure 儲存體帳戶同步處理新的金鑰。

  3. 您可以透過 SDK 或 Azure Machine Learning 工作室,重新註冊使用儲存體帳戶的資料存放區。

    1. 若要透過 Python SDK 重新註冊資料存放區,請使用 [需要更新的內容] 區段中的值,以及步驟 1 中具有下列程式碼的金鑰。

      from azure.ai.ml.entities import AzureBlobDatastore, AccountKeyConfiguration
      from azure.ai.ml import MLClient
      from azure.identity import DefaultAzureCredential
      
      subscription_id = '<SUBSCRIPTION_ID>'
      resource_group = '<RESOURCE_GROUP>'
      workspace_name = '<AZUREML_WORKSPACE_NAME>'
      
      ml_client = MLClient(credential=DefaultAzureCredential(),
                              subscription_id=subscription_id, 
                              resource_group_name=resource_group,
                              workspace_name=workspace_name)
      
      blob_datastore1 = AzureBlobDatastore(
          name="your datastore name",
          description="Description",
          account_name="your storage account name",
          container_name="your container name",
          protocol="https",
          credentials=AccountKeyConfiguration(
              account_key="new storage account key"
          ),
      )
      ml_client.create_or_update(blob_datastore1)
      

      由於 overwrite=True 已指定,此程式碼會覆寫現有的註冊,並將其更新為使用新的金鑰。

      # Re-register the blob container
      ds_blob = Datastore.register_azure_blob_container(workspace=ws,
                                                datastore_name='your datastore name',
                                                container_name='your container name',
                                                account_name='your storage account name',
                                                account_key='new storage account key',
                                                overwrite=True)
      # Re-register file shares
      ds_file = Datastore.register_azure_file_share(workspace=ws,
                                            datastore_name='your datastore name',
                                            file_share_name='your container name',
                                            account_name='your storage account name',
                                            account_key='new storage account key',
                                            overwrite=True)
      
      
    2. 透過 Studio 重新註冊資料存放區

      1. 在 Studio 中,選取 [資產] 下方左窗格上的 [資料]

      2. 在頂端,選取 [資料存放區]

      3. 選取您要更新的資料存放區。

      4. 選取左上方的 [更新認證] 按鈕。

      5. 使用步驟 1 中的新存取金鑰填入表單,然後按一下 [儲存]

        如果您要更新預設資料存放區的認證,請完成此步驟,並重複步驟 2b,以重新同步處理新的金鑰與工作區的預設資料存放區。

下一步

如需使用資料存放區的詳細資訊,請參閱使用資料存放區

如需註冊資料存放區的詳細資訊,請參閱 Datastore 類別參考。