Azure Policy 適用除外の構造

Azure Policy 適用除外機能は、イニシアティブや定義の評価からリソースの階層または個々のリソースを "除外" する目的で使用します。 "除外" されたリソースは、全体的なコンプライアンスには考慮されますが、評価の対象にはできず、また一時的な特別承認の対象にすることもできません。 詳細については、「Azure Policy での適用性について」を参照してください。 Azure Policy の除外は、Microsoft.Kubernetes.Data、Microsoft.KeyVault.Data、Microsoft.Network.Data の Resource Manager モードでも機能します。

JavaScript Object Notation (JSON) を使用してポリシー適用除外を作成します。 ポリシー適用除外には、以下のものに対する要素が含まれています。

ポリシー適用除外は、その対象となる個々のリソースまたはリソース階層上の子オブジェクトとして作成されます。 リソース プロバイダー モードのコンポーネント レベルでは、適用除外を作成できません。 除外が適用される親リソースが削除されると、除外も削除されます。

たとえば、次の JSON は、resourceShouldBeCompliantInit という名前のイニシアティブ割り当てに対するリソースの特別承認カテゴリのポリシー適用除外を示しています。 リソースは、イニシアティブ内の 2 つのポリシー定義からのみ 適用除外 されます。customOrgPolicy カスタム ポリシー定義 (policyDefinitionReferenceId: requiredTags) と Allowed locations 組み込みポリシー定義 (policyDefinitionReferenceId: allowedLocations) です。

{
    "id": "/subscriptions/{subId}/resourceGroups/ExemptRG/providers/Microsoft.Authorization/policyExemptions/resourceIsNotApplicable",
    "apiVersion": "2020-07-01-preview",
    "name": "resourceIsNotApplicable",
    "type": "Microsoft.Authorization/policyExemptions",
    "properties": {
        "displayName": "This resource is scheduled for deletion",
        "description": "This resources is planned to be deleted by end of quarter and has been granted a waiver to the policy.",
        "metadata": {
            "requestedBy": "Storage team",
            "approvedBy": "IA",
            "approvedOn": "2020-07-26T08:02:32.0000000Z",
            "ticketRef": "4baf214c-8d54-4646-be3f-eb6ec7b9bc4f"
        },
        "policyAssignmentId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyAssignments/resourceShouldBeCompliantInit",
        "policyDefinitionReferenceIds": [
            "requiredTags",
            "allowedLocations"
        ],
        "exemptionCategory": "waiver",
        "expiresOn": "2020-12-31T23:59:00.0000000Z",
        "assignmentScopeValidation": "Default"
    }
}

表示名と説明

displayNamedescription は、ポリシー適用除外を識別し、特定のリソースで使用するためのコンテキストを提供するために使用します。 displayName の最大長は 128 文字で、description の最大長は 512 文字です。

Metadata

関連した情報を格納するために必要な子プロパティは、メタデータ プロパティを使用して作成できます。 この例の requestedByapprovedByapprovedOnticketRef の各プロパティには、適用除外の要求者、承認者、承認日、要求の内部的な追跡チケットに関する情報を提供するユーザー値が格納されています。 これらのメタデータ プロパティを例に挙げましたが、必須ではなく、またメタデータはこれらの子プロパティに限定されません。

ポリシーの割り当て ID

このフィールドは、ポリシーの割り当てまたはイニシアティブの割り当ての完全なパス名にする必要があります。 policyAssignmentId は文字列であり、配列ではありません。 このプロパティは、親リソース階層または個々のリソースがどの割り当てから "適用除外" されるのかを定義します。

ポリシー定義 ID

policyAssignmentId がイニシアティブの割り当て用である場合、サブジェクト リソースが適用除外の対象とするイニシアティブ内のポリシー定義は、policyDefinitionReferenceIds プロパティを使用して指定できます。 このリソースは、含まれる 1 つまたは複数のポリシー定義から適用除外される可能性があるため、このプロパティは "配列" です。 値は、policyDefinitions.policyDefinitionReferenceId フィールドのイニシアティブ定義内の値と一致する必要があります。

適用除外カテゴリ

次の 2 つの適用除外カテゴリがあり、適用除外をグループ化するために使用されます。

  • 軽減済み: ポリシーの目的が別の方法で満たされているため、除外対象が許可されます。
  • 免除: リソースの非コンプライアンスの状態が一時的に受け入れられるため、除外対象が許可されます。 このカテゴリを使用するもう 1 つの理由は、リソースまたはリソース階層をイニシアティブ内の 1 つ以上の定義から除外する必要はあるが、イニシアティブ全体から除外してはならない場合です。

有効期限

リソース階層または個々のリソースが割り当てから "除外" されなくなる期限を設定するには、expiresOn プロパティを設定します。 このオプション プロパティは、ユニバーサル ISO 8601 日時形式 yyyy-MM-ddTHH:mm:ss.fffffffZ であることが必要です。

Note

expiresOn の日付になってもポリシー適用除外は削除されません。 記録保持のためにオブジェクトは維持されますが、適用除外は無効となります。

リソース セレクター

除外は省略可能なプロパティ resourceSelectors をサポートします。 このプロパティは、割り当てと同様に除外でも機能します。そのため、リソースの種類、リソースの場所、またはリソースに場所があるかどうかに基づいて、制御された方法で、特定のリソースのサブセットに "除外" を段階的にロールアウトまたはロールバックすることができます。 リソース セレクターの使用方法の詳細については、割り当ての構造に関する記事を参照してください。 リソース セレクターを利用した適用除外 JSON の例を示します。 この例では、westcentralus のリソースのみがポリシーの割り当てから除外されます。

{
    "properties": {
        "policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "resourceSelectors": [
            {
                "name": "TemporaryMitigation",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "westcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/resourceGroups/demoCluster/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

この例では、resourceLocation の一覧にリージョンを追加することや、削除することができます。 リソース セレクターを使うと、除外を作成および管理する場所と方法をより柔軟に変更できます。

割り当てスコープの検証 (プレビュー)

ほとんどのシナリオでは、除外スコープがポリシーの割り当てスコープに収まることを確認するために検証されます。 省略可能な assignmentScopeValidation プロパティを使うと、この検証をバイパスし、割り当てスコープを外れた除外を作成できます。 これは、サブスクリプションをある管理グループ (MG) から別の管理グループに移動する必要があり、サブスクリプション内のリソースのプロパティが原因で、ポリシーによって移動がブロックされるような状況を対象としています。 このシナリオでは、リソースを宛先 MG でのポリシーの割り当てから除外するために、現在の MG のサブスクリプションに対して除外を作成できます。 そうすれば、サブスクリプションが宛先 MG に移動されたときに、リソースは既に問題のポリシーの割り当てから除外されているため、操作はブロックされません。 このプロパティの使用方法を次に示します。

{
    "properties": {
        "policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgB}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "assignmentScopeValidation": "DoNotValidate",
    },
    "systemData": { ... },
    "id": "/subscriptions/{subIdA}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

assignmentScopeValidation に使用できる値は DefaultDoNotValidate です。 指定しない場合、既定の検証プロセスが実行されます。

必要なアクセス許可

ポリシー適用除外オブジェクトを管理するために必要な Azure RBAC のアクセス許可は、Microsoft.Authorization/policyExemptions 操作グループに存在します。 組み込みロールであるリソース ポリシーの共同作成者セキュリティ管理者は、どちらも read アクセス許可と write アクセス許可を持ち、Policy Insights データ ライター (プレビュー)read アクセス許可を持ちます。

適用除外には、それを許可することの影響から、特別なセキュリティ対策が講じられています。 リソース階層または個々のリソースに対して Microsoft.Authorization/policyExemptions/write 操作を要求するだけでなく、適用除外の作成者は、ターゲットの割り当てに対する exempt/Action 動詞を持つ必要があります。

適用除外の作成と管理

リソースまたはリソース階層を引き続き追跡する必要があり、それ以外の場合は評価する必要がある、期限付きのシナリオまたは具体的なシナリオでは、免除が推奨されますが、コンプライアンスを評価すべきでない特定の理由があります。 たとえば、環境に組み込みの定義 Storage accounts should disable public network access (ID: b2982f36-99f2-4db5-8eff-283140c09693) が割り当てられており、effectauditに設定されている場合です。 コンプライアンス評価では、リソース "StorageAcc1" は非準拠ですが、StorageAcc1 はビジネス目的でパブリック ネットワーク アクセスを有効にする必要があります。 その時点で、StorageAcc1 を対象とする適用除外リソースを作成するための要求を送信する必要があります。 適用除外が作成されると、StorageAcc1 はコンプライアンス レビューに exempt として表示されます。

すべての対象アイテムが適切に除外されるように、定期的に適用除外を再検討し、適用除外の対象ではなくなった場合は速やかに削除してください。 その時点で、期限切れの適用除外リソースも削除される可能性があります。

次のステップ