你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

重新生成存储帐户访问密钥

了解如何更改 Azure 机器学习使用的 Azure 存储帐户的访问密钥。 Azure 机器学习可以使用存储帐户来存储数据或训练后的模型。

出于安全考虑,你可能需要更改 Azure 存储帐户的访问密钥。 重新生成访问密钥时,必须更新 Azure 机器学习以使用新密钥。 Azure 机器学习可以将存储帐户同时用作模型存储和数据存储。

重要

注册到数据存储的凭据会保存在与工作区关联的 Azure Key Vault 中。 如果已为 Key Vault 启用了软删除,请按照本文中的说明更新凭据。 如果取消注册数据存储,然后尝试使用同一名称重新注册,此操作会失败。 若要了解如何在此方案中启用软删除,请参阅对现有密钥保管库启用软删除

先决条件

注意

本文档中的代码片段已使用 Python SDK 版本 1.0.83 进行测试。

需要更新的内容

存储帐户可由 Azure 机器学习工作区使用(用来存储日志、模型、快照等),也可用作数据存储。 更新工作区的过程是单个 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 机器学习以使用新密钥,请执行以下步骤:

重要

执行所有步骤,使用 CLI 更新工作区,使用 Python 更新数据存储。 仅更新其中一项可能会导致错误,直至两项全部更新。

  1. 重新生成密钥。 有关重新生成访问密钥的信息,请参阅管理存储帐户访问密钥。 保存新密钥。

  2. Azure 机器学习工作区会自动同步新密钥并在一小时后开始使用该密钥。 若要强制工作区立即同步到新密钥,请执行以下步骤:

    1. 使用以下 Azure CLI 命令登录到包含你的工作区的 Azure 订阅:

      az login
      

      提示

      登录后,你将看到与你的 Azure 帐户关联的订阅列表。 在 isDefault: true 的情况下显示的订阅信息是 Azure CLI 命令的当前已激活的订阅。 此订阅必须与包含 Azure 机器学习工作区的订阅相同。 可以在 Azure 门户中工作区的概述页面上找到订阅信息。

      若要选择用于 Azure CLI 命令的另一个订阅,请运行 az account set -s <subscription> 命令并指定要切换到哪个订阅名称或 ID。 有关订阅选择的详细信息,请参阅使用多个 Azure 订阅

    2. 使用以下命令更新工作区以使用新密钥。 将 myworkspace 替换为你的 Azure 机器学习工作区名称,并将 myresourcegroup 替换为包含该工作区的 Azure 资源组的名称。

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

      此命令自动为工作区使用的 Azure 存储帐户同步新密钥。

  3. 可以通过 SDK 或 Azure 机器学习工作室重新注册使用存储帐户的数据存储。

    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. 通过工作室重新注册数据存储

      1. 在工作室中,选择左窗格“资产”下的“数据”。

      2. 在顶部,选择“数据存储”。

      3. 选择要更新的数据存储。

      4. 选择左上角的“更新凭据”按钮。

      5. 使用步骤 1 中的新访问密钥填充窗体,然后单击“保存”。

        若要更新默认数据存储的凭据,请完成此步骤,并重复步骤 2b,以将新密钥与工作区的默认数据存储重新同步。

后续步骤

有关使用数据存储的详细信息,请参阅使用数据存储

有关注册数据存储的详细信息,请参阅 Datastore 类参考。