[プレビュー] Azure Policy を使用してマネージド ID を割り当てる

Azure Policy は、組織の標準を適用してコンプライアンスを大規模に評価するのに役立ちます。 Azure Policy では、コンプライアンス ダッシュボードを通して集計ビューが提供され、管理者は環境の全体的な状態を評価できるようになります。 リソースごと、ポリシーごとの細分性にドリルダウンできます。 既存のリソースの一括修復と新しいリソースの自動修復を使用して、お客様のリソースでコンプライアンスを実現するのにも役立ちます。 Azure Policy の一般的なユース ケースには、以下のようなガバナンスの実装が含まれます。

  • リソースの整合性
  • 規制に対するコンプライアンス
  • セキュリティ
  • コスト
  • 管理

これらの一般的なユース ケース用のポリシー定義は、使用を開始できるように Azure 環境に既に用意されています。

Azure 監視エージェントには、監視対象の Azure Virtual Machines (VM) でマネージド ID が必要です。 このドキュメントでは、これらのシナリオに必要なマネージド ID を VM に大規模に割り当てるのに役立つ、Microsoft によって提供される組み込み Azure Policy の動作について説明します。

システム割り当てマネージド ID を使用することは可能ですが、大規模に使用すると (たとえば、サブスクリプション内のすべての VM に対して)、Microsoft Entra ID で作成 (および削除) される ID の数が大幅に増えます。 このような ID の変更を回避するために、ユーザー割り当てマネージド ID の使用をお勧めします。これは、1 回作成して複数の VM 間で共有できます。

注意

Azure リージョンごと、Azure サブスクリプションごとに、ユーザー割り当てマネージド ID を使用することをお勧めします。

このポリシーは、この推奨事項を実装するように設計されています。

ポリシーの定義と詳細

実行されると、ポリシーは次のアクションを実行します。

  1. ユーザー割り当てマネージド ID が存在しない場合は、ポリシーのスコープ内にある VM に基づいて、サブスクリプションと各 Azure リージョンに新しい組み込みのユーザー割り当てマネージド ID を作成します。
  2. 作成したら、誤って削除されないように、ユーザー割り当てマネージド ID をロックします。
  3. ポリシーのスコープ内にある VM に基づいて、サブスクリプションとリージョンから、組み込みのユーザー割り当てマネージド ID を Virtual Machines に割り当てます。

注意

仮想マシンに 1 つのユーザー割り当てマネージド ID が既に割り当てられている場合、ポリシーはこの VM をスキップして組み込み ID を割り当てます。 ポリシーの割り当てが、IMDS 上のトークン エンドポイントの既定の動作に依存するアプリケーションを中断しないようにするためです。

このポリシーを使用するシナリオは次の 2 つです。

  • ポリシーで "組み込み" のユーザー割り当てマネージド ID を作成して使用できるようにする。
  • 独自のユーザー割り当てマネージド ID を使用する。

ポリシーは、次の入力パラメーターを受け取ります。

  • Bring-Your-Own-UAMI? - ユーザー割り当てマネージド ID が存在しない場合、新しいユーザー割り当てマネージド ID をポリシーで作成する必要があるか。
  • true に設定する場合は、以下を指定する必要があります。
    • マネージド ID の名前
    • マネージド ID を作成するリソース グループ。
  • false に設定した場合、追加の入力は必要ありません。
    • このポリシーでは、“built-in-identity-rg" というリソース グループに、“built-in-identity” と呼ばれる必要なユーザー割り当てマネージド ID が作成されます。

ポリシーの使用

ポリシー割り当ての作成

ポリシー定義は、管理グループ サブスクリプションまたは特定のリソース グループで、Azure のさまざまなスコープに割り当てることができます。 ポリシーは常に適用されている必要があるため、割り当て操作は、ポリシー割り当てオブジェクトに関連付けられているマネージド ID を使用して実行されます。 ポリシー割り当てオブジェクトは、システム割り当てマネージド ID とユーザー割り当てマネージド ID の両方をサポートします。 たとえば、Joe は PolicyAssignmentMI というユーザー割り当てマネージド ID を作成できます。 組み込みポリシーは、各サブスクリプションと、ポリシー割り当てのスコープ内にあるリソースを含む各リージョンに、ユーザー割り当てマネージド ID を作成します。 ポリシーによって作成されるユーザー割り当てマネージド ID の resourceId 形式は次のとおりです。

/subscriptions/your-subscription-id/resourceGroups/built-in-identity-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/built-in-identity-{location}

次に例を示します。

/subscriptions/aaaabbbb-aaaa-bbbb-1111-111122223333/resourceGroups/built-in-identity-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/built-in-identity-eastus

必要な承認

PolicyAssignmentMI マネージド ID が、指定されたスコープ全体に組み込みポリシーを割り当てることができるようにするには、Azure RBAC (Azure ロールベースのアクセス制御) ロールの割り当てとして表される次のアクセス許可が必要です。

プリンシパル ロール/アクション スコープ 目的
PolicyAssigmentMI Managed Identity Operator /subscription/subscription-id/resourceGroups/built-in-identity
または
Bring-your-own-User-assinged-Managed identity
組み込み ID を VM に割り当てるために必要です。
PolicyAssigmentMI 共同作成者 /subscription/subscription-id> サブスクリプションに組み込みのマネージド ID を保持するリソース グループを作成するために必要です。
PolicyAssigmentMI Managed Identity Contributor /subscription/subscription-id/resourceGroups/built-in-identity ユーザー割り当てマネージド ID を新規作成するために必要です。
PolicyAssigmentMI User Access Administrator /subscription/subscription-id/resourceGroups/built-in-identity
または
Bring-your-own-User-assigned-Managed identity
ポリシーによって作成されたユーザー割り当てマネージド ID にロックを設定するために必要です。

ポリシー割り当てオブジェクトには、事前にこのアクセス許可が必要なため、PolicyAssignmentMI は、このシナリオではシステム割り当てマネージド ID にすることはできません。 ポリシー割り当てタスクを実行するユーザーは、上記のロールの割り当てを使用して、PolicyAssignmentMI を事前に承認する必要があります。

結果として必要な最小特権ロールは、サブスクリプション スコープの "共同作成者" であることがわかります。

既知の問題

VM に割り当てられた ID を変更する別のデプロイで競合状態が発生すると、予期しない結果が発生する可能性があります。

同じ仮想マシンを更新する並列デプロイが 2 つ以上あり、そのすべてが仮想マシンの ID 構成を変更する場合、特定の競合状態では、すべての期待される ID がマシンに割り当てられない可能性があります。 たとえば、このドキュメントのポリシーで VM のマネージド ID を更新すると同時に、別のプロセスもマネージド ID セクションに変更を加える場合、想定されるすべての ID が VM に適切に割り当てられるとは限りません。

次のステップ