你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重新生成存储帐户访问密钥
了解如何更改 Azure 机器学习使用的 Azure 存储帐户的访问密钥。 Azure 机器学习可以使用存储帐户来存储数据或训练后的模型。
出于安全考虑,你可能需要更改 Azure 存储帐户的访问密钥。 重新生成访问密钥时,必须更新 Azure 机器学习以使用新密钥。 Azure 机器学习可以将存储帐户同时用作模型存储和数据存储。
重要
注册到数据存储的凭据会保存在与工作区关联的 Azure Key Vault 中。 如果已为 Key Vault 启用了软删除,请按照本文中的说明更新凭据。 如果取消注册数据存储,然后尝试使用同一名称重新注册,此操作会失败。 若要了解如何在此方案中启用软删除,请参阅对现有密钥保管库启用软删除。
先决条件
- Azure 机器学习工作区。 有关详细信息,请参阅创建工作区资源一文。
注意
本文档中的代码片段已使用 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 更新数据存储。 仅更新其中一项可能会导致错误,直至两项全部更新。
重新生成密钥。 有关重新生成访问密钥的信息,请参阅管理存储帐户访问密钥。 保存新密钥。
Azure 机器学习工作区会自动同步新密钥并在一小时后开始使用该密钥。 若要强制工作区立即同步到新密钥,请执行以下步骤:
使用以下 Azure CLI 命令登录到包含你的工作区的 Azure 订阅:
az login
提示
登录后,你将看到与你的 Azure 帐户关联的订阅列表。 在
isDefault: true
的情况下显示的订阅信息是 Azure CLI 命令的当前已激活的订阅。 此订阅必须与包含 Azure 机器学习工作区的订阅相同。 可以在 Azure 门户中工作区的概述页面上找到订阅信息。若要选择用于 Azure CLI 命令的另一个订阅,请运行
az account set -s <subscription>
命令并指定要切换到哪个订阅名称或 ID。 有关订阅选择的详细信息,请参阅使用多个 Azure 订阅。使用以下命令更新工作区以使用新密钥。 将
myworkspace
替换为你的 Azure 机器学习工作区名称,并将myresourcegroup
替换为包含该工作区的 Azure 资源组的名称。az ml workspace sync-keys -n myworkspace -g myresourcegroup
此命令自动为工作区使用的 Azure 存储帐户同步新密钥。
可以通过 SDK 或 Azure 机器学习工作室重新注册使用存储帐户的数据存储。
若要通过 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)
通过工作室重新注册数据存储
在工作室中,选择左窗格“资产”下的“数据”。
在顶部,选择“数据存储”。
选择要更新的数据存储。
选择左上角的“更新凭据”按钮。
使用步骤 1 中的新访问密钥填充窗体,然后单击“保存”。
若要更新默认数据存储的凭据,请完成此步骤,并重复步骤 2b,以将新密钥与工作区的默认数据存储重新同步。
后续步骤
有关使用数据存储的详细信息,请参阅使用数据存储。
有关注册数据存储的详细信息,请参阅 Datastore
类参考。