Azure Policy の割り当ての構造
ポリシー割り当ては、ポリシー定義またはイニシアティブによってどのリソースが評価されるかを定義します。 さらに、ポリシー割り当てでは、割り当て時にそのリソース グループのパラメーターの値を決定でき、ポリシー定義を再利用して、コンプライアンスのためにニーズが異なる同じリソースのプロパティに対応できます。
JavaScript Object Notation (JSON) を使用してポリシー割り当てを作成します。 ポリシーの割り当てには、次に対する要素が含まれています。
- スコープ (scope)
- ポリシー定義 ID とバージョン
- 表示名
- description
- メタデータ
- リソース セレクター
- overrides
- 適用モード
- 除外範囲
- 非コンプライアンス メッセージ
- parameters
- identity
たとえば、次の 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
を使用できます。 既定では、バージョンは最新のメジャー バージョンに設定され、マイナーとパッチの変更が自動的に取り込まれます。
- 定義の軽微な変更を自動的に取り込む場合、バージョン番号は
#.*.*
になります。 ワイルドカードは更新の自動取り込みを表します。 - マイナー バージョン パスにピン留めするには、バージョン形式は
#.#.*
になります。 - セキュリティ上の理由から、すべてのパッチ変更は自動取り込みされる必要があります。 パッチの変更は、テキストの変更と緊急事態のシナリオに限定されます。
表示名と説明
displayName
と description
は、ポリシーの割り当てを識別し、リソースの特定のセットで使用するためのコンテキストを提供するために使用します。 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
: 割り当てによってオーバーライドされるプロパティ。 サポートされている種類はpolicyEffect
とpolicyVersion
です。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 が使用されます。 enforcementMode
が DoNotEnforce に設定されている場合でも、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
です。 この特定のポリシー割り当てでは、prefix
を DeptA に、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": {}
}
},
次のステップ
- ポリシー定義の構造についてさらに学習します。
- プログラムによってポリシーを作成する方法を理解します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。
- 「Azure 管理グループのリソースを整理する」で、管理グループとは何かを確認します。