Azure Policy 適用除外の構造
Azure Policy 適用除外機能は、イニシアティブや定義の評価からリソースの階層または個々のリソースを "除外" する目的で使用します。 "除外" されたリソースは、全体的なコンプライアンスには考慮されますが、評価の対象にはできず、また一時的な特別承認の対象にすることもできません。 詳細については、「Azure Policy での適用性について」を参照してください。 Azure Policy の適用除外は、次の Resource Manager モードでも機能します: Microsoft.Kubernetes.Data
、Microsoft.KeyVault.Data
、および Microsoft.Network.Data
。
JavaScript Object Notation (JSON) を使用してポリシー適用除外を作成します。 ポリシー適用除外には、以下のものに対する要素が含まれています。
ポリシー適用除外は、その対象となる個々のリソースまたはリソース階層上の子オブジェクトとして作成されます。 適用除外は、リソース プロバイダー モードのコンポーネント レベルでは作成できません。 除外が適用される親リソースが削除されると、除外も削除されます。
たとえば、次の JSON は、resourceShouldBeCompliantInit
という名前のイニシアティブ割り当てに対するリソースの特別承認カテゴリのポリシー適用除外を示しています。 リソースは、イニシアティブ内の 2 つのポリシー定義からのみ 適用除外 されます。customOrgPolicy
カスタム ポリシー定義 (policyDefinitionReferenceId
: requiredTags
) と Allowed locations 組み込みポリシー定義 (policyDefinitionReferenceId
: allowedLocations
) です。
{
"id": "/subscriptions/{subId}/resourceGroups/{rgName}/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",
"policyDefinitionReferenceId": [
"requiredTags",
"allowedLocations"
],
"exemptionCategory": "waiver",
"expiresOn": "2020-12-31T23:59:00.0000000Z",
"assignmentScopeValidation": "Default"
}
}
表示名と説明
displayName
と description
は、ポリシー適用除外を識別し、特定のリソースでの使用のためのコンテキストを提供するために使用します。 displayName
の最大長は 128 文字で、description
の最大長は 512 文字です。
Metadata
metadata
プロパティによって、関連情報を保存するために必要な子プロパティを作成できます。 この例において、requestedBy
、approvedBy
、approvedOn
、ticketRef
の各プロパティには、誰が適用除外を要求したか、誰がいつそれを承認したか、そして要求の内部トラッキング チケットに関する情報を提供するための顧客値が含まれています。 これらの metadata
プロパティは例であり、必須ではなく、metadata
プロパティはこれらの子プロパティには限定されません。
ポリシーの割り当て ID
このフィールドは、ポリシーの割り当てまたはイニシアティブの割り当ての完全なパス名にする必要があります。 policyAssignmentId
は文字列であり、配列ではありません。 このプロパティは、親リソース階層または個々のリソースがどの割り当てから "適用除外" されるのかを定義します。
ポリシー定義 ID
policyAssignmentId
がイニシアティブの割り当て用である場合、policyDefinitionReferenceId
プロパティを使用することでサブジェクト リソースがイニシアティブ内のどのポリシー定義に対して適用除外を持っているかを指定できます。 リソースは、含まれる 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",
"policyDefinitionReferenceId": [
"limitSku",
"limitType"
],
"exemptionCategory": "Waiver",
"resourceSelectors": [
{
"name": "TemporaryMitigation",
"selectors": [
{
"kind": "resourceLocation",
"in": [
"westcentralus"
]
}
]
}
]
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
"type": "Microsoft.Authorization/policyExemptions",
"name": "DemoExpensiveVM"
}
この例では、resourceLocation
の一覧にリージョンを追加することや、削除することができます。 リソース セレクターを使うと、除外を作成および管理する場所と方法をより柔軟に変更できます。
割り当てスコープの検証 (プレビュー)
ほとんどのシナリオでは、適用除外スコープは検証されて、ポリシー割り当てスコープに収まることが確認されます。 省略可能な assignmentScopeValidation
プロパティを使うと、この検証をバイパスし、割り当てスコープを外れた除外を作成できます。 この検証は、サブスクリプションをある管理グループ (MG) から別の管理グループに移動する必要があり、サブスクリプション内のリソースのプロパティが原因で、ポリシーによって移動がブロックされるような状況を対象としています。 このシナリオでは、リソースを宛先 MG でのポリシーの割り当てから除外するために、現在の MG のサブスクリプションに対して除外を作成できます。 そうすることで、サブスクリプションが宛先 MG に移動されたときに、リソースは既に問題のポリシー割り当てから除外されているため、操作はブロックされません。 このプロパティの使用例を以下に示します。
{
"properties": {
"policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgName}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
"policyDefinitionReferenceId": [
"limitSku",
"limitType"
],
"exemptionCategory": "Waiver",
"assignmentScopeValidation": "DoNotValidate",
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
"type": "Microsoft.Authorization/policyExemptions",
"name": "DemoExpensiveVM"
}
assignmentScopeValidation
に使用できる値は Default
と DoNotValidate
です。 指定がない場合は、既定の検証プロセスが発生します。
必要なアクセス許可
ポリシー適用除外オブジェクトを管理するために必要な Azure ロールベースのアクセス制御 (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
はコンプライアンス レビューで "適用除外" として表示されます。
すべての対象アイテムが適切に除外されるように、定期的に適用除外を再確認し、適用除外の対象ではなくなったものは速やかに削除します。 その時点で、期限切れの適用除外リソースも削除して構いません。
次のステップ
- 適用除外についての Azure Resource Graph クエリについて学習する。
- 除外と適用除外の違いについて学習します。
- Microsoft.Authorization policyExemptions リソース タイプについて確認する。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。