Azure Policy 定義の構造の基本
Azure Policy の定義には、リソースのコンプライアンス条件と、条件が満たされた場合に実行する効果が記述されます。 条件によって、リソース プロパティ フィールドまたは値が必要な値と比較されます。 リソース プロパティ フィールドには、エイリアスを使用してアクセスします。 リソース プロパティ フィールドが配列の場合、特別な配列のエイリアスを使用して、すべての配列メンバーから値を選択し、それぞれに条件を適用することができます。 条件の詳細を参照してください。
ポリシーの割り当てを使用すると、コストを制御し、リソースを管理できます。 たとえば、特定の種類の仮想マシンのみを許可するように指定することができます。 また、リソースに特定のタグを付けることを必須にすることもできます。 スコープでの割り当ては、そのスコープ以下のすべてのリソースに適用されます。 リソース グループにポリシー割り当てが適用されると、そのリソース グループ内のすべてのリソースに適用されます。
JSON を使用して、次の要素を含むポリシー定義を作成します:
displayName
description
mode
metadata
parameters
policyRule
- 論理評価
effect
たとえば、次の JSON は、リソースがデプロイされる場所を制限するポリシーを示しています。
{
"properties": {
"displayName": "Allowed locations",
"description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
"mode": "Indexed",
"metadata": {
"version": "1.0.0",
"category": "Locations"
},
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of locations that can be specified when deploying resources",
"strongType": "location",
"displayName": "Allowed locations"
},
"defaultValue": [
"westus2"
]
}
},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
}
詳細については、ポリシー定義のスキーマを参照してください。 Azure Policy の組み込みとパターンについては、「Azure Policy のサンプル」を参照してください。
表示名と説明
displayName
と description
を使用して、ポリシー定義を識別して、定義が使用されるときにコンテキストを指定します。 displayName
の最大長は、128 文字で、description
の最大長は 512 文字です。
Note
ポリシー定義の作成または更新時、JSON の範囲外のプロパティにより id
、type
、name
が定義され、JSON ファイルでは不要となります。 SDK 経由でポリシー定義を取得すると、JSON の一部として id
、type
、name
プロパティが返されますが、いずれもポリシー定義に関連する読み取り専用情報となります。
ポリシーの種類
policyType
プロパティを設定することはできませんが、SDK によって返され、ポータルに表示される値は 3 つあります:
Builtin
: Microsoft は、これらのポリシー定義を提供および管理します。Custom
:顧客によって作成されるすべてのポリシー定義にこの値があります。Static
:Microsoft に所有権がある規制に関するコンプライアンス ポリシーを示します。 これらのポリシー定義のコンプライアンス結果は、Microsoft インフラストラクチャでの Microsoft 以外の監査の結果です。 Azure portal では、この値は Microsoft マネージドとして表示されることがあります。 詳細については、「クラウドにおける共同責任」を参照してください。
モード
mode
は、ポリシーが Azure Resource Manager プロパティまたはリソース プロバイダーのプロパティのどちらをターゲットにしているかに応じて構成されます。
Resource Manager のモード
mode
によって、ポリシー定義に対して評価されるリソースの種類が決定されます。 サポートされているモードは次のとおりです。
all
: リソース グループ、サブスクリプション、およびすべてのリソースの種類を評価しますindexed
: タグと場所をサポートするリソースの種類のみを評価します
たとえば、リソース Microsoft.Network/routeTables
では、タグと場所がサポートされ、両方のモードで評価されます。 ただし、リソース Microsoft.Network/routeTables/routes
は、タグ付けできず、Indexed
モードでは評価されません。
ほとんどの場合、mode
は all
に設定することをお勧めします。 ポータルを使用して作成されるポリシーの定義はすべて、all
モードを使用します。 PowerShell または Azure CLI を使用する場合、mode
パラメーターを手動で指定することができます。 ポリシー定義に mode
値が含まれていない場合、既定値には Azure PowerShell では all
が、Azure CLI では null
が使用されます。 null
モードは、下位互換性をサポートするために indexed
を使用するのと同じです。
タグまたは場所を適用するポリシーを作成する場合は、indexed
を使用してください。 これは必須ではありませんが、それによって、タグまたは場所をサポートしていないリソースが、コンプライアンス結果に非準拠として表示されることを回避できます。 例外はリソース グループとサブスクリプションです。 リソース グループまたはサブスクリプションに対して場所またはタグを適用する Policy 定義では、mode
を all
に設定し、明確に Microsoft.Resources/subscriptions/resourceGroups
型または Microsoft.Resources/subscriptions
型をターゲットにする必要があります。 例については、「パターン: タグ - サンプル 1」を参照してください。 タグをサポートするリソースの一覧については、「Azure リソースでのタグのサポート」を参照してください。
リソース プロバイダーのモード
次のリソース プロバイダーのモードが完全にサポートされています。
- Kubernetes クラスターと、ポッド、コンテナー、イングレスなどのコンポーネントを管理するための
Microsoft.Kubernetes.Data
。 Azure Kubernetes Service クラスターと Azure Arc 対応 Kubernetes クラスターに対応しています。 このリソース プロバイダー モードを使用する定義では、効果 audit、deny、および disabled を使用します。 - Azure Key Vault でコンテナーと証明書を管理するための
Microsoft.KeyVault.Data
。 これらのポリシー定義の詳細については、「Azure Key Vault と Azure Policy を統合する」を参照してください。 - Azure Policy を使用して Azure Virtual Network Manager カスタム メンバーシップ ポリシーを管理するための
Microsoft.Network.Data
。
現在、プレビューとして次のリソース プロバイダー モードがサポートされています。
- Azure Policy を使用してマネージド ハードウェア セキュリティ モジュール (HSM) キーを管理するための
Microsoft.ManagedHSM.Data
です。 - Azure Policy を使用して、許可リストに指定されていない Azure Data Factory 送信トラフィック ドメイン名を拒否するための
Microsoft.DataFactory.Data
です。 このリソース プロバイダー モードは適用のみであり、パブリック プレビューではコンプライアンスは報告されません。 - Azure Machine Learning モデル デプロイを管理するための
Microsoft.MachineLearningServices.v2.Data
。 このリソース プロバイダー モードでは、新しく作成および更新されたコンポーネントのコンプライアンスが報告されます。 パブリック プレビューの段階では、コンプライアンス レコードは 24 時間保持されます。 これらのポリシー定義が割り当てられる前に存在するモデル デプロイではコンプライアンスは報告されません。
Note
特に明記されていない限り、リソース プロバイダーのモードは組み込みのポリシー定義のみをサポートし、コンポーネントレベルでの適用除外はサポートされません。
Metadata
オプションの metadata
プロパティには、ポリシー定義に関する情報が格納されています。 お客様は metadata
で組織にとって有用なすべてのプロパティと値を定義できます。 ただし、Azure Policy と組み込みで使用される一般的なプロパティがいくつかあります。各 metadata
プロパティには 1,024 文字の制限があります。
一般的なメタデータのプロパティ
version
(string):ポリシー定義の内容のバージョンに関する詳細を追跡します。category
(string): ポリシー定義が表示される Azure portal 内のカテゴリを指定します。preview
(boolean):ポリシー定義が preview であるかどうかを示す true または false フラグです。deprecated
(ブール値): ポリシー定義が deprecated とマークされているかどうかを示す true または false フラグです。portalReview
(string): 必要な入力に関係なく、ポータルでパラメーターを確認するかどうかを指定します。
注意
Azure Policy サービスは、version
、preview
、deprecated
の各プロパティを使用して、組み込みのポリシー定義に対する変更のレベルや取り組み、状態を伝えます。 version
の形式は {Major}.{Minor}.{Patch}
です。 特定の状態 (deprecated、preview など) は、version
プロパティに追加されるほか、別のプロパティに boolean として追加されます。 Azure Policy が組み込みをバージョン管理する方法の詳細については、組み込みのバージョン管理に関する記事を参照してください。
ポリシーが "非推奨"または "プレビュー段階"になるという意味について詳しくは、「Preview and deprecated policies」 (プレビューと非推奨のポリシー) を参照してください。
定義の場所
イニシアティブまたはポリシーを作成する際には、定義の場所を指定する必要があります。 定義の場所は、管理グループまたはサブスクリプションにする必要があります。 この場所によって、イニシアティブまたはポリシー定義を割り当てることができるスコープが決まります。 リソースは、割り当て対象とする定義の場所のダイレクト メンバーか、その階層内の子である必要があります。
定義の場所が:
- サブスクリプションの場合 - そのサブスクリプション内のリソースだけをポリシー定義に割り当てることができます。
- 管理グループの場合 - 子管理グループと子サブスクリプション内のリソースだけをポリシー定義に割り当てることができます。 ポリシー定義を複数のサブスクリプションに適用する予定がある場合、その場所は各サブスクリプションを含む管理グループである必要があります。
詳細については、「Azure Policy でのスコープについて」を参照してください。
次のステップ
- ポリシー定義の構造の詳細については、パラメータ、ポリシー ルール、別名に移動します。
- イニシアティブの場合は、イニシアティブ定義の構造に移動します。
- Azure Policy のサンプルを確認します。
- 「Policy の効果について」を確認します。
- プログラムによってポリシーを作成する方法を理解します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。
- 「Azure 管理グループのリソースを整理する」で、管理グループとは何かを確認します。