次の方法で共有


Azure Batch アカウントまたはプールでマネージド ID を使用する

この記事では、Microsoft Azure Batch アカウントまたはバッチ プールでマネージド ID を使用する方法について説明します。 この記事では、バッチ アカウントとバッチ プールでマネージド ID を構成する必要がある場合について説明します。 また、マネージド ID を使用すると、一部の障害状況で混乱を引き起こす可能性があるため、さまざまな動作シナリオについても説明します。

前提条件

バッチ アカウントで使用するストレージ アカウントを設定する

バッチ アカウントでマネージド ID を設定する場合は、最初にストレージ アカウントを設定して、それがバッチ アカウントの自動ストレージとして使用されるようにする必要があります。 この自動ストレージは、アプリケーション パッケージとタスク リソース ファイルを格納するために使用されます。 自動ストレージを構成するには、ストレージ アカウントをバッチ アカウントにリンクする必要があります。 また、自動ストレージ アカウントを設定して、バッチ アカウントマネージド ID を認証モードとして使用する必要もあります。

このセットアップを完了するには、次の手順に従います。

  1. Azure portalで、Batch アカウントを検索して選択します。

  2. バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。

  3. バッチ アカウントのナビゲーション ウィンドウで、[ 設定] 見出しを見つけて、[ ストレージ アカウント] を選択します。

  4. [ ストレージ アカウント情報 ] セクションで、[ ストレージ アカウントの選択] を選択します

  5. ストレージ アカウントの選択が完了したら、[ ストレージ アカウント情報 ] セクションに戻り、[ 認証モード ] フィールドを Batch Account Managed Identity に変更します。

バッチ アカウントでマネージド ID を設定する

注:

このセクションで説明する操作は、バッチ アカウントと Azure Storage または Azure Key Vaultの間です。 バッチ ノードとその他の Azure リソース間の相互作用については、次のセクション (バッチ プールでマネージド ID を設定する) を参照してください。

バッチ アカウントでマネージド ID を構成することで、バッチ アカウントに対して他のサービスに対してのみ認証するアクセス許可を付与します。 この構成では、バッチ ノードまたはバッチ プール仮想マシン (VM) に対して認証を行うことはできません。

バッチ アカウントでマネージド ID を構成する場合は、システム割り当てマネージド ID を有効にするか、バッチ アカウント用に 別のユーザー割り当てマネージド ID を作成 する 2 つのオプションがあります。

バッチ アカウントでマネージド ID を設定するには、次の手順に従います。

  1. Azure portalで、Batch アカウントを検索して選択します。

  2. バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。

  3. バッチ アカウントのナビゲーション ウィンドウで、[ 設定] 見出しを見つけて、[ ID] を選択します。

  4. [ ID の種類 ] 見出しで、[ システム割り当て済み (システム割り当 てマネージド ID の場合)] または [ ユーザー割り当て済み ( ユーザー割り当 てマネージド ID の場合)] を選択します。

  5. この構成が完了したら、バッチ アカウントの概要ページに戻ります。 ページの [ 要点 ] セクションで、[ JSON ビュー] を選択します。 マネージド ID の JSON 表現は、次のいずれかの形式で表示されます。

    システム割り当てマネージド ID
        "identity": {
            "principalId": "<principal-guid>",
            "tenantId": "<tenant-guid>",
            "type": "SystemAssigned"
        }
    
    ユーザー割り当てマネージド ID
        "identity": {
            "type": "UserAssigned",
            "userAssignedIdentities": {
                "/subscriptions/<subscription-guid>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-identity-name>": {
                    "principalId": "<principal-guid>",
                    "clientId": "<client-guid>"
                }
            }
        }
    

マネージド ID を使用して自動ストレージ アカウントにアクセスする

バッチ アカウントのマネージド ID 機能は、アプリケーション パッケージをバッチ アカウントにアップロードするなど、特定のタスクに使用されます。 アプリケーション パッケージをアップロードするには、Azure portalのバッチ アカウントの概要ページに移動し、[アプリケーション>の追加] を選択し、ポータルの指示に従ってアップロードを完了します。 Azure Batchは、アプリケーション パッケージを自動ストレージ アカウントに格納します。 以前にバッチ アカウントの認証モードを Batch Account Managed Identity に設定していたため、システムはバッチ アカウントのマネージド ID から資格情報を取得して自動ストレージ アカウントにアクセスします。

マネージド ID に自動ストレージ アカウントに対する十分なアクセス許可があるかどうかをチェックする必要がある場合があります。 これらのアクセス許可をチェックするには、次の手順に従います。

  1. Azure portalで、[ストレージ アカウント] を検索して選択します。

  2. ストレージ アカウントの一覧で、自動ストレージ アカウントの名前を選択します。

  3. ストレージ アカウントのナビゲーション ウィンドウで、[Access Control (IAM)] を選択します。

  4. [Access Control (IAM)] ページで、[アクセスの確認] ボタンを選択します。

  5. [ アクセスの確認 ] ウィンドウで、[ マネージド ID ] オプションを選択します。

  6. [ マネージド ID] フィールドで、アクセス許可を表示するマネージド ID を選択します。

  7. [現在のロールの割り当て] タブで、アプリケーション パッケージをアップロードするための十分なアクセス許可を持つ割り当てられたロールがあるかどうかをチェックします。 このようなロールの割り当てがない場合は、アプリケーション パッケージをバッチ アカウントにアップロードしようとすると、Azure portal通知に次のエラー メッセージが表示されます。

    パッケージ名>.zipの<アップロード エラー

    ファイルのアップロード中に予期しないエラーが発生しました。

このアップロード エラーが発生した場合は、アップロード要求の HTTP アーカイブ (.har) ファイルをチェックします。 の名前プレフィックス batch (たとえば) を含む POST 要求があり、 batch?api-version=2020-06-01HTTP 状態は 200 になります。 ペイロードには、バッチ アカウントに送信される実際の PUT 要求が表示されます。 PUT 要求への応答には、HTTP 状態 409 が表示されます。 完全なエラー応答は、次のテキストのようになります。

{responses: [{name: "<response-guid>", httpStatusCode: 409,...}]}
  {responses: [{name: "<response-guid>", httpStatusCode: 409,...}]}
    0: {name: "<response-guid>", httpStatusCode, 409,...}
      content: {error: {code: "AutoStorageNoPermission",...}}
        error: {code: "AutoStorageNoPermission",...}
          code: "AutoStorageNoPermission"
          message: "The managed identity does not have permission to access auto storage account. Please use Azure RBAC to assign the managed identity access to auto storage."
          target: "BatchAccount"
        contentLength: 318

このエラーは、バッチ アカウントのシステム割り当てマネージド ID またはユーザー割り当てマネージド ID に、自動ストレージ アカウントでアクションを実行するための十分なアクセス許可がないことを意味します。

マネージド ID を使用してキー コンテナーにアクセスする

マネージド ID を使用して Azure Key Vaultにアクセスする方法については、「Azure Key Vault とマネージド ID を使用してAzure Batch アカウントのカスタマー マネージド キーを構成する」を参照してください。

バッチ プールでマネージド ID を設定する

注:

このセクションで説明する相互作用は、バッチ ノードと他の Azure リソースの間です。 バッチ アカウントと Azure Storage または Azure Key Vault間の対話については、前のセクション (バッチ アカウントでマネージド ID を設定する) を参照してください。

Azure Batch ノードが他の Azure リソースへのアクセスを許可する場合は、Azure Batch プールで構成されているマネージド ID を使用します。

自動ストレージ アカウントの認証モードが Batch Account Managed Identity に設定されている場合、Azure Batch ノードはマネージド ID トークンを受け取ります。 ノードは、マネージド ID トークンを使用して、Azure Instance Metadata Service (IMDS) を使用してMicrosoft Entra認証を使用して認証します。

Azure バッチ プールでは、ユーザー割り当てバージョンのマネージド ID のみがサポートされます。 そのため、Azure Batch アカウントと同じテナントにユーザー割り当てマネージド ID を作成する必要があります。 また、 ストレージ データ プレーン (ストレージ BLOB データ所有者など) にユーザー割り当てマネージド ID へのアクセス許可を付与する必要があります。

自動ストレージ アカウントにアクセスするノードにマネージド ID を関連付ける

コンピューティング ノードが自動ストレージへのアクセスに使用するユーザー割り当て ID の場合は、自動ストレージへのアクセスが必要なコンピューティング ノードを持つプールにこの ID 参照を割り当てる必要があります。 (この要件の詳細については、 プロパティの Batch アカウントの REST API - Update の AutoStorageBasePropertiesnodeIdentityReference説明されています)。そのため、Azure portal上の 2 つの場所でノード ID 参照を構成する必要があります。

  • バッチ アカウントの自動ストレージ アカウントのノード ID 参照

  • バッチ プール内のユーザー割り当てマネージド ID

重要

プール ID には、複数のユーザー割り当てマネージド ID を定義できます。 ただし、ノード ID 参照で定義されたものもプール ID で定義する必要があります。

自動ストレージ アカウントのノード ID リファレンスを設定する

自動ストレージ アカウントでノード ID 参照を設定するには、次の手順に従います。

  1. Azure portalで、Batch アカウントを検索して選択します。

  2. バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。

  3. バッチ アカウントのナビゲーション ウィンドウで、[ 設定] 見出しを見つけて、[ ストレージ アカウント] を選択します。

  4. [ ストレージ アカウント情報 ] セクションで、[ ストレージ アカウントの選択] を選択し、自動ストレージ アカウントを選択します。

  5. [ノード ID 参照] 見出しに移動し、[追加] を選択します。

  6. 新しいユーザー割り当てノード ID 参照を追加するプロセスを完了します。

バッチ プールのユーザー割り当てマネージド ID を設定する

バッチ プールでユーザー割り当てマネージド ID を設定するには、次の手順に従います。

  1. Azure portalで、Batch アカウントを検索して選択します。

  2. バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。

  3. バッチ アカウントのナビゲーション ウィンドウで、[ 機能 ] 見出しを見つけて、[プール] を選択 します

  4. バッチ プール ページで、[追加] を選択 します

  5. [ プールの追加] ページで、 プール ID を入力します。 [ID] フィールド 、[ ユーザー割り当て] を選択します。

  6. [ ユーザー割り当てマネージド ID ] 見出しを見つけて、[ 追加] を選択します。

  7. 前に作成したノード ID 参照をバッチ プールに追加するプロセスを完了します。

バッチ ノード内のマネージド ID のユース ケース

バッチ ノード内では、次の機能など、さまざまな方法でマネージド ID を使用できます。

  • バッチ プールからアプリケーション パッケージをダウンロードする
  • バッチ プールからタスク リソース ファイルをダウンロードする

バッチ プールからアプリケーション パッケージをダウンロードする

バッチ プールを作成するときに、プール レベルでアプリケーション パッケージを指定できます。 アプリケーション パッケージは autostorage アカウントからダウンロードされ、このプール内のすべてのノードにインストールされます。 詳細については、「 アプリケーションのアップロードと管理」を参照してください。 バッチ プールの作成時に参照する前に、アプリケーション パッケージをバッチ アカウントにアップロードします。 アプリケーション パッケージをバッチ プールに追加するには、バッチ アカウントの [プールの追加] ページに移動し、[ 省略可能な設定] 見出しを見つけて、[ アプリケーション パッケージ] を選択します。

動作シナリオ

このセクションでは、ノードの運用状態と、次のマネージド ID パラメーターのアプリケーション パッケージダウンロードの状態について説明します。

  • マネージド ID がノード ID 参照で指定されるかどうか

  • マネージド ID が自動ストレージ アカウントに十分なアクセス許可を持っているかどうか

  • バッチ プールが同じマネージド ID を使用して作成されたか、別のマネージド ID を使用して作成されたか

Azure portalでは、バッチ ノードの概要ページでノードとパッケージのダウンロード状態を確認できます。 このページに移動するには、バッチ プールのナビゲーション ウィンドウの [全般 ] 見出しを見つけて、[ ノード] を選択し、表示するノードの名前を選択します。

次の表は、バッチ プール内のマネージド ID とアプリケーション パッケージに関連する 4 つの動作シナリオの概要を示しています。

シナリオ番号 マネージド ID の使用状況 自動ストレージ アカウントのマネージド ID アクセス許可 プールの作成仕様 ノードの状態 パッケージのダウンロードの状態
1 ノード ID リファレンスで指定 十分なアクセス許可 同じマネージド ID を使用してプール内に作成される 正常に開始されました ルート/アプリケーション ディレクトリ内のノードにダウンロード
2 ノード ID リファレンスで指定 アクセス許可が不十分 同じマネージド ID を使用してプール内に作成される 正常に開始されましたが、 アイドル 状態 ノードにダウンロードされない
3 ノード ID 参照に指定されていません 十分なアクセス許可または不十分なアクセス許可 同じマネージド ID または別のマネージド ID を使用してプールで作成される 開始状態で無期限にスタックする ノードにダウンロードされない
4 ノード ID リファレンスで指定 十分なアクセス許可または不十分なアクセス許可 別のマネージド ID を使用してプールで作成される 使用できない 状態 ノードにダウンロードされない

シナリオ 3 では、Azure Batch サービスがノードを開始しようとすると、ノード ID 参照は null になります。 これにより、ノードは 開始 状態のままです。 この状態を確認するには、バッチ プール ノードの [概要 ] ページに移動し、[ バッチ ログのアップロード ] を選択して、バッチ ログをストレージ コンテナーにアップロードします。 [ バッチ ログのアップロード ] ウィンドウで、Azure Storage コンテナーを選択し、[ ストレージ コンテナーの選択 ] ボタンを選択し、ストレージ コンテナーから agent-debug.log ファイルを選択してダウンロードします。 ログ ファイルには、"プールがまだ完全に参加していない、health=Status.TvmJoinPoolInProgresss" メッセージを含む複数のエントリが含まれます。

シナリオ 4 では、バッチ プールを作成するときに、複数のマネージド ID を定義できます。 ノード ID 参照で定義したマネージド ID がプール ID に追加されない場合はどうしますか? その場合、Azure Batch サービスは、ノード参照で定義されているマネージド ID と一致する正しいマネージド ID を見つけることができません。 代わりに、サービスに次のノード エラー メッセージが表示されます。

ノードに 1 つのエラーがあります。

ノードでエラーが発生しました

コード: ApplicationPackageError

メッセージ:
プールに指定された 1 つ以上のアプリケーション パッケージが無効です

バッチ プールからタスク リソース ファイルをダウンロードする

タスクの作成中に、タスクで使用するリソース ファイルを指定できます。 これらのファイルは、タスク コマンドを実行する前に、自動ストレージ アカウントからノードに自動的にダウンロードされます。 詳細については、「Azure Batchのタスク」を参照してください。 タスク リソース ファイルを指定するには、次の手順に従います。

  1. Azure portalで、Batch アカウントを検索して選択します。

  2. バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。

  3. バッチ アカウントのナビゲーション ウィンドウで、[ 機能 ] 見出しを見つけて、[ジョブ] を選択 します

  4. [ ジョブ ] ページで、[ 追加] を選択します。

  5. [ ジョブの追加 ] ウィンドウで必要なフィールドに入力し、[ OK] を選択します

  6. バッチ ジョブのナビゲーション ウィンドウで、[ 全般 ] 見出しを見つけて、[タスク] を選択 します

  7. [ タスク ] ページで、[ 追加] を選択します。

  8. [ タスクの追加 ] ウィンドウで、必要なフィールドを入力します。 次に、[ 詳細設定] 見出しを見つけて、[ リソース ファイル] を選択します。

    Azure Batch アカウントの [ジョブ] ページの [作業ウィンドウの追加] のAzure portalスクリーンショット。

リソース ファイルは、次の表で説明するメソッドを使用して指定できます。

メソッド Notes (メモ)
自動ストレージ コンテナー ID 参照は [なし] として表示され、変更できません。 ノードは自動ストレージ アカウントにアクセスして、リソース ファイルを取得します。
コンテナー URL または HTTP URL ID 参照の Azure Storage アカウントで十分なアクセス許可が構成されていて、ID がバッチ プールに追加された場合は、別の Azure Storage アカウントの URL を定義できます。

自動ストレージ アカウントにアクセスする必要がある場合は、ノード ID 参照とプール ID の両方で ID を定義する必要があります。

リソース ファイル定義を指定する場合、 BLOB プレフィックスファイル パス パラメーターは省略可能です。 BLOB プレフィックスは、特定の BLOB をフィルター処理するために使用されます。 ファイル パスは、BLOB ファイルを格納するためのサブフォルダーをノードに作成するために使用されます。 ファイル パスが定義されていない場合、ファイルは各タスクのパス (root/wd) に格納されます。

リソース ファイルの種類 BLOB プレフィックス ファイル パス ファイル モード (Linux のみ) ID リファレンス
AutoStorageContainerName <name-of-app> mypath1
StorageContainerUrl <https:// account-name.blob.core.windows.net/con> mypath2 /subscriptions/<subscription-guid>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-identity-name>
HttpUrl <https:// account-name.blob.core.windows.net/con/api.crt> mypath3 /subscriptions/<subscription-guid>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-identity-name>

動作シナリオ

次の表は、マネージド ID を使用してバッチ プールを作成し、リソース ファイルを含むタスクを作成して自動ストレージ コンテナーから BLOB を取得するときに発生する可能性がある 4 つの動作シナリオの概要を示しています。

シナリオ番号 マネージド ID の使用状況 自動ストレージ アカウントのマネージド ID アクセス許可 プールの作成仕様 結果
1 ノード ID リファレンスで指定 十分なアクセス許可 同じマネージド ID を使用してプール内に作成される BLOB ファイルは、タスクの概要ページに示すように、 ルート/wd/<file-path> ディレクトリ内のノードに正常にダウンロードされます
2 ノード ID リファレンスで指定 アクセス許可が不十分 同じマネージド ID を使用してプール内に作成される ResourceContainerAccessDenied エラーが原因でタスクが失敗します。エラー メッセージ "指定された Azure Blob コンテナーの 1 つに対するアクセスが拒否されました"
3 ノード ID 参照に指定されていません 十分なアクセス許可または不十分なアクセス許可 同じマネージド ID または別のマネージド ID を使用してプールで作成される ResourceContainerAccessDenied エラーが原因でタスクが失敗します。エラー メッセージ "指定された Azure Blob コンテナーの 1 つに対するアクセスが拒否されました"
4 ノード ID リファレンスで指定 十分なアクセス許可または不十分なアクセス許可 別のマネージド ID を使用してプールで作成される ResourceContainerListMiscError エラーが原因でタスクが失敗します。エラー メッセージ "指定された Azure Blob コンテナーの 1 つを一覧表示中に発生したその他のエラー"

BLOB 取得タスクが失敗するシナリオでは、Azure portalの [タスク] ページに移動し、エラー コードの横に表示されるタスクの名前を選択します。 次に、タスク ページのナビゲーション ウィンドウで、[ 全般 ] 見出しを見つけて、[ プロパティ] を選択し、[ Json ビュー] を選択します。 プロパティの JSON 表示には、対応するエラー メッセージと、失敗したタスクに関するその他の詳細が表示されます。 たとえば、シナリオ 4 では、"HTTP 400 Bad Request" エラーが原因で ResourceContainerListMiscError エラーが失敗します。 これは、ノード ID 参照で定義されているマネージド ID が、プール ID 構成で定義されているマネージド ID と一致しないためです。

マネージド ID が Azure リソースにアクセスできることを確認する

Windows で、Azure Batch ノードに割り当てられているマネージド ID に、Azure リソース (ストレージ アカウントなど) にアクセスするための十分なアクセス許可があることを確認するには、次の手順を実行します。

注:

この手順では、ストレージ アカウントにアクセスするための有効な ID ID を持つトークンを取得し、十分なアクセス許可を得るためにチェックする必要がある最後の手順をエミュレートします。 ID がノード ID 参照で定義されていない場合、ノードは ID を取得できません。 その場合、最後のステップを実行する前に、プロセス全体が既にブロックされています。 この手順を実行する前に、ID がノード ID 参照で定義されていることを確認します。

  1. リモート デスクトップ プロトコル (RDP) を使用してノードに接続します。

  2. Postman で、ヘッダーを含む GET 要求を Metadata: true 次の URL に送信します。

    http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://storage.azure.com/&mi_res_id=/subscriptions/<subscription-guid>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-assigned-identity-name>

    169.254.169.254 IP アドレスは、Azure Instance Metadata Service (IMDS) とも呼ばれます。 IMDS は、VM インスタンスに関する情報を提供します。 この VM インスタンス情報がある場合は、VM を使用してマネージド ID のトークンを要求できます。

    URL の mi_res_id パラメーター値は太字で表示されます。 これは、プール ID で定義したユーザー割り当てマネージド ID のリソース ID です。 そのリソース ID をクライアント ID とプリンシパル ID と共に見つけるには、次の手順に従います。

    1. Azure portalで、Batch アカウントを検索して選択します。

    2. バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。

    3. バッチ アカウントのナビゲーション ウィンドウで、[ 機能 ] 見出しを見つけて、[プール] を選択 します

    4. バッチ プールの一覧で、バッチ プールの名前を選択します。

    5. バッチ プールのナビゲーション ウィンドウで、[ 全般 ] 見出しを見つけて、[ プロパティ] を選択します。

    6. プールのプロパティ ページで、[ Json ビュー] を選択します。

    7. JSON テキストで、一覧を identity/userAssignedIdentities 見つけます。 使用しているユーザー割り当てマネージド ID の場合は、次のプロパティの値をコピーします。

      • resourceId
      • clientId (GUID)
      • principalId (GUID)

    Postman で URL を送信すると、JSON 応答の本文に (ベアラー トークンとも呼ばれる長いテキスト文字列) と client_id (GUID) のエントリaccess_tokenが含まれます。 応答値は client_id 、バッチ プールの clientId プロパティ ページからコピーした値と一致する必要があります。

    警告

    プール ID に複数のマネージド ID を定義しましたが、URL にマネージド ID を指定しませんでしたか? その場合、Postman は 400 の無効な要求 状態を表示します。

    プール ID で多数のマネージド ID を定義しているが、指定していない場合の 400 Bad Request 状態の Postman スクリーンショット。

  3. 完全なベアラー トークンをコピーし、自動ストレージ アカウントから BLOB を取得して Postman でテストします。 この例では、マネージド ID にストレージにアクセスするためのアクセス許可がありません。 そのため、自動ストレージ アカウントは HTTP 403 エラー (AuthorizationPermissionMismatch エラー、"この要求は、このアクセス許可を使用してこの操作を実行する権限がありません" というメッセージ) を返すことによって応答します。

    注:

    BLOB を取得するには、 x-ms-version ヘッダーが必要です。 詳細については、「 Azure Storage Get Blob API」を参照してください。

    マネージド ID が自動ストレージ アカウントへのアクセスを承認されていない場合の 403 AuthorizationPermissionMismatch 状態の Postman スクリーンショット。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

サードパーティのお問い合わせ窓口に関する免責事項

Microsoft では、このトピックに関する追加情報を見つけるのに役立つサード パーティの連絡先情報を提供しています。 将来予告なしに変更されることがあります。 Microsoft は、第三者の連絡先情報の正確性を保証しません。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。