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"
}
}
表示名と説明
displayName と description は、ポリシー適用除外を識別し、特定のリソースで使用するためのコンテキストを提供するために使用します。 displayName の最大長は 128 文字で、description の最大長は 512 文字です。
Metadata
関連した情報を格納するために必要な子プロパティは、メタデータ プロパティを使用して作成できます。 この例の requestedBy、approvedBy、approvedOn、ticketRef の各プロパティには、適用除外の要求者、承認者、承認日、要求の内部的な追跡チケットに関する情報を提供するユーザー値が格納されています。 これらのメタデータ プロパティを例に挙げましたが、必須ではなく、またメタデータはこれらの子プロパティに限定されません。
ポリシーの割り当て 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
に使用できる値は Default
と DoNotValidate
です。 指定しない場合、既定の検証プロセスが実行されます。
必要なアクセス許可
ポリシー適用除外オブジェクトを管理するために必要な 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
) が割り当てられており、effect が auditに設定されている場合です。 コンプライアンス評価では、リソース "StorageAcc1" は非準拠ですが、StorageAcc1 はビジネス目的でパブリック ネットワーク アクセスを有効にする必要があります。 その時点で、StorageAcc1 を対象とする適用除外リソースを作成するための要求を送信する必要があります。 適用除外が作成されると、StorageAcc1 はコンプライアンス レビューに exempt として表示されます。
すべての対象アイテムが適切に除外されるように、定期的に適用除外を再検討し、適用除外の対象ではなくなった場合は速やかに削除してください。 その時点で、期限切れの適用除外リソースも削除される可能性があります。
次のステップ
- 適用除外についての Azure Resource Graph クエリを活用します。
- 除外と適用除外の違いについて学習します。
- Microsoft.Authorization policyExemptions リソース タイプについて学習します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。