Azure Policy イニシアチブ定義の構造
イニシアティブを使用すると、複数の関連するポリシー定義をグループ化できます。グループを単一の項目として操作するので、割り当てと管理が単純になります。 たとえば、関連するタグ付けポリシー定義を 1 つのイニシアティブとしてグループ化できます。 それぞれのポリシーを個別に割り当てるのではなく、イニシアティブを適用することになります。
ポリシー イニシアチブ定義を作成するには、JSON を使用します。 ポリシー イニシアチブ定義には、以下のものに対する要素が含まれています。
- 表示名
- description
- metadata
- version
- parameters
- ポリシー定義
- ポリシー グループ (このプロパティは規制コンプライアンス (プレビュー) 機能の一部)
次の例は、2 つのタグ (costCenter
および productName
) を扱うためのイニシアティブの作成方法を示しています。 2 つの組み込みポリシーを使用して、既定のタグの値を適用しています。
{
"properties": {
"displayName": "Billing Tags Policy",
"policyType": "Custom",
"description": "Specify cost Center tag and product name tag",
"version" : "1.0.0",
"metadata": {
"version": "1.0.0",
"category": "Tags"
},
"parameters": {
"costCenterValue": {
"type": "String",
"metadata": {
"description": "required value for Cost Center tag"
},
"defaultValue": "DefaultCostCenter"
},
"productNameValue": {
"type": "String",
"metadata": {
"description": "required value for product Name tag"
},
"defaultValue": "DefaultProduct"
}
},
"policyDefinitions": [{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"definitionVersion": "1.*.*"
"parameters": {
"tagName": {
"value": "costCenter"
},
"tagValue": {
"value": "[parameters('costCenterValue')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
"parameters": {
"tagName": {
"value": "costCenter"
},
"tagValue": {
"value": "[parameters('costCenterValue')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"parameters": {
"tagName": {
"value": "productName"
},
"tagValue": {
"value": "[parameters('productNameValue')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
"parameters": {
"tagName": {
"value": "productName"
},
"tagValue": {
"value": "[parameters('productNameValue')]"
}
}
}
]
}
}
Azure Policy の組み込みとパターンについては、「Azure Policy のサンプル」を参照してください。
Metadata
オプションの metadata
プロパティには、イニシアチブ ポリシー定義に関する情報が格納されています。
お客様は metadata
で組織にとって有用なすべてのプロパティと値を定義できます。 ただし、Azure Policy と組み込みで使用される一般的なプロパティがいくつかあります。
一般的なメタデータのプロパティ
version
(string):ポリシー イニシアチブ定義の内容のバージョンに関する詳細を追跡します。 組み込みの場合、このメタデータ バージョンでは組み込みの version プロパティに従います。 このメタデータ バージョンでは version プロパティを使用することをお勧めします。category
(string): ポリシー定義が表示される Azure portal 内のカテゴリを指定します。注意
規制コンプライアンス イニシアチブの場合、
category
は規制コンプライアンスである必要があります。preview
(boolean):イニシアチブ ポリシー定義が preview であるかどうかを示す true または false フラグです。deprecated
(boolean):イニシアチブ ポリシー定義が deprecated とマークされているかどうかを示す true または false フラグです。
バージョン (プレビュー)
組み込みのポリシー イニシアチブでは、同じ definitionID
を持つ複数のバージョンをホストできます。 バージョン番号が指定されていない場合、すべてのエクスペリエンスで最新バージョンの定義が示されます。 特定のバージョンの組み込みを表示するには、API、SDK、または UI で指定する必要があります。 割り当て内の特定のバージョンの定義を参照するには、割り当て内の定義のバージョンに関する記事を参照してください
Azure Policy サービスは、version
、preview
、deprecated
の各プロパティを使用して、組み込みのポリシー定義や取り組みに対して状態や変更のレベルを伝えます。 version
の形式は {Major}.{Minor}.{Patch}
です。 ポリシー定義がプレビュー状態の場合、サフィックス preview が version
プロパティに追加され、ブール値として扱われます。 ポリシー定義が非推奨の場合、定義のメタデータで "deprecated": "true"
を使用して、非推奨化がブール値としてキャプチャされます。
- メジャー バージョン (例: 2.0.0): メジャー ルール ロジック変更、パラメーターの削除、既定での強制効果の追加などの破壊的変更を導入します。
- マイナー バージョン (例: 2.1.0): マイナー ルール ロジック変更、新しいパラメーター許可値の追加、ロール definitionId への変更、イニシアチブ内での定義の追加または削除などの変更を導入します。
- パッチ バージョン (例: 2.1.4): 文字列またはメタデータの変更および緊急セキュリティ シナリオ (まれ) を導入します。
組み込みイニシアチブはバージョン管理され、特定のバージョンの組み込みポリシー定義は組み込みまたはカスタム イニシアチブ内でも参照できます。 詳細については、参照定義とバージョンに関する記述を参照してください。
プレビュー段階では、ポータルを使用してイニシアティブを作成するときに、組み込みのポリシー定義参照のバージョンを指定することはできません。 ポータルを使用して作成されたカスタム イニシアチブのすべての組み込みポリシー参照は代わりに、既定でポリシー定義の最新バージョンになります。
Azure Policy の組み込みバージョン管理について詳しくは、組み込みのバージョン管理に関するページを参照してください。 ポリシーが "非推奨"または "プレビュー段階"になるという意味について詳しくは、「Preview and deprecated policies」 (プレビューと非推奨のポリシー) を参照してください。
パラメーター
パラメーターによって、ポリシー定義の数を減らし、ポリシーの管理を単純化できます。 フォームにあるフィールドのようなパラメーター name
、address
、city
、state
を考えてみてください。 これらのパラメーターは常に同じままですが、その値はフォームの個々の入力に基づいて変わります。
パラメーターは、ポリシー イニシアチブの作成時と同じように機能します。 ポリシー イニシアチブ定義にパラメーターを含めることにより、含まれているポリシーでそのパラメーターを再利用できます。
Note
いったんイニシアティブが割り当てられると、イニシアティブ レベルのパラメーターを変更することはできません。 このため、パラメーターを定義するときに defaultValue を設定することをお勧めします。
パラメーターのプロパティ
パラメーターには、ポリシー イニシアチブ定義内で使用される次のプロパティがあります。
name
:お使いのパラメーターの名前。 ポリシー規則内のparameters
デプロイ関数によって使用されます。 詳しくは、パラメーター値の使用に関するページをご覧ください。type
:パラメーターが string、array、object、boolean、integer、floatdatetime のどれであるかを決定します。metadata
: Azure portal によって主に使用されるサブプロパティを定義して、ユーザー フレンドリな情報を表示します。description
: (省略可能) パラメーターが何に使用されるかの説明。 許可される値の例を提示するために使用できます。displayName
:ポータル内に表示されるパラメーターのフレンドリ名。strongType
:(省略可能) ポータル経由でポリシー定義を割り当てるときに使用されます。 コンテキスト対応の一覧を提供します。 詳しくは、strongType に関するページをご覧ください。
defaultValue
:(省略可能) 値が指定されていない場合、割り当ての中でパラメーターの値を設定します。allowedValues
:(省略可能) 割り当て中にパラメーターが許可する値の配列を指定します。
たとえば、ポリシー イニシアチブ定義を定義して、含まれるさまざまなポリシー定義内のリソースの場所を制限することができます。 そのポリシー イニシアチブ定義のパラメーターは、allowedLocations にすることができます。 このパラメーターは、含まれているポリシー定義ごとに使用でき、ポリシー イニシアチブの割り当て時に定義されます。
"parameters": {
"init_allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [ "westus2" ],
"allowedValues": [
"eastus2",
"westus2",
"westus"
]
}
}
パラメーター値をポリシー定義に渡す
イニシアチブ定義の policyDefinitions 配列に含まれるポリシー定義に、どのイニシアチブ パラメーターを渡すかを宣言します。 パラメーター名は同じにすることができますが、ポリシー定義とは異なる名前を使用すると、コードの読みやすさが上がります。
たとえば、以前に定義した init_allowedLocations イニシアチブ パラメーターは、次のように、いくつかの含まれるポリシー定義とそのパラメーター sql_locations と vm_locations に渡すことができます。
"policyDefinitions": [
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/0ec8fc28-d5b7-4603-8fec-39044f00a92b",
"policyDefinitionReferenceId": "allowedLocationsSQL",
"parameters": {
"sql_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/aa09bd0f-aa5f-4343-b6ab-a33a6a6304f3",
"policyDefinitionReferenceId": "allowedLocationsVMs",
"parameters": {
"vm_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
}
]
このサンプルでは、「パラメーターのプロパティ」に示されていた init_allowedLocations パラメーターを参照します。
strongType
metadata
プロパティの中で、strongType を使用して、Azure portal 内でオプションの複数選択リストを提供できます。 strongType には、サポートされる "リソースの種類" または許可される値を指定できます。 ある "リソースの種類" が strongType に対して有効かどうかを確認するには、Get-AzResourceProvider を使用します。
Get-AzResourceProvider によって返されない一部の "リソースの種類" もサポートされています。 "リソースの種類" は次のとおりです。
Microsoft.RecoveryServices/vaults/backupPolicies
"リソースの種類" でない strongType の許可される値には、次のものがあります。
location
resourceTypes
storageSkus
vmSKUs
existingResourceGroups
ポリシーの定義
イニシアチブ定義の policyDefinitions
部分は、イニシアチブに含まれる既存のポリシー定義の配列 です。 「パラメーター値をポリシー定義に渡す」で説明したように、このプロパティでイニシアチブ パラメーターがポリシー定義に渡されます。
ポリシー定義のプロパティ
ポリシー定義を表す各配列要素には、次のプロパティがあります。
policyDefinitionId
(string):含めるカスタムまたは組み込みのポリシー定義の ID。policyDefinitionReferenceId
(string):含まれているポリシー定義の短い名前。parameters
:(省略可能) ポリシー定義内のプロパティとして、含まれているポリシー定義にイニシアチブ パラメーターを渡すための名前と値のペア。 詳しくは、「パラメーター」をご覧ください。definitionVersion
: (省略可能) 参照する組み込み定義のバージョン。 何も指定されていない場合は、割り当て時に最新のメジャー バージョンが参照され、マイナー更新が自動的に取り込まれます。 詳細については、定義バージョンに関する記述を参照してくださいgroupNames
(string の配列):(省略可能) ポリシー定義がメンバーとなっているグループ。 詳しくは、ポリシー グループに関するページをご覧ください。
次に示すのは、それぞれが同じイニシアチブ パラメーターに渡された 2 つのポリシー定義が含まれている policyDefinitions
の例です。
"policyDefinitions": [
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/0ec8fc28-d5b7-4603-8fec-39044f00a92b",
"policyDefinitionReferenceId": "allowedLocationsSQL",
"definitionVersion": "1.2.*"
"parameters": {
"sql_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
},
{
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/aa09bd0f-aa5f-4343-b6ab-a33a6a6304f3",
"policyDefinitionReferenceId": "allowedLocationsVMs",
"parameters": {
"vm_locations": {
"value": "[parameters('init_allowedLocations')]"
}
}
}
]
ポリシー定義グループ
イニシアチブ定義のポリシー定義グループをグループ化して分類できます。 Azure Policy の規制コンプライアンス (プレビュー) 機能では、このプロパティを使用して定義がコントロールとコンプライアンス ドメインにグループ化されます。 これらの情報は、 policyDefinitionGroups
配列プロパティで定義されます。 追加のグループ化の詳細については、Microsoft によって作成された policyMetadata オブジェクトを参照してください。 詳細については、メタデータ オブジェクトに関するページを参照してください。
ポリシー定義グループのパラメーター
policyDefinitionGroups
の各配列要素は、次のプロパティを両方持つ必要があります。
name
(string) [必須]: グループの短い名前。 規制コンプライアンスでは、コントロール。 このプロパティの値はpolicyDefinitions
でgroupNames
により使用されます。category
(string):グループが属している階層。 規制コンプライアンスでは、コントロールのコンプライアンス ドメイン。displayName
(string):グループまたはコントロールのフレンドリ名。 ポータルで使用されます。description
(string):グループまたはコントロールの対象の説明です。additionalMetadataId
(string):policyMetadata オブジェクトの場所。 コントロールおよびコンプライアンス ドメインに関する追加情報が含まれています。注意
ユーザーは、既存の policyMetadata オブジェクトをポイントすることがあります。 しかし、これらのオブジェクトは読み取り専用であり、Microsoft によってのみ作成されます。
NIST の組み込みのイニシアチブ定義の policyDefinitionGroups
プロパティの例は次のようになります。
"policyDefinitionGroups": [
{
"name": "NIST_SP_800-53_R4_AC-1",
"additionalMetadataId": "/providers/Microsoft.PolicyInsights/policyMetadata/NIST_SP_800-53_R4_AC-1"
}
]
メタデータ オブジェクト
Microsoft によって作成された規制コンプライアンスの組み込みには、各コントロールに関する追加情報が含まれています。 この情報については以下のとおりです。
- 規制コンプライアンス イニシアチブのコントロールの概要について Azure portal に表示されます。
- REST API 経由で入手できます。
Microsoft.PolicyInsights
リソース プロバイダーおよび policyMetadata 操作グループを参照してください。 - Azure CLI 経由で入手できます。 az policy metadata コマンドを参照してください。
重要
規制コンプライアンスのためのメタデータ オブジェクトは読み取り専用であるため、顧客が作成することはできません。
ポリシー グループのメタデータには、properties
ノードに次の情報が含まれています。
metadataId
:グループ化に関連するコントロール ID。category
(必須):コントロールが含まれる コンプライアンス ドメイン。title
(必須):コントロール IDのフレンドリ名です。owner
(必須):Azure でのコントロールの責任者を識別します。顧客、Microsoft、共有。description
:コントロールに関する追加情報。requirements
:コントロールの実装の責任についての詳細。additionalContentUrl
:コントロールの詳細へのリンク。 このプロパティは、通常、コンプライアンス標準におけるこのコントロールについて説明するドキュメントのセクションへのリンクです。
policyMetadata オブジェクトの例を次に示します。 このサンプル メタデータは NIST SP 800-53 R4 AC-1 コントロールに属しています。
{
"properties": {
"metadataId": "NIST SP 800-53 R4 AC-1",
"category": "Access Control",
"title": "Access Control Policy and Procedures",
"owner": "Shared",
"description": "**The organization:** \na. Develops, documents, and disseminates to [Assignment: organization-defined personnel or roles]: \n1. An access control policy that addresses purpose, scope, roles, responsibilities, management commitment, coordination among organizational entities, and compliance; and \n2. Procedures to facilitate the implementation of the access control policy and associated access controls; and \n
\nb. Reviews and updates the current: \n1. Access control policy [Assignment: organization-defined frequency]; and \n2. Access control procedures [Assignment: organization-defined frequency].",
"requirements": "**a.** The customer is responsible for developing, documenting, and disseminating access control policies and procedures. The customer access control policies and procedures address access to all customer-deployed resources and customer system access (e.g., access to customer-deployed virtual machines, access to customer-built applications). \n**b.** The customer is responsible for reviewing and updating access control policies and procedures in accordance with FedRAMP requirements.",
"additionalContentUrl": "https://nvd.nist.gov/800-53/Rev4/control/AC-1"
},
"id": "/providers/Microsoft.PolicyInsights/policyMetadata/NIST_SP_800-53_R4_AC-1",
"name": "NIST_SP_800-53_R4_AC-1",
"type": "Microsoft.PolicyInsights/policyMetadata"
}
次のステップ
- 定義の構造を確認します。
- Azure Policy のサンプルを確認します。
- 「Policy の効果について」を確認します。
- プログラムによってポリシーを作成する方法を理解します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。
- 「Azure 管理グループのリソースを整理する」で、管理グループとは何かを確認します。