Azure Policy を使って準拠していないリソースを修復する

deployIfNotExistsmodify の効果を含むポリシーに準拠していないリソースは、修復を使って準拠状態にすることができます。 修復は、既存のリソースおよびサブスクリプションに、deployIfNotExists テンプレートや割り当てられているポリシーの modify 操作をデプロイする修復タスクを通して実行されます。その割り当てが、管理グループ、サブスクリプション、リソース グループ、または個々のリソースのいずれに対するものかは関係ありません。 この記事では、Azure Policy による修復を理解して実行するために必要な手順を示します。

修復のアクセス制御の仕組み

deployIfNotExists ポリシーの評価時に Azure Policy によりテンプレートのデプロイが開始される場合、またはmodify ポリシーの評価時にリソースが変更される場合には、これらの操作にはポリシーの割り当てに関連付けられているマネージド ID が使用されます。 ポリシーの割り当てでは、Azure リソースの承認にマネージド ID が使用されます。 ポリシー サービスによって作成されるシステム割り当てマネージド ID、またはユーザーによって指定されるユーザー割り当て ID のいずれかを使用できます。 マネージド ID には、リソースを修復するために必要な最小のロールベースのアクセス制御 (RBAC) ロールを割り当てる必要があります。 マネージド ID にロールが存在しない場合、そのポリシーまたはイニシアチブの割り当て中に、ポータルにエラーが表示されます。 ポータルを使用している場合、割り当てが開始されると、Azure Policy によって、示されているロールが自動的にマネージド ID に付与されます。 Azure ソフトウェア開発キット (SDK) を使用している場合、ロールは手動でマネージド ID に付与する必要があります。 マネージド ID の "場所" は、Azure Policy による操作に影響を与えません。

Note

また、ポリシー定義を変更しても、割り当てや関連付けられているマネージド ID は自動的に更新されません。

修復セキュリティは、次の手順で構成できます。

ポリシー定義を設定する

前提条件として、含まれているテンプレートのコンテンツを deployIfNotExistsmodify で正しくデプロイするために必要なロールをポリシー定義で定義する必要があります。 組み込みのポリシー定義にはこれらのロールが事前に設定されているため、アクションは必要ありません。 カスタムポリシー定義では、details プロパティで roleDefinitionIds プロパティを追加します。 このプロパティは、環境にあるロールに合致する一連の文字列です。 deployIfNotExists の例または modify の例に示す例を参照してください。

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

roleDefinitionIds プロパティは完全なリソース識別子を使用し、ロールの短い roleName は使用しません。 環境内の「共同作成者」ロールの ID を取得するには、次の Azure CLI コードを使用します。

az role definition list --name "Contributor"

重要

ポリシー定義内に roleDefinitionIds を定義したり、マネージド ID に手動でアクセス許可を割り当てたりするときは、アクセス許可の範囲が可能な限り狭くなるよう制限することをお勧めします。 その他のベスト プラクティスについては、「マネージド ID のベスト プラクティスに関する推奨事項」を参照してください。

マネージド ID を構成する

Azure Policy の各割り当ては、1 つのマネージド ID にのみ関連付けることができます。 ただし、マネージド ID には複数のロールを割り当てることができます。 構成は 2 つの手順で行われます。最初にシステム割り当てまたはユーザー割り当てマネージド ID を作成してから、必要なロールを付与します。

Note

ポータルを使用してマネージド ID を作成すると、ロールがマネージド ID に自動的に付与されます。 ポリシー定義で roleDefinitionIds を後から編集する場合は、ポータルでも新しいアクセス許可を手動で付与する必要があります。

マネージド ID を作成する

ポータルを使用して割り当てを作成している場合、Azure Policy では、システム割り当てマネージド ID を生成して、ポリシー定義の roleDefinitionIds に定義されているロールを付与できます。 または、同じロール割り当てを受け取るユーザー割り当てマネージド ID を指定することもできます。

Screenshot of a policy assignment creating a system-assigned managed identity in East US with Log Analytics Contributor permissions.

ポータルでシステム割り当てマネージド ID を設定するには、次の手順を実行します。

  1. 割り当ての作成または編集のビューにある [修復] タブの [マネージド ID の種類][システム割り当てマネージド ID] が選択されていることを確認します。

  2. マネージド ID が置かれる場所を指定します。

  3. スコープは割り当てスコープから継承されるため、システム割り当てマネージド ID のスコープを割り当てないでください。

ポータルでユーザー割り当てマネージド ID を設定するには、次の手順を実行します。

  1. 割り当ての作成または編集のビューにある [修復] タブの [マネージド ID の種類][ユーザー割り当てマネージド ID] が選択されていることを確認します。

  2. マネージド ID がホストされるスコープを指定します。 マネージド ID のスコープは、割り当てのスコープと同等である必要はありませんが、同じテナント内に存在している必要があります。

  3. [既存のユーザー割り当て ID] でマネージド ID を選択します。

定義されたロールを使用してマネージド ID にアクセス許可を付与する

重要

必要な修復タスクを実行するために必要なアクセス許可がマネージド ID にない場合、ポータルでのみ、それにアクセス許可が自動的に付与されます。 ポータルを使用してマネージド ID を作成する場合は、この手順をスキップできます。

その他のすべての方法では、ロールを追加して割り当てのマネージド ID に手動でアクセス権を付与する必要があります。そうしないと、修復のデプロイは失敗します。

手動アクセス許可を必要とするシナリオの例は次のとおりです。

  • 割り当てが Azure ソフトウェア開発キット (SDK) を使用して作成された場合
  • deployIfNotExists または modify によって変更されたリソースがポリシー割り当ての範囲外である場合
  • テンプレートがポリシー割り当ての範囲外のリソースのプロパティにアクセスする場合

ポータルを使用して、定義したロールを割り当てのマネージド ID に付与するには、アクセス制御 (IAM) を使用する方法と、ポリシーまたはイニシアチブの割り当てを編集して [保存] を選択する方法の 2 つがあります。

割り当ての管理対象 ID にロールを追加するには、次の手順に従います。

  1. Azure portal で [すべてのサービス] を選択し、「Policy」を検索して選択することで、Azure Policy サービスを起動します。

  2. Azure Policy ページの左側にある [割り当て] を選択します。

  3. マネージド ID がある割り当てを見つけて、その名前を選択します。

  4. 編集ページで割り当て ID を見つけます。 割り当て ID は以下のような ID です。

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    管理対象 ID の名前は、割り当てリソース ID の最後の部分です。この例では 2802056bfc094dfb95d4d7a5 です。 割り当てリソース ID のこの部分をコピーします。

  5. ロールの定義で手動で追加する必要があるリソース、またはリソースの親コンテナー (リソース グループ、サブスクリプション、管理グループ) に移動します。

  6. リソース ページにあるアクセス制御 (IAM) のリンクを選択して、アクセス制御ページの上部にある [+ Add role assignment](+ ロール割り当ての追加) を選択します。

  7. ポリシー定義から、 roleDefinitionIds に一致する適切なロールを選択します。 Assign access to は ''Azure AD user, group, or application という既定値の設定のままにします。 [選択] ボックスで、前の手順で見つけた割り当てリソース ID の部分を貼り付けるか、入力します。 検索が完了したら、同じ名前のオブジェクトを選択することで ID を選択し、 [保存] を選択します。

修復タスクを作成する

Azure portal で [すべてのサービス] を選択し、 [Policy] を検索して選択することで、Azure Policy サービスを起動します。

Screenshot of searching for Policy in All Services.

手順 1: 修復タスクの作成を開始する

ポータルを使用して修復タスクを作成するには、3 つの方法があります。

オプション 1: [修復] ページから修復タスクを作成する

  1. Azure Policy ページの左側にある [修復] を選択します。

    Screenshot of the Remediation node on the Policy page.

  2. [修復するポリシー] タブには、deployIfNotExistsmodify ポリシーの割り当てがすべて表示されます。非準拠のリソースがあるものを選択して、[新しい修復タスク] ページを開きます。

  3. 手順に従って、修復タスクの詳細を指定します

オプション 2: 準拠していないポリシー割り当てから修復タスクを作成する

  1. Azure Policy ページの左側にある [コンプライアンス] を選択します。

  2. deployIfNotExists または modify 効果を含む非準拠ポリシーまたはイニシアティブの割り当てを選択します。

  3. ページの上部にある [修復タスクの作成] ボタンを選択して、[新しい修復タスク] ページを開きます。

  4. 手順に従って、修復タスクの詳細を指定します

オプション 3: ポリシー割り当て時に修復タスクを作成する

割り当てるポリシーまたはイニシアティブ定義に deployIfNotExists または modify 効果がある場合、ウィザードの [修復] タブに、ポリシーの割り当てと同時に修復タスクを作成するための [修復タスクの作成] オプションが表示されます。

Note

これは修復タスクを作成するための最も合理化されたアプローチであり、"サブスクリプション" に割り当てられたポリシー用にサポートされています。 "管理グループ" に割り当てられているポリシーの場合、評価でリソースのコンプライアンスが決定された後、オプション 1 またはオプション 2 を使用して修復タスクを作成する必要があります。

  1. ポータルの割り当てウィザードから、[修復] タブに移動します。[修復タスクの作成] のチェック ボックスをオンにします。

  2. 修復タスクをイニシアチブの割り当てから開始した場合は、ドロップダウンから修復するポリシーを選択します。

  3. マネージド ID を構成し、ウィザードの残りの部分に入力します。 修復タスクが割り当ての作成時に作成されます。

手順 2: 修復タスクの詳細を指定する

この手順は、オプション 1 またはオプション 2 を使用して修復タスクの作成を開始する場合にのみ適用されます。

  1. 修復タスクをイニシアチブの割り当てから開始した場合は、ドロップダウンから修復するポリシーを選択します。 1 つの修復タスクで一度に修復できるのは、1 つの deployIfNotExists または modify ポリシーのみです。

  2. 必要に応じて、ページで [修復の設定] を変更します。 各設定の制御について、詳しくは修復タスクの構造をご覧ください。

  3. 同じページで [スコープ] 省略記号ボタンを使って、ポリシーが割り当てられている子リソースを選択することで、修復するリソースをフィルター処理します (個々のリソース オブジェクトまで可能)。 また、 [場所] ドロップダウン リストを使って、リソースをさらにフィルター処理することもできます。

    Screenshot of the Remediate node and the grid of resources to remediate.

  4. リソースのフィルター処理を終えたら、 [修復] を選択して、修復タスクを開始します。 [修復タスク] タブに対するポリシー コンプライアンス ページが開いて、タスクの進行状況が表示されます。 修復タスクによって作成されたデプロイが、すぐに開始されます。

    Screenshot of the Remediation tasks tab and progress of existing remediation tasks.

手順 3: 修復タスクの進行状況を追跡する

  1. [修復] ページの [修復タスク] タブに移動します。 修復タスクをクリックすると、使用されているフィルター処理の詳細、現在の状態、修復されるリソースの一覧が表示されます。

  2. 修復タスクの詳細ページで、リソースを右クリックして、修復タスクのデプロイまたはリソースのいずれかを表示します。 行の末尾にある [関連イベント] を選択して、エラー メッセージなどの詳細を確認します。

    Screenshot of the context menu for a resource on the Remediate task tab.

修復タスクを使ってデプロイされたリソースは、ポリシー割り当ての詳細ページの [デプロイされたリソース] タブに追加されます。

次のステップ