この記事では、プログラムでポリシーを作成および管理する方法について説明します。 Azure Policy の定義によって、さまざまなルールや効果がリソースに適用されます。 適用することで、リソースは会社の標準やサービス レベル アグリーメントに準拠した状態で維持されます。
コンプライアンスについては、コンプライアンス データの取得に関するページを参照してください。
前提条件
開始する前に、次の前提条件が満たされていることを確認します。
ARMClient をまだインストールしていない場合はインストールします。 これは、Azure Resource Manager ベースの API に HTTP 要求を送信するツールです。
Azure PowerShell モジュールを最新バージョンに更新します。 詳細については、Azure PowerShell モジュールのインストールに関するページを参照してください。 最新バージョンの詳細については、Azure PowerShell を参照してください。
Azure PowerShell を使用して Azure Policy Insights リソース プロバイダーを登録し、サブスクリプションがリソース プロバイダーと連携していることを検証します。 リソース プロバイダーを登録するには、リソース プロバイダーの登録アクション操作を実行するためのアクセス許可が必要です。 この操作は、共同作成者および所有者のロールに含まれます。 次のコマンドを実行して、リソース プロバイダーを登録します。
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
リソース プロバイダーの登録と表示の詳細については、「リソース プロバイダーと種類」を参照してください。
Azure CLI をまだインストールしていない場合はインストールします。 最新バージョンは、「Windows での Azure CLI のインストール」で入手できます。
ポリシー定義を作成して割り当てる
リソースの可視性を向上するための最初の手順は、リソースに対するポリシーを作成して割り当てることです。 次の手順では、プログラムでポリシーを作成して割り当てる方法について説明します。 このポリシー例は、PowerShell、Azure CLI、HTTP 要求を使用して、すべてのパブリック ネットワークに開かれているストレージ アカウントを監査します。
PowerShell を使用してポリシー定義を作成して割り当てる
次の JSON スニペットを使用して、AuditStorageAccounts.json という名前の JSON ファイルを作成します。
{ "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction", "equals": "Allow" } ] }, "then": { "effect": "audit" } }
ポリシー定義の作成方法の詳細については、Azure Policy 定義の構造に関するページを参照してください。
次のコマンドを実行して、AuditStorageAccounts.json ファイルを使用してポリシー定義を作成します。
New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
このコマンドは、Audit Storage Accounts Open to Public Networks という名前のポリシー定義を作成します。 使用できるその他のパラメーターの詳細については、「New-AzPolicyDefinition」を参照してください。
場所パラメーターを指定せずに
New-AzPolicyDefinition
を呼び出すと、ポリシー定義は既定で、セッション コンテキストの選択されたサブスクリプションに保存されます。 定義を別の場所に保存するには、次のパラメーターを使用します。- SubscriptionId - 別のサブスクリプションに保存します。 GUID 値が必要です。
- ManagementGroupName - 管理グループに保存します。 string 値が必要です。
ポリシー定義を作成したら、次のコマンドを実行してポリシー割り当てを作成できます。
$rg = Get-AzResourceGroup -Name 'ContosoRG' $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts' New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
ContosoRG を、対象とするリソース グループの名前に置き換えます。
New-AzPolicyAssignment
のScope
パラメーターは、管理グループ、サブスクリプション、リソース グループ、または単一のリソースで機能します。 このパラメーターは、Get-AzResourceGroup
のResourceId
プロパティが返す絶対リソース パスを使用します。 各コンテナーのScope
のパターンは、次のとおりです。{rName}
、{rgName}
、{subId}
、{mgName}
をそれぞれ、リソース名、リソース グループ名、サブスクリプション ID、および管理グループ名に置き換えます。{rType}
は、リソースの "リソースの種類" (仮想マシンの場合はMicrosoft.Compute/virtualMachines
など) に置き換えられます。- リソース -
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
- リソース グループ -
/subscriptions/{subId}/resourceGroups/{rgName}
- サブスクリプション -
/subscriptions/{subId}
- 管理グループ -
/providers/Microsoft.Management/managementGroups/{mgName}
- リソース -
Resource Manager PowerShell モジュールを使用したリソース ポリシーの管理の詳細については、「Az.Resources」をご覧ください。
ARMClient を使用してポリシー定義を作成して割り当てる
次の手順に従って、ポリシー定義を作成します。
次の JSON スニペットをコピーして JSON ファイルを作成します。 このファイルは次の手順で呼び出します。
"properties": { "displayName": "Audit Storage Accounts Open to Public Networks", "policyType": "Custom", "mode": "Indexed", "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.", "parameters": {}, "policyRule": { "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction", "equals": "Allow" } ] }, "then": { "effect": "audit" } } }
次のいずれかの呼び出しを使用して、ポリシー定義を作成します。
# For defining a policy in a subscription armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file> # For defining a policy in a management group armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
前の
{subscriptionId}
をサブスクリプションの ID に置き換えるか、{managementGroupId}
を管理グループの ID に置き換えます。クエリの構造の詳細については、Azure Policy の定義 - 作成または更新に関するページ、および「ポリシー定義 - 管理グループでの作成または更新」を参照してください。
次の手順を使用してポリシー割り当てを作成し、リソース グループ レベルでポリシー定義を割り当てます。
次の JSON スニペットをコピーして、JSON ポリシー割り当てファイルを作成します。 <> 記号内の情報例を独自の値に置き換えます。
{ "properties": { "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.", "displayName": "Audit Storage Accounts Open to Public Networks Assignment", "parameters": {}, "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks", "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>" } }
次の呼び出しを使用して、ポリシー割り当てを作成します。
armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2021-09-01" @<path to Assignment JSON file>
<> 記号内の情報例を独自の値に置き換えます。
REST API への HTTP 呼び出しを行う方法の詳細については、Azure REST API のリソースに関するページを参照してください。
Azure CLI を使用してポリシー定義を作成して割り当てる
ポリシー定義を作成するには、次の手順を使用します。
次の JSON スニペットをコピーして、JSON ポリシー割り当てファイルを作成します。
{ "if": { "allOf": [ { "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction", "equals": "Allow" } ] }, "then": { "effect": "audit" } }
ポリシー定義の作成方法の詳細については、Azure Policy 定義の構造に関するページを参照してください。
次のコマンドを実行してポリシー定義を作成します。
az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
このコマンドは、Audit Storage Accounts Open to Public Networks という名前のポリシー定義を作成します。 使用できるその他のパラメーターの詳細については、「az policy definition create」を参照してください。
場所パラメーターを指定せずに
az policy definition creation
を呼び出すと、ポリシー定義は既定で、セッション コンテキストの選択されたサブスクリプションに保存されます。 定義を別の場所に保存するには、次のパラメーターを使用します。- subscription - 別のサブスクリプションに保存します。 サブスクリプション ID の GUID 値、またはサブスクリプション名の string 値を指定する必要があります。
- management-group - 管理グループに保存します。 string 値が必要です。
次のコマンドを使用して、ポリシー割り当てを作成します。 例にある山かっこ記号 (
< >
) 内の情報例を独自の値に置き換えます。az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
az policy assignment create
のscope
パラメーターは、管理グループ、サブスクリプション、リソース グループ、または単一のリソースで機能します。 このパラメーターには、完全なリソース パスを使用します。 各コンテナーのscope
のパターンは、次のとおりです。{rName}
、{rgName}
、{subId}
、{mgName}
をそれぞれ、リソース名、リソース グループ名、サブスクリプション ID、および管理グループ名に置き換えます。{rType}
は、リソースの "リソースの種類" (仮想マシンの場合はMicrosoft.Compute/virtualMachines
など) に置き換えられます。- リソース -
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
- リソース グループ -
/subscriptions/{subID}/resourceGroups/{rgName}
- サブスクリプション -
/subscriptions/{subID}
- 管理グループ -
/providers/Microsoft.Management/managementGroups/{mgName}
- リソース -
Azure Policy の定義 ID は、PowerShell を使用して次のコマンドを実行すると取得できます。
az policy definition show --name 'Audit Storage Accounts with Open Public Networks'
作成したポリシー定義のポリシー定義 ID は、次の例のようになります。
"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"
Azure CLI を使用してリソース ポリシーを管理する方法の詳細については、Azure CLI リソース ポリシーに関する記事を参照してください。
次のステップ
この記事のコマンドとクエリの詳細については、次の記事を参照してください。