Azure Batch アカウントまたはプールでマネージド ID を使用する
この記事では、Microsoft Azure Batch アカウントまたはバッチ プールでマネージド ID を使用する方法について説明します。 この記事では、バッチ アカウントとバッチ プールでマネージド ID を構成する必要がある場合について説明します。 また、マネージド ID を使用すると、一部の障害状況で混乱が生じる可能性があるため、さまざまな動作シナリオの概要についても説明します。
前提条件
バッチ アカウントで使用するストレージ アカウントを設定する
バッチ アカウントでマネージド ID を設定する場合は、最初にストレージ アカウントを設定して、それがバッチ アカウントの自動ストレージとして使用されるようにする必要があります。 この自動転送は、アプリケーション パッケージとタスク リソース ファイルを格納するために使用されます。 自動ストレージ用に構成するには、ストレージ アカウントをバッチ アカウントにリンクする必要があります。 また、認証モードとしてバッチ アカウントのマネージド ID を使用するように自動ストレージ アカウントを設定する必要があります。
この設定を完了するには、次の手順を実行します。
Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。
バッチ アカウントのナビゲーション ウィンドウで、 Settings 見出しを見つけて、 Storage アカウントを選択します。
[ STORAGE アカウント情報 セクションで、 ストレージ アカウントの選択を選択します。
ストレージ アカウントの選択が完了したら、 STORAGE ACCOUNT INFORMATION セクションに戻り、 認証モード フィールドを Batch Account Managed Identity に変更します。
バッチ アカウントでマネージド ID を設定する
Note
このセクションで説明する操作は、バッチ アカウントと Azure Storage または Azure Key Vault の間です。 バッチ ノードとその他の Azure リソース間の対話については、次のセクションを参照してください (バッチ プールでのマネージド ID の設定)。
バッチ アカウントでマネージド ID を構成することで、他のサービスに対してのみ認証するアクセス許可をバッチ アカウントに付与します。 この構成では、バッチ ノードまたはバッチ プール仮想マシン (VM) に対して認証を行うことはできません。
バッチ アカウントでマネージド ID を構成する場合は、システム割り当てマネージド ID を有効にするか、バッチ アカウント用に別のユーザー割り当てマネージド ID を作成という 2 つのオプションがあります。
バッチ アカウントでマネージド ID を設定するには、次の手順に従います。
Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。
バッチ アカウントのナビゲーション ウィンドウで、 Settings 見出しを見つけて、 Identity を選択します。
Identity の種類見出しで、System assigned (システム割り当てマネージド ID の場合) または ユーザー割り当て (ユーザー割り当てマネージド ID の場合) のいずれかを選択します。
この構成が完了したら、バッチ アカウントの概要ページに戻ります。 ページの Essentials セクションで、 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 でバッチ アカウントの概要ページに移動し、 Applications>Add を選択し、ポータルの指示に従ってアップロードを完了します。 Azure Batch は、アプリケーション パッケージをその自動ストレージ アカウントに格納します。 以前にバッチ アカウントの認証モードを Batch Account Managed Identity に設定していたため、システムはバッチ アカウントのマネージド ID から資格情報を取得して、自動ストレージ アカウントにアクセスします。
場合によっては、マネージド ID に自動ストレージ アカウントに対する十分なアクセス許可があるかどうかを確認する必要があります。 これらのアクセス許可を確認するには、次の手順に従います。
Azure ポータルでStorage アカウントを検索して選択します。
ストレージ アカウントの一覧で、自動ストレージ アカウントの名前を選択します。
ストレージ アカウントのナビゲーション ウィンドウで、 Access Control (IAM)を選択します。
Access コントロール (IAM) ページで、アクセスの確認 ボタンを選択します。
アクセスの確認 ウィンドウで、管理 ID オプションを選択します。
[ 管理 ID フィールドで、アクセス許可を表示するマネージド ID を選択します。
[現在のロールの割り当て] タブで、アプリケーション パッケージをアップロードするための十分なアクセス許可を持つ割り当てられたロールがあるかどうかを確認します。 このようなロールの割り当てがない場合、アプリケーション パッケージをバッチ アカウントにアップロードしようとすると、Azure portal の通知に次のエラー メッセージが表示されます。
<package-name のアップロード エラー>.zip
ファイルのアップロード中に予期しないエラーが発生しました。
このアップロード エラーが発生した場合は、アップロード要求の HTTP アーカイブ (.har) ファイルを確認します。 batch
の名前プレフィックス (batch?api-version=2020-06-01
など) を含む POST 要求があり、HTTP 状態が 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 を設定する
Note
このセクションで説明する相互作用は、バッチ ノードと他の 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 を作成する必要があります。 また、ユーザー割り当てマネージド ID に storage データ プレーン (たとえば、 Storage BLOB データ所有者) にアクセス許可を付与する必要があります。
自動ストレージ アカウントにアクセスするノードにマネージド ID を関連付ける
コンピューティング ノードが自動ストレージへのアクセスに使用するユーザー割り当て ID の場合は、自動ストレージへのアクセスを必要とするコンピューティング ノードを持つプールにこの ID 参照を割り当てる必要があります。 (この要件の詳細については、の REST API で説明されていますBatch アカウント - nodeIdentityReference
プロパティの AutoStorageBaseProperties を更新します。そのため、Azure portal で次の 2 つの場所でノード ID 参照を構成する必要があります。
バッチ アカウントの自動ストレージ アカウントの Node ID リファレンス
バッチ プール内の User 割り当てマネージド ID
重要
プール ID には、複数のユーザー割り当てマネージド ID を定義できます。 ただし、ノード ID 参照で定義されたものは、プール ID でも定義する必要があります。
自動ストレージ アカウントのノード ID 参照を設定する
autostorage アカウントでノード ID 参照を設定するには、次の手順に従います。
Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。
バッチ アカウントのナビゲーション ウィンドウで、 Settings 見出しを見つけて、 Storage アカウントを選択します。
[ STORAGE アカウント情報 セクションで、 ストレージ アカウントの選択を選択し、自動ストレージ アカウントを選択します。
Node ID 参照見出しに移動し、Add を選択します。
新しいユーザー割り当てノード ID 参照を追加するプロセスを完了します。
バッチ プールのユーザー割り当てマネージド ID を設定する
バッチ プールでユーザー割り当てマネージド ID を設定するには、次の手順に従います。
Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。
バッチ アカウントのナビゲーション ウィンドウで、 Features 見出しを見つけて、 Pools を選択します。
バッチ プール ページで、 [追加を選択します。
プールの追加 ページで、Pool ID を入力します。 [ Identity フィールドで、 ユーザー割り当て済みを選択します。
ユーザー割り当てマネージド ID見出しを見つけて、追加を選択します。
以前に作成したノード ID 参照をバッチ プールに追加するプロセスを完了します。
バッチ ノード内のマネージド ID のユース ケース
次の機能など、さまざまな方法でバッチ ノード内でマネージド ID を使用できます。
- バッチ プールからアプリケーション パッケージをダウンロードする
- バッチ プールからタスク リソース ファイルをダウンロードする
バッチ プールからアプリケーション パッケージをダウンロードする
バッチ プールを作成するときに、プール レベルでアプリケーション パッケージを指定できます。 アプリケーション パッケージは、autostorage アカウントからダウンロードされ、このプール内のすべてのノードにインストールされます。 詳細については、「 アプリケーションのアップロードと管理を参照してください。 バッチ プールの作成時に参照する前に、アプリケーション パッケージをバッチ アカウントにアップロードします。 アプリケーション パッケージをバッチ プールに追加するには、バッチ アカウントの プールの追加 ページに移動し、 OPTIONAL 設定 見出しを見つけて、 アプリケーション パッケージを選択します。
動作シナリオ
このセクションでは、次のマネージド ID パラメーターのノード操作状態とアプリケーション パッケージダウンロードの状態について説明します。
マネージド ID がノード ID 参照で指定されるかどうか
マネージド ID が自動ストレージ アカウントに十分なアクセス許可を持っているかどうか
バッチ プールが同じマネージド ID または別のマネージド ID を使用して作成されたかどうか
Azure portal では、バッチ ノードの概要ページでノードとパッケージのダウンロード状態を確認できます。 このページに移動するには、バッチ プールのナビゲーション ウィンドウの General 見出しを見つけて、 Nodes を選択し、表示するノードの名前を選択します。
次の表は、バッチ プール内のマネージド ID とアプリケーション パッケージを含む 4 つの動作シナリオの概要を示しています。
シナリオ番号 | マネージド ID の使用 | 自動ストレージ アカウントのマネージド ID のアクセス許可 | プール作成の仕様 | ノードの状態 | パッケージのダウンロードの状態 |
---|---|---|---|---|---|
1 | ノード ID 参照で指定 | 十分なアクセス許可 | 同じマネージド ID を使用してプール内に作成される | 正常に開始されました | root/applications ディレクトリ内のノードにダウンロードされます |
2 | ノード ID 参照で指定 | アクセス許可が不十分です | 同じマネージド ID を使用してプール内に作成される | 正常に開始されましたが、 Idle 状態 | ノードにダウンロードされない |
3 | ノード ID 参照に指定されていません | 十分なアクセス許可または不十分なアクセス許可 | 同じマネージド ID または別のマネージド ID を使用してプール内に作成される | Starting 状態で無期限にスタックする | ノードにダウンロードされない |
4 | ノード ID 参照で指定 | 十分なアクセス許可または不十分なアクセス許可 | 別のマネージド ID を使用してプール内に作成される | 使用できない 状態 | ノードにダウンロードされない |
シナリオ 3 では、Azure Batch サービスがノードを開始しようとすると、ノード ID 参照が null になります。 これにより、ノードは Starting 状態のままです。 この状態を確認するには、バッチ プール ノード Overview ページに移動し、バッチ ログ アップロード を選択して、バッチ ログをストレージ コンテナーにアップロードします。 バッチ ログのアップロード ウィンドウで、Azure Storage コンテナーを選択し、選択ストレージ コンテナー ボタンを選択し、ストレージ コンテナーからagent-debug.log ファイルを選択してダウンロードします。 ログ ファイルには、"pool not fully joined, health=Status.TvmJoinPoolInProgress" というメッセージが含まれている複数のエントリが含まれます。
シナリオ 4 では、バッチ プールを作成するときに、複数のマネージド ID を定義できます。 ノード ID 参照で定義したマネージド ID がプール ID に追加されない場合はどうしますか? その場合、Azure Batch サービスは、ノード参照で定義されているマネージド ID と一致する適切なマネージド ID を見つけることができません。 代わりに、サービスに次のノード エラー メッセージが表示されます。
ノードに 1 つのエラーがあります。
ノードでエラーが発生しました
Code: ApplicationPackageError
メッセージ:
プールに指定された 1 つ以上のアプリケーション パッケージが無効です
バッチ プールからタスク リソース ファイルをダウンロードする
タスクを作成するときに、タスクで使用するリソース ファイルを指定できます。 これらのファイルは、タスク コマンドを実行する前に、自動ストレージ アカウントからノードに自動的にダウンロードされます。 詳細については、「 Tasks in Azure Batch」を参照してください。 タスク リソース ファイルを指定するには、次の手順に従います。
Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。
バッチ アカウントのナビゲーション ウィンドウで、 Features 見出しを見つけて、 Jobs を選択します。
Jobs ページで、[追加選択。
ジョブの追加 ウィンドウで必須フィールドに入力し、 OKを選択します。
バッチ ジョブのナビゲーション ウィンドウで、 General 見出しを見つけて、 Tasks を選択します。
[タスク] ページで、[追加] を選択します。
タスクの追加 ウィンドウで、必要なフィールドに入力します。 次に、 ADVANCED 設定 見出しを見つけて、 リソース ファイルを選択します。
リソース ファイルは、次の表に示すメソッドを使用して指定できます。
メソッド | メモ |
---|---|
Autostorage コンテナー | ID 参照は None として表示され、変更することはできません。 ノードは、リソース ファイルを取得するために自動ストレージ アカウントにアクセスします。 |
コンテナー URL または HTTP URL | ID 参照用にその Azure Storage アカウントに十分なアクセス許可が構成されていて、ID がバッチ プールに追加された場合は、別の Azure Storage アカウントの URL を定義できます。 |
自動ストレージ アカウントにアクセスする必要がある場合は、ノード ID 参照とプール ID の両方で ID を定義する必要があります。
リソース ファイル定義を指定する場合、 Blob プレフィックス および File パス パラメーターは省略可能です。 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 ファイルは、タスクの概要ページに示すように、 root/wd/<file-path> ディレクトリ内のノードに正常にダウンロードされます |
2 | ノード ID 参照で指定 | アクセス許可が不十分です | 同じマネージド ID を使用してプール内に作成される | ResourceContainerAccessDenied エラーが発生したため、タスクが失敗します。エラー メッセージ "指定された Azure BLOB コンテナーの 1 つに対するアクセスが拒否されました" |
3 | ノード ID 参照に指定されていません | 十分なアクセス許可または不十分なアクセス許可 | 同じマネージド ID または別のマネージド ID を使用してプール内に作成される | ResourceContainerAccessDenied エラーが発生したため、タスクが失敗します。エラー メッセージ "指定された Azure BLOB コンテナーの 1 つに対するアクセスが拒否されました" |
4 | ノード ID 参照で指定 | 十分なアクセス許可または不十分なアクセス許可 | 別のマネージド ID を使用してプール内に作成される | ResourceContainerListMiscError エラーが原因でタスクが失敗します。エラー メッセージ "指定された Azure Blob コンテナーの一覧を表示しているときに発生したその他のエラー" |
BLOB 取得タスクが失敗するシナリオでは、Azure portal の Tasks ページに移動し、エラー コードの横に表示されるタスクの名前を選択します。 次に、タスク ページのナビゲーション ウィンドウで、 General 見出しを見つけて、 Properties を選択し、 Json ビューを選択します。 プロパティの JSON 表示には、失敗したタスクに関する対応するエラー メッセージとその他の詳細が表示されます。 たとえば、シナリオ 4 では、 ResourceContainerListMiscError エラーは、"HTTP 400 Bad Request" エラーが原因で失敗します。 これは、ノード ID 参照で定義されているマネージド ID が、プール ID 構成で定義されているマネージド ID と一致しないためです。
マネージド ID が Azure リソースにアクセスできることを確認する
Azure Batch ノードに割り当てられているマネージド ID に Azure リソース (ストレージ アカウントなど) にアクセスするための十分なアクセス許可があることを Windows で確認するには、次の手順に従います。
Note
この手順では、ストレージ アカウントにアクセスして十分なアクセス許可を確認するために有効な ID ID を持つトークンを取得するために必要な最後の手順をエミュレートします。 ID がノード ID 参照で定義されていない場合、ノードは ID を取得できません。 その場合、最後の手順を実行する前に、プロセス全体が既にブロックされています。 この手順を実行する前に、ノード ID 参照で ID が定義されていることを確認します。
リモート デスクトップ プロトコル (RDP) を使用してノードに接続します。
Postman で、
Metadata: true
ヘッダーを含む GET 要求を次の 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 インスタンス メタデータ サービス (IMDS) とも呼ばれます。 IMDS は、VM インスタンスに関する情報を提供します。 この VM インスタンス情報がある場合は、VM を使用してマネージド ID のトークンを要求できます。URL の
mi_res_id
パラメーター値は太字で表示されます。 これは、プール ID で定義したユーザー割り当てマネージド ID のリソース ID です。 そのリソース ID をクライアント ID とプリンシパル ID と共に検索するには、次の手順に従います。Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、バッチ アカウントの名前を選択します。
バッチ アカウントのナビゲーション ウィンドウで、 Features 見出しを見つけて、 Pools を選択します。
バッチ プールの一覧で、バッチ プールの名前を選択します。
バッチ プールのナビゲーション ウィンドウで、 General 見出しを見つけて、 Properties を選択します。
プールのプロパティ ページで、 Json ビューを選択します。
JSON テキストで、
identity
/userAssignedIdentities
リストを見つけます。 使用しているユーザー割り当てマネージド ID の場合は、次のプロパティの値をコピーします。resourceId
clientId
(GUID)principalId
(GUID)
Postman で URL を送信すると、JSON 応答の Body には、
access_token
(長いテキスト文字列、ベアラー トークンとも呼ばれます) とclient_id
(GUID) のエントリが含まれます。client_id
応答値は、バッチ プールのプロパティ ページからコピーしたclientId
値と一致する必要があります。完全なベアラー トークンをコピーし、自動ストレージ アカウントから BLOB を取得して Postman でテストします。 この例では、マネージド ID にストレージにアクセスするためのアクセス許可がありません。 そのため、自動ストレージ アカウントは HTTP 403 エラー (AuthorizationPermissionMismatch エラー、"この要求は、このアクセス許可を使用してこの操作を実行する権限がありません" というメッセージ) を返すことによって応答します。
Note
blob を取得するには、 x-ms-version ヘッダーが必要です。 詳細については、「 Azure Storage Get Blob API」を参照してください。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
サードパーティのお問い合わせ窓口に関する免責事項
サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。