Azure Policy 適用除外の構造

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

表示名と説明

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

Metadata

metadata プロパティによって、関連情報を保存するために必要な子プロパティを作成できます。 この例において、requestedByapprovedByapprovedOnticketRef の各プロパティには、誰が適用除外を要求したか、誰がいつそれを承認したか、そして要求の内部トラッキング チケットに関する情報を提供するための顧客値が含まれています。 これらの 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 に使用できる値は DefaultDoNotValidate です。 指定がない場合は、既定の検証プロセスが発生します。

必要なアクセス許可

ポリシー適用除外オブジェクトを管理するために必要な 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) が割り当てられており、effectauditに設定されている場合です。 コンプライアンス評価では、リソース StorageAcc1 は非準拠ですが、StorageAcc1 ではビジネス目的でパブリック ネットワーク アクセスを有効にする必要があります。 その時点で、StorageAcc1 をターゲットとする適用除外リソースを作成するための要求を送信する必要があります。 この適用除外が作成されると、StorageAcc1 はコンプライアンス レビューで "適用除外" として表示されます。

すべての対象アイテムが適切に除外されるように、定期的に適用除外を再確認し、適用除外の対象ではなくなったものは速やかに削除します。 その時点で、期限切れの適用除外リソースも削除して構いません。

次のステップ