プログラムによるポリシーの作成Programmatically create policies

この記事では、ポリシーをプログラムで作成して管理する方法について説明します。This article walks you through programmatically creating and managing policies. Azure Policy の定義によって、さまざまなルールや効果がリソースに適用されます。Azure Policy definitions enforce different rules and effects over your resources. 適用することで、リソースは会社の標準やサービス レベル アグリーメントに準拠した状態で維持されます。Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

コンプライアンスについては、「コンプライアンス データの取得」を参照してください。For information about compliance, see getting compliance data.

前提条件Prerequisites

開始する前に、次の前提条件が満たされていることを確認します。Before you begin, make sure that the following prerequisites are met:

  1. ARMClient をまだインストールしていない場合はインストールします。If you haven't already, install the ARMClient. Azure Resource Manager ベースの API に HTTP 要求を送信するツールです。It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Azure PowerShell モジュールを最新バージョンに更新します。Update your Azure PowerShell module to the latest version. 詳細については、Azure PowerShell モジュールのインストールに関するページを参照してください。See Install Azure PowerShell module for detailed information. 最新バージョンについて詳しくは、Azure PowerShell をご覧ください。For more information about the latest version, see Azure PowerShell.

  3. Azure PowerShell を使用して Azure Policy Insights リソース プロバイダーを登録し、サブスクリプションがリソース プロバイダーで確実に動作することを検証します。Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. リソース プロバイダーを登録するには、リソース プロバイダーのアクションの登録操作を実行するためのアクセス許可が必要です。To register a resource provider, you must have permission to run the register action operation for the resource provider. この操作は、共同作成者ロールと所有者ロールに含まれます。This operation is included in the Contributor and Owner roles. リソース プロバイダーを登録する以下のコマンドを実行します。Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    リソース プロバイダーの登録と表示の詳細については、「リソース プロバイダーと種類」を参照してください。For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Azure CLI をまだインストールしていない場合はインストールします。If you haven't already, install Azure CLI. 最新バージョンは、「Windows での Azure CLI のインストール」で入手できます。You can get the latest version at Install Azure CLI on Windows.

ポリシー定義を作成して割り当てるCreate and assign a policy definition

リソースの可視性を向上させるには、まず、ポリシーを作成してリソースに割り当てます。The first step toward better visibility of your resources is to create and assign policies over your resources. 次の手順では、ポリシーをプログラムで作成して割り当てる方法について説明します。The next step is to learn how to programmatically create and assign a policy. このサンプル ポリシーは、すべてのパブリック ネットワークに開かれているストレージ アカウントを、PowerShell、Azure CLI、および HTTP 要求を使用して監査します。The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

PowerShell でポリシー定義を作成して割り当てるCreate and assign a policy definition with PowerShell

  1. 次の JSON スニペットを使用して、AuditStorageAccounts.jsonという名前の JSON ファイルを作成します。Use the following JSON snippet to create a JSON file with the name AuditStorageAccounts.json.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    ポリシー定義の作成方法の詳細については、「Azure Policy の定義の構造」を参照してください。For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. AuditStorageAccounts.json ファイルを使用し、次のコマンドを実行してポリシー定義を作成します。Run the following command to create a policy definition using the AuditStorageAccounts.json file.

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    このコマンドは、Audit Storage Accounts Open to Public Networks という名前のポリシー定義を作成します。The command creates a policy definition named Audit Storage Accounts Open to Public Networks. 使用できるその他のパラメーターの詳細については、「New-AzPolicyDefinition」を参照してください。For more information about other parameters that you can use, see New-AzPolicyDefinition.

    場所のパラメーターを指定せずに呼び出す場合、New-AzPolicyDefinition は、既定により、セッション コンテキストの選択されたサブスクリプションにポリシー定義を保存することになります。When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. 定義を別の場所に保存するには、次のパラメーターを使用します。To save the definition to a different location, use the following parameters:

    • SubscriptionId -別のサブスクリプションに保存します。SubscriptionId - Save to a different subscription. GUID 値が必要です。Requires a GUID value.
    • ManagementGroupName -管理グループに保存します。ManagementGroupName - Save to a management group. string 値が必要です。Requires a string value.
  3. ポリシー定義を作成したら、次のコマンドを実行してポリシー割り当てを作成できます。After you create your policy definition, you can create a policy assignment by running the following commands:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    ContosoRG を対象とするリソース グループの名前に置き換えます。Replace ContosoRG with the name of your intended resource group.

    New-AzPolicyAssignmentScope パラメーターは、管理グループ、サブスクリプション、リソース グループ、または単一のリソースに使用できます。The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. このパラメーターは、Get-AzResourceGroupResourceId プロパティが返す完全なリソース パスを使用します。The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. 各コンテナーの Scope のパターンは、次のとおりです。The pattern for Scope for each container is as follows. {rName}{rgName}{subId}、および {mgName} を、それぞれリソース名、リソース グループ名、サブスクリプション ID、および管理グループ名と置き換えます。Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} は、そのリソースのリソースの種類 (VM の場合は Microsoft.Compute/virtualMachines など) に置き換えられます。{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • リソース - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • リソース グループ - /subscriptions/{subId}/resourceGroups/{rgName}Resource group - /subscriptions/{subId}/resourceGroups/{rgName}
    • サブスクリプション - /subscriptions/{subId}/Subscription - /subscriptions/{subId}/
    • 管理グループ - /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Azure Resource Manager PowerShell モジュールを使用したリソース ポリシーの管理の詳細については、「Az.Resources」をご覧ください。For more information about managing resource policies using the Azure Resource Manager PowerShell module, see Az.Resources.

ARMClient を使用してポリシー定義を作成して割り当てるCreate and assign a policy definition using ARMClient

次の手順に従って、ポリシー定義を作成します。Use the following procedure to create a policy definition.

  1. 次の JSON スニペットをコピーして JSON ファイルを作成します。Copy the following JSON snippet to create a JSON file. このファイルは次の手順で呼び出します。You'll call the file in the next step.

    "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"
            }
        }
    }
    
  2. 次の呼び出しを使用して、ポリシー定義を作成します。Create the policy definition using one of the following calls:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2016-12-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=2016-12-01" @<path to policy definition JSON file>
    

    前の {subscriptionId} をサブスクリプションの ID と置き換えるか、{managementGroupId} を管理部グループの ID と置き換えます。Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    クエリの構造の詳細については、「Azure Policy Definitions – Create or Update (Azure Policy の定義 - 作成または更新)」および「Policy Definitions – Create or Update At Management Group (ポリシー定義 - 管理グループでの作成または更新)」をご覧ください。For more information about the structure of the query, see Azure Policy Definitions – Create or Update and Policy Definitions – Create or Update At Management Group

次の手順を使用してポリシー割り当てを作成し、ポリシー定義をリソース グループ レベルに割り当てます。Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. 次の JSON スニペットをコピーして、ポリシー割り当ての JSON ファイルを作成します。Copy the following JSON snippet to create a JSON policy assignment file. 例の <> 記号内の情報を独自の値に置き換えます。Replace example information in <> symbols with your own values.

    {
        "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>"
        }
    }
    
  2. 次の呼び出しを使用して、ポリシー割り当てを作成します。Create the policy assignment using the following call:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2017-06-01-preview" @<path to Assignment JSON file>
    

    例の <> 記号内の情報を独自の値に置き換えます。Replace example information in <> symbols with your own values.

    REST API への HTTP 呼び出しを作成する方法については、Azure REST API のリソースに関するページを参照してください。For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Azure CLI でポリシー定義を作成して割り当てるCreate and assign a policy definition with Azure CLI

次の手順に従って、ポリシー定義を作成します。To create a policy definition, use the following procedure:

  1. 次の JSON スニペットをコピーして、ポリシー割り当ての JSON ファイルを作成します。Copy the following JSON snippet to create a JSON policy assignment file.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    ポリシー定義の作成方法の詳細については、「Azure Policy の定義の構造」を参照してください。For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. 次のコマンドを実行してポリシー定義を作成します。Run the following command to create a policy definition:

    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 という名前のポリシー定義を作成します。The command creates a policy definition named Audit Storage Accounts Open to Public Networks. 使用できるその他のパラメーターの詳細については、「az policy definition create」を参照してください。For more information about other parameters that you can use, see az policy definition create.

    場所のパラメーターを指定せずに呼び出す場合、az policy definition creation は、既定により、セッション コンテキストの選択されたサブスクリプションにポリシー定義を保存することになります。When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. 定義を別の場所に保存するには、次のパラメーターを使用します。To save the definition to a different location, use the following parameters:

    • --subscription - 別のサブスクリプションに保存します。--subscription - Save to a different subscription. サブスクリプション ID の GUID 値、またはサブスクリプション名の string 値を指定する必要があります。Requires a GUID value for the subscription ID or a string value for the subscription name.
    • --management-group - 管理グループに保存します。--management-group - Save to a management group. string 値が必要です。Requires a string value.
  3. 次のコマンドを使用して、ポリシー割り当てを作成します。Use the following command to create a policy assignment. 例の <> 記号内の情報を独自の値に置き換えます。Replace example information in <> symbols with your own values.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    az policy assignment create- scope パラメーターは、管理グループ、サブスクリプション、リソース グループ、または単一のリソースに使用できます。The --scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. このパラメーターは完全なリソース パスを使用します。The parameter uses a full resource path. 各コンテナーの --scope のパターンは、次のとおりです。The pattern for --scope for each container is as follows. {rName}{rgName}{subId}、および {mgName} を、それぞれリソース名、リソース グループ名、サブスクリプション ID、および管理グループ名と置き換えます。Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} は、そのリソースのリソースの種類 (VM の場合は Microsoft.Compute/virtualMachines など) に置き換えられます。{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • リソース - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • リソース グループ - /subscriptions/{subID}/resourceGroups/{rgName}Resource group - /subscriptions/{subID}/resourceGroups/{rgName}
    • サブスクリプション - /subscriptions/{subID}Subscription - /subscriptions/{subID}
    • 管理グループ - /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Azure Policy の定義 ID は、PowerShell で次のコマンドを実行して取得できます。You can get the Azure Policy Definition ID by using PowerShell with the following command:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

作成したポリシー定義のポリシー定義 ID は、次の例のようになります。The policy definition ID for the policy definition that you created should resemble the following example:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Azure CLI を使用してリソース ポリシーを管理する方法の詳細については、Azure CLI リソース ポリシーに関する記事をご覧ください。For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

次の手順Next steps

この記事のコマンドとクエリの詳細については、次の記事をご覧ください。Review the following articles for more information about the commands and queries in this article.