Azure Policy の割り当ての構造
ポリシーの割り当ては、どのポリシーまたはイニシアティブにどのリソースを割り当てるか定義するために Azure Policy によって使用されます。 ポリシーの割り当てでは、割り当て時にそのリソース グループのパラメーターの値を決定でき、ポリシー定義を再利用して、同じリソースのプロパティのコンプライアンス ニーズが異なる場合に対応できます。
注意
Azure Policy のスコープの詳細については、「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",
"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 のサンプルはすべて「Azure Policy のサンプル」にあります。
表示名と説明
displayName と description は、ポリシーの割り当てを識別し、リソースの特定のセットで使用するためのコンテキストを提供するために使用します。 displayName の最大長は 128 文字で、description の最大長は 512 文字です。
Metadata
省略可能な metadata
プロパティには、ポリシー割り当てに関する情報が格納されています。 お客様は metadata
で組織にとって有用なすべてのプロパティと値を定義できます。 ただし、Azure Policy で使用される "一般的" なプロパティがいくつかあります。 各 metadata
プロパティには 1,024 文字の制限があります。
一般的なメタデータのプロパティ
assignedBy
(文字列): 割り当てを作成したセキュリティ プリンシパルのフレンドリ名。createdBy
(文字列): 割り当てを作成したセキュリティ プリンシパルの GUID。createdOn
(文字列): ユニバーサル ISO 8601 日時形式の割り当て作成時刻。parameterScopes
(オブジェクト): キーと値のペアのコレクション。ここで、キーは strongType 構成済みパラメーター名と一致し、値は、strongTypeを照合して使用可能なリソースの一覧を提供するためにポータルで使用されるリソース スコープを定義します。 スコープが割り当てスコープと異なる場合、ポータルによりこの値が設定されます。 設定されると、ポータルでのポリシー割り当ての編集により、パラメーターのスコープがこの値に自動的に設定されます。 ただし、スコープはその値にロックされず、別のスコープに変更できます。次の
parameterScopes
の例は、backupPolicyId
という名前の strongType パラメーターについてです。これは、ポータルで割り当てが編集されたときにリソース選択のスコープを設定します。"metadata": { "parameterScopes": { "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}" } }
updatedBy
(文字列): 割り当てを更新したセキュリティ プリンシパルのフレンドリ名 (存在する場合)。updatedOn
(文字列): ユニバーサル ISO 8601 日時形式の割り当て更新時刻 (存在する場合)。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 個の値を含めることができます。
リソース セレクターには、複数のセレクターを含めることができます。 リソース セレクターに適用するには、リソースがそのすべてのセレクターで指定されている要件を満たしている必要があります。 また、1 つの割り当てで最大 10 個のリソース セレクターを指定できます。 スコープ内リソースは、これらのリソース セレクターのいずれかを満たすと評価されます。
上書き
省略可能な overrides
プロパティを使用すると、基になるポリシー定義を変更したり、ポリシー定義でパラメーター化された効果を使用したりせずに、ポリシー定義の効果を変更できます。
オーバーライドの最も一般的なユース ケースは、多数の関連付けられたポリシー定義を持つポリシー イニシアティブです。 このような状況では、複数のポリシー効果を管理すると、特に効果を随時更新する必要がある場合に、大きな管理労力を消費する可能性があります。 オーバーライドを使用すると、イニシアチブ内の複数のポリシー定義の効果を同時に更新できます。
例を見てみましょう。 policyDefinitionReferenceId
corpVMSizePolicy と 1 つの audit
効果を持つカスタム ポリシー定義を含む CostManagement という名前のポリシー イニシアチブがあるとします。 CostManagement イニシアチブを割り当てるが、このポリシーに対して報告されたコンプライアンスをまだ確認したくないとします。 このポリシーの "監査" 効果は、次のサンプルに示すように、イニシアチブの割り当てのオーバーライドを通じて "無効" に置き換えることができます。
{
"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"
}
オーバーライドには次のプロパティがあります。
kind
: 割り当てによってオーバーライドされるプロパティ。 サポートされる種類はpolicyEffect
です。value
: 既存の値をオーバーライドする新しい値。 サポートされる値は効果です。selectors
: (省略可能) ポリシー割り当てのどのスコープがオーバーライドするかを決定するために使われるプロパティ。kind
: オーバーライドのスコープをどの特性で絞り込むかを記述するセレクターのプロパティ。kind: policyEffect
に使用できる値は次のとおりです。policyDefinitionReferenceId
: イニシアティブの割り当て内のどのポリシー定義で効果をオーバーライドする必要があるかを指定します。
in
: 指定したkind
に対して許可される値の一覧です。notIn
とは使用できません。 最大 50 個の値を含めることができます。notIn
: 指定したkind
に対して許可されない値の一覧です。in
とは使用できません。 最大 50 個の値を含めることができます。
policyDefinitionReferenceId 配列に複数の値を指定することで、1 つのオーバーライドを使用して多くのポリシーの効果を置き換えることができることに注意してください。 1 つのオーバーライドを最大 50 個の policyDefinitionReferenceIds に使用でき、1 つのポリシー割り当てには、指定された順序で評価された最大 10 個のオーバーライドを含めることができます。 割り当てが作成される前に、オーバーライドで選択された効果は、効果がパラメーター化されている場合に、ポリシー ルールとパラメーター許可値リストに対して検証されます。
実施モード
enforcementMode プロパティを使用すると、ユーザーは、ポリシーの適用を開始したり、Azure Activity ログのエントリをトリガーしたりすることなく、既存のリソースに対するポリシーの結果をテスできます。
このシナリオは、一般に "What If" と呼ばれ、安全な展開のプラクティスに沿っています。 enforcementMode は、無効の効果とは異なります。なぜなら、その効果は、リソースの評価がまったく行われないようにするからです。
このプロパティの値は次のとおりです。
モード | JSON 値 | Type | 手動で修復 | アクティビティ ログ エントリ | 説明 |
---|---|---|---|---|---|
Enabled | Default | string | はい | はい | ポリシーの効果は、リソースの作成時または更新時に適用されます。 |
無効 | DoNotEnforce | string | はい | いいえ | ポリシーの効果は、リソースの作成時または更新時に適用されません。 |
ポリシーまたはイニシアティブの定義で enforcementMode を指定しないと、値 Default が使用されます。 enforcementMode が DoNotEnforce に設定されている場合でも、deployIfNotExists のポリシーに対して修復タスクを開始できます。
除外範囲
割り当ての範囲には、子リソース コンテナーと子リソースがすべて含まれます。 子リソース コンテナーまたは子リソースに定義を適用しない場合、notScopes を設定することでそれぞれを評価から "除外" できます。 このプロパティは、1 つまたは複数のリソース コンテナーまたはリソースを評価から除外することを可能にする配列です。 notScopes は、初回割り当ての作成後、追加または更新できます。
Note
"除外された" リソースは、"適用除外された" リソースとは異なります。 詳細については、「Azure Policy でのスコープについて」を参照してください。
ポリシー定義 ID
このフィールドでは、ポリシー定義またはイニシアティブ定義の完全なパス名を指定する必要があります。
policyDefinitionId
は文字列であり、配列ではありません。 ポリシーの割り当てが評価されるたびに、割り当てられたポリシー定義またはイニシアティブの最新の内容が取得されます。 複数のポリシーを一緒に割り当てることが多い場合は、代わりにイニシアティブを使用することをお勧めします。
非コンプライアンス メッセージ
リソースがポリシーまたはイニシアチブ定義に準拠していない理由を説明するカスタム メッセージを設定するには、割り当て定義で 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
効果が deployIfNotExist または modify に設定されたポリシーの割り当ての場合、準拠していないリソースに対して修復を実行するには、ID プロパティが必要です。 また、ID を使用する場合、ユーザーは、割り当ての場所も指定する必要があります。
注意
1 つのポリシー割り当ては、1 つのシステムまたはユーザー割り当てマネージド ID にのみ関連付けることができます。 ただし、必要に応じて、その ID には複数のロールを割り当てることができます。
# System-assigned identity
"identity": {
"type": "SystemAssigned"
}
# User-assigned identity
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
}
},
次のステップ
- ポリシー定義の構造についてさらに学習します。
- プログラムによってポリシーを作成する方法を理解します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。
- 「Azure 管理グループのリソースを整理する」で、管理グループとは何かを確認します。