Azure Policy の割り当ての構造
[アーティクル] 2024/10/16
8 人の共同作成者
フィードバック
この記事の内容
範囲
ポリシー定義 ID とバージョン (プレビュー)
表示名と説明
Metadata
リソース セレクター
上書き
実施モード
除外範囲
非コンプライアンス メッセージ
パラメーター
ID
次のステップ
さらに 8 個を表示
ポリシー割り当ては、ポリシー定義またはイニシアティブによってどのリソースが評価されるかを定義します。 さらに、ポリシー割り当てでは、割り当て時にそのリソース グループのパラメーターの値を決定でき、ポリシー定義を再利用して、コンプライアンスのためにニーズが異なる同じリソースのプロパティに対応できます。
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" : {
"principalId" : "<PrincipalId>" ,
"tenantId" : "<TenantId>" ,
"identityType" : "SystemAssigned" ,
"userAssignedIdentities" : null
},
"location" : "westus" ,
"resourceSelectors" : [],
"overrides" : [],
}
}
割り当てリソースの作成時に使用されるスコープは、リソースの適用性についての主な要因です。 割り当て範囲の詳細については、「Azure Policy でのスコープについて 」を参照してください。
このフィールドでは、ポリシー定義またはイニシアティブ定義の完全なパス名を指定する必要があります。
policyDefinitionId
は文字列であり、配列ではありません。 ポリシーの割り当てが評価されるたびに、割り当てられたポリシー定義またはイニシアティブの最新の内容が取得されます。 複数のポリシーを一緒に割り当てることが多い場合は、代わりにイニシアティブ を使用することをお勧めします。
組み込みの定義とイニシアティブについては、評価対象となる特定の definitionVersion
を使用できます。 既定では、バージョンは最新のメジャー バージョンに設定され、マイナーとパッチの変更が自動的に取り込まれます。
定義の軽微な変更を自動的に取り込む場合、バージョン番号は #.*.*
になります。 ワイルドカードは更新の自動取り込みを表します。
マイナー バージョン パスにピン留めするには、バージョン形式は #.#.*
になります。
セキュリティ上の理由から、すべてのパッチ変更は自動取り込みされる必要があります。 パッチの変更は、テキストの変更と緊急事態のシナリオに限定されます。
displayName
と description
は、ポリシーの割り当てを識別し、リソースの特定のセットで使用するためのコンテキストを提供するために使用します。
displayName
の最大長は 128 文字で、description
の最大長は 512 文字です。
省略可能な 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"
}
リソース セレクターには、次のプロパティがあります。
リソース セレクター には、複数の 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
に使用できる値:
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
は、初回割り当ての作成後、追加または更新できます。
リソースがポリシーまたはイニシアチブ定義に準拠していない理由を説明するカスタム メッセージを設定するには、割り当て定義で nonComplianceMessages
を設定します。 このノードは message
エントリの配列です。 このカスタム メッセージは、非コンプライアンスの既定のエラー メッセージというだけでなく、オプションでもあります。
"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 に設定します。 同じポリシー定義を異なる部門の異なるパラメーター セットで再利用できるため、柔軟性を提供しながら、ポリシー定義の重複と複雑さを軽減できます。
効果が deployIfNotExists
または modify
に設定されたポリシーの割り当ての場合、準拠していないリソースに対して修復を実行するために ID プロパティが必要です。 1 つのポリシー割り当ては、1 つのシステム割り当てまたはユーザー割り当てマネージド ID にのみ関連付けることができます。 ただし、必要に応じて、その ID には複数のロールを割り当てることができます。
システム割り当てマネージド ID を使用する割り当てでは、最上位の location
プロパティも指定して、デプロイ先を決定する必要があります。 この場所を global
に設定することはできません。また、変更することもできません。
location
プロパティは、Rest API バージョン 2018-05-01 以降でのみ指定されます。 ID を使用しない割り当てで場所が指定されている場合、その場所は無視されます。
# System-assigned identity
"identity" : {
"principalId" : "<PrincipalId>" ,
"tenantId" : "<TenantId>" ,
"identityType" : "SystemAssigned" ,
"userAssignedIdentities" : null
},
"location" : "westus" ,
...
# User-assigned identity
"identity" : {
"identityType" : "UserAssigned" ,
"userAssignedIdentities" : {
"/subscriptions/SubscriptionID/resourceGroups/{rgName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity" : {}
}
},