ストレージ アカウント キーの再生成

Azure Machine Learning で使用される Azure ストレージ アカウントのアクセス キーを変更する方法について説明します。 Azure Machine Learning では、ストレージ アカウントを使用してデータまたはトレーニング済みモデルを保存できます。

セキュリティ上の理由から、Azure ストレージ アカウントのアクセス キーを変更することが必要になる場合があります。 アクセス キーを再生成した場合は、その新しいキーを使用するように Azure Machine Learning を更新する必要があります。 Azure Machine Learning では、ストレージ アカウントはモデル ストレージ用に使用される場合とデータストアとして使用される場合の両方があります。

重要

データストアに登録された資格情報は、ワークスペースに関連付けられている Azure キー コンテナーに保存されます。 キー コンテナーで論理的な削除を有効にしている場合は、この記事に資格情報を更新する手順が記載されています。 データストアの登録を解除し、同じ名前で再登録しようとすると、この操作は失敗します。 このシナリオでの論理的な削除を有効にする方法については、「既存のキー コンテナーの論理的な削除を有効にする」を参照してください。

前提条件

注意

このドキュメントのコード スニペットは、Python SDK のバージョン 1.0.83 を使用してテストされています。

更新する必要があるもの

ストレージ アカウントは、Azure Machine Learning のワークスペース (ログ、モデル、スナップショットなどを格納する) で使用することも、データストアとして使用することもできます。 ワークスペースを更新するプロセスは 1 つの 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 Storage を使用する登録済みデータストアを検索し、次の情報を一覧表示します。

  • データストア名: ストレージ アカウントが登録されているデータストアの名前。
  • ストレージ アカウント名: 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 Storage を使用する登録済みデータストアの有無を検索し、次の情報を一覧表示します。

  • データストア名: ストレージ アカウントが登録されているデータストアの名前。
  • ストレージ アカウント名: Azure ストレージ アカウントの名前。
  • コンテナー: この登録によって使用されるストレージ アカウント内のコンテナー。

また、データストアが Azure Blob 用か Azure File 共有用かも示されています。それぞれの種類のデータストアを再登録するメソッドは異なるためです。

アクセス キーの再生成を計画している対象であるストレージ アカウントのエントリが存在する場合は、データストア名、ストレージ アカウント名、コンテナー名を保存します。

アクセス キーの更新

新しいキーを使用するように Azure Machine Learning を更新するには、次の手順のようにします。

重要

すべての手順を実行し、ワークスペース (CLI を使用して) とデータストア (Python を使用して) の両方を更新します。 どちらか一方だけを更新すると、両方が更新されるまでエラーが発生する可能性があります。

  1. キーを再生成します。 アクセス キーを再生成する方法の詳細については、「ストレージ アカウント アクセス キーを管理する」を参照してください。 新しいキーを保存します。

  2. Azure Machine Learning ワークスペースによって新しいキーは自動的に同期され、1 時間後に使用が開始されます。 ワークスペースを強制的に新しいキーとすぐに同期するには、次の手順を実行します。

    1. ご利用のワークスペースが含まれる Azure サブスクリプションにサインインするには、次の Azure CLI コマンドを使用します。

      az login
      

      ヒント

      ログインすると、ご使用のアカウントに関連付けられているサブスクリプションの一覧が表示されます。 isDefault: true が示されているサブスクリプション情報が、Azure CLI コマンドに対して現在アクティブになっているサブスクリプションです。 このサブスクリプションは、Azure Machine Learning ワークスペースが含まれているものと同じである必要があります。 Azure portal で自分のワークスペースの概要ページに移動することで、サブスクリプション ID を確認できます。

      別のサブスクリプションを選択するには、az account set -s <subscription name or ID> コマンドを使用して、切り替えるサブスクリプション名または ID を指定します。 サブスクリプションの選択の詳細については、「複数の Azure サブスクリプションの使用」を参照してください。

    2. 新しいキーを使用するようにワークスペースを更新するには、次のコマンドを使用します。 myworkspace をお使いの Azure Machine Learning ワークスペース名に置き換え、myresourcegroup を、そのワークスペースを含む Azure リソース グループの名前に置き換えます。

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

      このコマンドにより、ワークスペースで使用する Azure ストレージ アカウントの新しいキーが自動的に同期されます。

  3. SDK または Azure Machine Learning Studio を使用して、ストレージ アカウントを使用するデータストアを再登録することができます。

    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 クラスのリファレンスを参照してください。