次の方法で共有


プログラムでポリシーを作成する

この記事では、プログラムでポリシーを作成および管理する方法について説明します。 Azure Policy の定義によって、さまざまなルールや効果がリソースに適用されます。 適用することで、リソースは会社の標準やサービス レベル アグリーメントに準拠した状態で維持されます。

コンプライアンスについては、コンプライアンス データの取得に関するページを参照してください。

前提条件

開始する前に、次の前提条件が満たされていることを確認します。

  1. ARMClient をまだインストールしていない場合はインストールします。 これは、Azure Resource Manager ベースの API に HTTP 要求を送信するツールです。

  2. Azure PowerShell モジュールを最新バージョンに更新します。 詳細については、Azure PowerShell モジュールのインストールに関するページを参照してください。 最新バージョンの詳細については、Azure PowerShell を参照してください。

  3. Azure PowerShell を使用して Azure Policy Insights リソース プロバイダーを登録し、サブスクリプションがリソース プロバイダーと連携していることを検証します。 リソース プロバイダーを登録するには、リソース プロバイダーの登録アクション操作を実行するためのアクセス許可が必要です。 この操作は、共同作成者および所有者のロールに含まれます。 次のコマンドを実行して、リソース プロバイダーを登録します。

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    リソース プロバイダーの登録と表示の詳細については、「リソース プロバイダーと種類」を参照してください。

  4. Azure CLI をまだインストールしていない場合はインストールします。 最新バージョンは、「Windows での Azure CLI のインストール」で入手できます。

ポリシー定義を作成して割り当てる

リソースの可視性を向上するための最初の手順は、リソースに対するポリシーを作成して割り当てることです。 次の手順では、プログラムでポリシーを作成して割り当てる方法について説明します。 このポリシー例は、PowerShell、Azure CLI、HTTP 要求を使用して、すべてのパブリック ネットワークに開かれているストレージ アカウントを監査します。

PowerShell を使用してポリシー定義を作成して割り当てる

  1. 次の 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 定義の構造に関するページを参照してください。

  2. 次のコマンドを実行して、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 値が必要です。
  3. ポリシー定義を作成したら、次のコマンドを実行してポリシー割り当てを作成できます。

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

    ContosoRG を、対象とするリソース グループの名前に置き換えます。

    New-AzPolicyAssignmentScope パラメーターは、管理グループ、サブスクリプション、リソース グループ、または単一のリソースで機能します。 このパラメーターは、Get-AzResourceGroupResourceId プロパティが返す絶対リソース パスを使用します。 各コンテナーの 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 を使用してポリシー定義を作成して割り当てる

次の手順に従って、ポリシー定義を作成します。

  1. 次の 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"
        }
      }
    }
    
  2. 次のいずれかの呼び出しを使用して、ポリシー定義を作成します。

    # 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 の定義 - 作成または更新に関するページ、および「ポリシー定義 - 管理グループでの作成または更新」を参照してください。

次の手順を使用してポリシー割り当てを作成し、リソース グループ レベルでポリシー定義を割り当てます。

  1. 次の 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>"
      }
    }
    
  2. 次の呼び出しを使用して、ポリシー割り当てを作成します。

    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 を使用してポリシー定義を作成して割り当てる

ポリシー定義を作成するには、次の手順を使用します。

  1. 次の JSON スニペットをコピーして、JSON ポリシー割り当てファイルを作成します。

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

    ポリシー定義の作成方法の詳細については、Azure Policy 定義の構造に関するページを参照してください。

  2. 次のコマンドを実行してポリシー定義を作成します。

    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 値が必要です。
  3. 次のコマンドを使用して、ポリシー割り当てを作成します。 例にある山かっこ記号 (< >) 内の情報例を独自の値に置き換えます。

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

    az policy assignment createscope パラメーターは、管理グループ、サブスクリプション、リソース グループ、または単一のリソースで機能します。 このパラメーターには、完全なリソース パスを使用します。 各コンテナーの 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 リソース ポリシーに関する記事を参照してください。

次のステップ

この記事のコマンドとクエリの詳細については、次の記事を参照してください。