次の方法で共有


Azure Policy の割り当ての構造

ポリシー割り当ては、ポリシー定義またはイニシアティブによってどのリソースが評価されるかを定義します。 さらに、ポリシー割り当てでは、割り当て時にそのリソース グループのパラメーターの値を決定でき、ポリシー定義を再利用して、コンプライアンスのためにニーズが異なる同じリソースのプロパティに対応できます。

JavaScript Object Notation (JSON) を使用してポリシー割り当てを作成します。 ポリシーの割り当てには、次に対する要素が含まれています。

たとえば、次の JSON は、パラメーターを含む DoNotEnforce モードでのサンプル ポリシー割り当て要求を示しています。

{
  "properties": {
    "displayName": "Enforce resource naming rules",
    "description": "Force resource names to begin with DeptA and end with -LC",
    "definitionVersion": "1.*.*",
    "metadata": {
      "assignedBy": "Cloud Center of Excellence"
    },
    "enforcementMode": "DoNotEnforce",
    "notScopes": [],
    "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
    "nonComplianceMessages": [
      {
        "message": "Resource names must start with 'DeptA' and end with '-LC'."
      }
    ],
    "parameters": {
      "prefix": {
        "value": "DeptA"
      },
      "suffix": {
        "value": "-LC"
      }
    },
    "identity": {
      "type": "SystemAssigned"
    },
    "resourceSelectors": [],
    "overrides": []
  }
}

範囲

割り当てリソースの作成時に使用されるスコープは、リソースの適用性についての主な要因です。 割り当て範囲の詳細については、「Azure Policy でのスコープについて」を参照してください。

ポリシー定義 ID とバージョン (プレビュー)

このフィールドでは、ポリシー定義またはイニシアティブ定義の完全なパス名を指定する必要があります。 policyDefinitionId は文字列であり、配列ではありません。 ポリシーの割り当てが評価されるたびに、割り当てられたポリシー定義またはイニシアティブの最新の内容が取得されます。 複数のポリシーを一緒に割り当てることが多い場合は、代わりにイニシアティブを使用することをお勧めします。

組み込みの定義とイニシアティブについては、評価対象となる特定の definitionVersion を使用できます。 既定では、バージョンは最新のメジャー バージョンに設定され、マイナーとパッチの変更が自動的に取り込まれます。

  • 定義の軽微な変更を自動的に取り込む場合、バージョン番号は #.*.* になります。 ワイルドカードは更新の自動取り込みを表します。
  • マイナー バージョン パスにピン留めするには、バージョン形式は #.#.* になります。
  • セキュリティ上の理由から、すべてのパッチ変更は自動取り込みされる必要があります。 パッチの変更は、テキストの変更と緊急事態のシナリオに限定されます。

表示名と説明

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

Metadata

省略可能な metadata プロパティには、ポリシー割り当てに関する情報が格納されています。 お客様は metadata で組織にとって有用なすべてのプロパティと値を定義できます。 ただし、Azure Policy で使用される "一般的" なプロパティがいくつかあります。 各 metadata プロパティには 1,024 文字の制限があります。

一般的なメタデータのプロパティ

  • assignedBy (文字列): 割り当てを作成したセキュリティ プリンシパルのフレンドリ名。
  • createdBy (文字列): 割り当てを作成したセキュリティ プリンシパルの GUID。
  • createdOn (文字列): ユニバーサル ISO 8601 日時形式の割り当て作成時刻。
  • updatedBy (文字列): 割り当てを更新したセキュリティ プリンシパルのフレンドリ名 (存在する場合)。
  • updatedOn (文字列): ユニバーサル ISO 8601 日時形式の割り当て更新時刻 (存在する場合)。

シナリオ固有のメタデータ プロパティ

  • parameterScopes (オブジェクト): キーと値のペアのコレクション。ここで、キーは strongType 構成済みパラメーター名と一致し、値は、strongTypeを照合して使用可能なリソースの一覧を提供するためにポータルで使用されるリソース スコープを定義します。 スコープが割り当てスコープと異なる場合、ポータルによりこの値が設定されます。 設定されると、ポータルでのポリシー割り当ての編集により、パラメーターのスコープがこの値に自動的に設定されます。 ただし、スコープはその値にロックされず、別のスコープに変更できます。

    次の parameterScopes の例は、backupPolicyId という名前の strongType パラメーターに関するものです。これは、ポータルで割り当てが編集されたときにリソース選択のスコープを設定します。

    "metadata": {
        "parameterScopes": {
          "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • evidenceStorages (オブジェクト): manual 効果で、ポリシーの割り当てに対する構成証明の証拠を保持するために使用する必要がある、推奨される既定のストレージ アカウント。 displayName プロパティは、ストレージ アカウントの名前です。 evidenceStorageAccountID プロパティはストレージ アカウントのリソース ID です。 evidenceBlobContainer プロパティは、証拠を格納する予定の BLOB コンテナー名です。

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

リソース セレクター

省略可能な resourceSelectors プロパティは、リソースの場所、リソースの種類、リソースに場所があるかどうかなどの要因に基づいてポリシーの割り当てを段階的にロールアウトできるようにすることで、安全なデプロイ プラクティス (SDP) を容易にします。 リソース セレクターを使用する場合、Azure Policy はリソース セレクターで作成された仕様に適用可能なリソースのみを評価します。 リソース セレクターを使用して、同じ方法で除外の範囲を絞り込むこともできます。

次のシナリオ例では、リソースの場所が米国東部または米国西部の場合にのみ、新しいポリシー割り当てが評価されます。

{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
    "definitionVersion": "1.1.*",
    "resourceSelectors": [
      {
        "name": "SDPRegions",
        "selectors": [
          {
            "kind": "resourceLocation",
            "in": [
              "eastus",
              "westus"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "ResourceLimit"
}

ポリシーの評価スコープを拡張する準備ができたら、割り当てを更新するだけです。 次の例は、SDPRegions セレクターにさらに 2 つの Azure リージョンを追加したポリシーの割り当てを示しています。 注: この例では、SDP安全なデプロイ プラクティスを意味します。

{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
    "definitionVersion": "1.1.*",
    "resourceSelectors": [
      {
        "name": "SDPRegions",
        "selectors": [
          {
            "kind": "resourceLocation",
            "in": [
              "eastus",
              "westus",
              "centralus",
              "southcentralus"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "ResourceLimit"
}

リソース セレクターには、次のプロパティがあります。

  • name: リソース セレクターの名前。

  • selectors: (省略可能) ポリシーの割り当てに適用できるリソースのサブセットを決定するために使われるプロパティは、コンプライアンスのために評価する必要があります。

    • kind: 評価されたリソースのセットをどの特性で絞り込むかを記述するセレクターのプロパティ。 個々の種類は、1 つのリソース セレクターで 1 回だけ使用できます。 使用できる値は、以下のとおりです。

      • resourceLocation: このプロパティは、型に基づいてリソースを選択するために使用されます。 resourceWithoutLocation と同じリソース セレクターで使用することはできません。

      • resourceType: このプロパティは、型に基づいてリソースを選択するために使用されます。

      • resourceWithoutLocation: このプロパティは、場所のないサブスクリプション レベルのリソースを選択するために使用されます。 現在サポートされているのは、subscriptionLevelResources だけです。 resourceLocation と同じリソース セレクターで使用することはできません。

    • in: 指定した kind に対して許可される値の一覧です。 notIn とは使用できません。 最大 50 個の値を含めることができます。

    • notIn: 指定した kind に対して許可されない値の一覧です。 in とは使用できません。 最大 50 個の値を含めることができます。

リソース セレクターには、複数の selectors を含めることができます。 リソース セレクターに適用するには、リソースがそのすべてのセレクターで指定されている要件を満たしている必要があります。 また、1 つの割り当てで最大 10 個の resourceSelectors を指定できます。 スコープ内リソースは、これらのリソース セレクターのいずれかを満たすと評価されます。

上書き

オプションの overrides プロパティを使用すると、基となるポリシー定義を変更したり、ポリシー定義でパラメーター化された効果を使用したりせずに、ポリシー定義の効果を変更できます。

効果のオーバーライドの一般的なユース ケースは、多数の関連付けられたポリシー定義を持つポリシー イニシアティブです。 このような状況では、複数のポリシー効果を管理すると、特に効果を随時更新する必要がある場合に、大きな管理労力を消費する可能性があります。 オーバーライドを使用すると、イニシアチブ内の複数のポリシー定義の効果を同時に更新できます。

例を見てみましょう。 policyDefinitionReferenceId corpVMSizePolicy と 1 つの audit 効果を持つカスタム ポリシー定義を含む CostManagement という名前のポリシー イニシアチブがあるとします。 CostManagement イニシアチブを割り当てるが、このポリシーに対して報告されたコンプライアンスをまだ確認したくないとします。 このポリシーの audit 効果は、次のサンプルに示すように、イニシアチブの割り当てのオーバーライドを通じて disabled に置き換えることができます。

{
  "properties": {
    "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
    "overrides": [
      {
        "kind": "policyEffect",
        "value": "disabled",
        "selectors": [
          {
            "kind": "policyDefinitionReferenceId",
            "in": [
              "corpVMSizePolicy"
            ]
          }
        ]
      }
    ]
  },
  "systemData": { ...
  },
  "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
  "type": "Microsoft.Authorization/policyAssignments",
  "name": "CostManagement"
}

オーバーライドのもう 1 つの一般的なユース ケースは、定義の新しいバージョンをロールアウトすることです。 割り当てのバージョンを安全に更新するための推奨手順については、ポリシーの安全なデプロイに関するページを参照してください。

オーバーライドには次のプロパティがあります。

  • kind: 割り当てによってオーバーライドされるプロパティ。 サポートされている種類は policyEffectpolicyVersion です。

  • value: 既存の値をオーバーライドする新しい値。 kind: policyEffect の場合、サポートされている値は効果です。 kind: policyVersion の場合、サポートされるバージョン番号は、割り当てで指定された definitionVersion 以上である必要があります。

  • selectors: (省略可能) ポリシー割り当てのどのスコープがオーバーライドするかを決定するために使われるプロパティ。

    • kind: オーバーライドのスコープをどの特性で絞り込むかを記述するセレクターのプロパティ。 kind: policyEffect に使用できる値:

      • policyDefinitionReferenceId: このプロパティはイニシアティブの割り当て内のどのポリシー定義で効果をオーバーライドする必要があるかを指定します。

      • resourceLocation: このプロパティは、型に基づいてリソースを選択するために使用されます。 resourceWithoutLocation と同じリソース セレクターで使用することはできません。

      kind: policyVersion に使用できる値:

      • resourceLocation: このプロパティは、型に基づいてリソースを選択するために使用されます。 resourceWithoutLocation と同じリソース セレクターで使用することはできません。
    • in: 指定した kind に対して許可される値の一覧です。 notIn とは使用できません。 最大 50 個の値を含めることができます。

    • notIn: 指定した kind に対して許可されない値の一覧です。 in とは使用できません。 最大 50 個の値を含めることができます。

policyDefinitionReferenceId 配列に複数の値を指定することで、1 つのオーバーライドを使用して多くのポリシーの効果を置き換えることができます。 1 つのオーバーライドを最大 50 個の policyDefinitionReferenceId に使用でき、1 つのポリシー割り当てには、指定された順序で評価された最大 10 個のオーバーライドを含めることができます。 割り当てが作成される前に、オーバーライドで選択された効果は、効果がパラメーター化されている場合に、ポリシー ルールとパラメーター許可値リストに対して検証されます。

実施モード

enforcementMode プロパティを使用すると、ユーザーは、ポリシーの適用を開始したり、Azure アクティビティ ログのエントリをトリガーしたりすることなく、既存のリソースに対するポリシーの結果をテストできます。

このシナリオは、一般に "What If" と呼ばれ、安全な展開のプラクティスに沿っています。 enforcementMode は、無効の効果とは異なります。なぜなら、その効果は、リソースの評価がまったく行われないようにするからです。

このプロパティの値は次のとおりです。

モード JSON 値 Type 手動で修復 アクティビティ ログ エントリ 説明
Enabled Default string はい はい ポリシーの効果は、リソースの作成時または更新時に適用されます。
無効 DoNotEnforce string はい いいえ ポリシーの効果は、リソースの作成時または更新時に適用されません。

ポリシーまたはイニシアティブの定義で enforcementMode を指定しないと、値 Default が使用されます。 enforcementModeDoNotEnforce に設定されている場合でも、deployIfNotExists のポリシーに対して修復タスクを開始できます。

除外範囲

割り当ての範囲には、子リソース コンテナーと子リソースがすべて含まれます。 子リソース コンテナーまたは子リソースに定義を適用しない場合、notScopes を設定することでそれぞれを評価から "除外" できます。 このプロパティは、1 つまたは複数のリソース コンテナーまたはリソースを評価から除外することを可能にする配列です。 notScopes は、初回割り当ての作成後、追加または更新できます。

Note

"除外された" リソースは、"適用除外された" リソースとは異なります。 詳細については、「Azure Policy でのスコープについて」を参照してください。

非コンプライアンス メッセージ

リソースがポリシーまたはイニシアチブ定義に準拠していない理由を説明するカスタム メッセージを設定するには、割り当て定義で nonComplianceMessages を設定します。 このノードは message エントリの配列です。 このカスタム メッセージは、非コンプライアンスの既定のエラー メッセージというだけでなく、オプションでもあります。

重要

コンプライアンス非対応向けのカスタム メッセージは、Resource Manager モード定義を使用した定義またはイニシアチブでのみサポートされます。

"nonComplianceMessages": [
  {
    "message": "Default message"
  }
]

割り当てがイニシアチブ用の場合は、イニシアチブのポリシー定義ごとに異なるメッセージを構成できます。 メッセージでは、イニシアチブ定義で構成されている policyDefinitionReferenceId 値を使用します。 詳細については、「ポリシー定義のプロパティ」を参照してください。

"nonComplianceMessages": [
  {
    "message": "Default message"
  },
  {
    "message": "Message for just this policy definition by reference ID",
    "policyDefinitionReferenceId": "10420126870854049575"
  }
]

パラメーター

ポリシー割り当てのこのセグメントでは、ポリシー定義またはイニシアティブ定義で定義されているパラメーターに対する値を指定します。 この設計により、異なるリソースでポリシーまたはイニシアティブの定義を再利用しながら、異なるビジネス値や結果を確認することができます。

"parameters": {
  "prefix": {
    "value": "DeptA"
  },
  "suffix": {
    "value": "-LC"
  }
}

この例では、ポリシー定義で以前に定義されているパラメーターは、prefix および suffix です。 この特定のポリシー割り当てでは、prefixDeptA に、suffix-LC に設定します。 同じポリシー定義を異なる部門の異なるパラメーター セットで再利用できるため、柔軟性を提供しながら、ポリシー定義の重複と複雑さを軽減できます。

ID

効果が deployIfNotExists または modify に設定されたポリシーの割り当ての場合、準拠していないリソースに対して修復を実行するには、ID プロパティが必要です。 割り当てで ID を使用する場合、ユーザーは割り当ての場所も指定する必要があります。

Note

1 つのポリシー割り当ては、1 つのシステムまたはユーザー割り当てマネージド ID にのみ関連付けることができます。 ただし、必要に応じて、その ID には複数のロールを割り当てることができます。

# System-assigned identity
 "identity": {
  "type": "SystemAssigned"
}
# User-assigned identity
  "identity": {
  "type": "UserAssigned",
  "userAssignedIdentities": {
    "/subscriptions/SubscriptionID/resourceGroups/{rgName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
  }
},

次のステップ