サンプル: リソース グループへのタグと値の強制Sample - Enforce tag and its value on resource groups

このポリシーは、1 つのリソース グループに 1 つのタグと値を使用することが要件です。This policy requires a tag and value on a resource group. 必要なタグ名と値を指定します。You specify the required tag name and value.

このサンプル ポリシーは、次の方法でデプロイすることができます。You can deploy this sample policy using:

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

サンプル ポリシーSample policy

ポリシー定義Policy definition

次に示したのは、作成済みの完全な JSON ポリシー定義です。REST API や [Azure へのデプロイ] ボタンのほか、ポータルから手動で使用します。The complete composed JSON policy definition, used by the REST API, 'Deploy to Azure' buttons, and manually in the portal.

{
   "properties": {
      "displayName": "Enforce tag and its value on resource groups",
      "description": "Enforces a required tag and its value on resource groups.",
      "mode": "All",
      "parameters": {
         "tagName": {
            "type": "String",
            "metadata": {
               "description": "Name of the tag, such as costCenter"
            }
         },
         "tagValue": {
            "type": "String",
            "metadata": {
               "description": "Value of the tag, such as headquarter"
            }
         }
      },
      "policyRule": {
         "if": {
            "allOf": [
               {
                  "field": "type",
                  "equals": "Microsoft.Resources/subscriptions/resourceGroups"
               },
               {
                  "not": {
                     "field": "[concat('tags[',parameters('tagName'), ']')]",
                     "equals": "[parameters('tagValue')]"
                  }
               }
            ]
         },
         "then": {
            "effect": "deny"
         }
      }
   }
}

注意

ポリシーをポータルから手動で作成する場合は、上記の properties.parameters 部分と properties.policyRule 部分を使用してください。If manually creating a policy in the portal, use the properties.parameters and properties.policyRule portions of the above. 有効な JSON とするために、中かっこ {} で 2 つのセクションをラップしてください。Wrap the two sections together with curly braces {} to make it valid JSON.

ポリシー ルールPolicy rules

ポリシーのルールを定義する JSON は次のとおりです。Azure CLI と Azure PowerShell から使用します。The JSON defining the rules of the policy, used by Azure CLI and Azure PowerShell.

{
   "if": {
      "allOf": [
         {
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourceGroups"
         },
         {
            "not": {
               "field": "[concat('tags[',parameters('tagName'), ']')]",
               "equals": "[parameters('tagValue')]"
            }
         }
      ]
   },
   "then": {
      "effect": "deny"
   }
}

ポリシー パラメーターPolicy parameters

ポリシーのパラメーターを定義する JSON は次のとおりです。Azure CLI と Azure PowerShell から使用します。The JSON defining the policy parameters, used by Azure CLI and Azure PowerShell.

{
    "tagName": {
        "type": "String",
        "metadata": {
            "description": "Name of the tag, such as costCenter"
        }
    },
    "tagValue": {
        "type": "String",
        "metadata": {
            "description": "Value of the tag, such as headquarter"
        }
    }
}
NameName TypeType フィールドField 説明Description
tagNametagName StringString tagstags タグの名前 (例: costCenter)Name of the tag, such as costCenter
tagValuetagValue StringString tagstags タグの値 (例: headquarter)Value of the tag, such as headquarter

PowerShell または Azure CLI を使って割り当てを作成するときは、パラメーターの値を JSON として渡すことができます。JSON として渡すパラメーターは、文字列で渡すか、または -PolicyParameter (PowerShell) あるいは --params (Azure CLI) を使用してファイルで渡します。When creating an assignment via PowerShell or Azure CLI, the parameter values can be passed as JSON in either a string or via a file using -PolicyParameter (PowerShell) or --params (Azure CLI). PowerShell では、-PolicyParameterObject もサポートされます。この場合は、コマンドレットに Name/Value ハッシュ テーブルを渡す必要があります。Name にはパラメーターの名前を、Value には、割り当て時に渡す値の配列または単一値を指定します。PowerShell also supports -PolicyParameterObject which requires passing the cmdlet a Name/Value hashtable where Name is the parameter name and Value is the single value or array of values being passed during assignment.

この例のパラメーターでは、costCentertagNameheadquartertagValue が定義されています。In this example parameter, a tagName of costCenter and tagValue of headquarter is defined.

{
    "tagName": {
        "value": "costCenter"
    },
    "tagValue": {
        "value": "headquarter"
    }
}

Azure ポータルAzure portal

ポリシーのサンプルを Azure にデプロイする ポリシーのサンプルを Azure Gov にデプロイするDeploy the Policy sample to Azure Deploy the Policy sample to Azure Gov

Azure PowerShellAzure PowerShell

このサンプルには、Azure PowerShell が必要です。This sample requires Azure PowerShell. バージョンを確認するには、Get-Module -ListAvailable Az を実行します。Run Get-Module -ListAvailable Az to find the version. インストールまたはアップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。If you need to install or upgrade, see Install Azure PowerShell module.

Connect-AzAccount コマンドレットを実行して Azure に接続します。Run the Connect-AzAccount cmdlet to connect to Azure.

Azure PowerShell でのデプロイDeploy with Azure PowerShell

# Create the Policy Definition (Subscription scope)
$definition = New-AzPolicyDefinition -Name 'enforce-resourceGroup-tags' -DisplayName 'Enforce tag and its value on resource groups' -description 'Enforces a required tag and its value on resource groups.' -Policy 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/ResourceGroup/enforce-resourceGroup-tags/azurepolicy.rules.json' -Parameter 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/ResourceGroup/enforce-resourceGroup-tags/azurepolicy.parameters.json' -Mode All

# Set the scope to a resource group; may also be a resource, subscription, or management group
$scope = Get-AzResourceGroup -Name 'YourResourceGroup'

# Set the Policy Parameter (JSON format)
$policyParam = '{ "tagName": { "value": "costCenter" }, "tagValue": { "value": "headquarter" } }'

# Create the Policy Assignment
$assignment = New-AzPolicyAssignment -Name 'enforce-resourceGroup-tags-assignment' -Scope $scope.ResourceId -PolicyDefinition $definition -PolicyParameter $policyParam

Azure PowerShell での削除Remove with Azure PowerShell

以前の割り当てと定義を削除するには、次のコマンドを実行します。Run the following commands to remove the previous assignment and definition:

# Remove the Policy Assignment
Remove-AzPolicyAssignment -Id $assignment.ResourceId

# Remove the Policy Definition
Remove-AzPolicyDefinition -Id $definition.ResourceId

Azure PowerShell の説明Azure PowerShell explanation

デプロイおよび削除のスクリプトには、次のコマンドが使用されています。The deploy and remove scripts use the following commands. 以下の表の各コマンドは、それぞれのドキュメントにリンクされています。Each command in the following table links to command-specific documentation:

commandCommand メモNotes
New-AzPolicyDefinitionNew-AzPolicyDefinition 新しい Azure Policy の定義を作成します。Creates a new Azure Policy definition.
Get-AzResourceGroupGet-AzResourceGroup 単一のリソース グループを取得します。Gets a single resource group.
New-AzPolicyAssignmentNew-AzPolicyAssignment 新しい Azure Policy の割り当てを作成します。Creates a new Azure Policy assignment. この例では定義を渡していますが、イニシアチブを渡すこともできます。In this example, we provide it a definition, but it can also take an initiative.
Remove-AzPolicyAssignmentRemove-AzPolicyAssignment 既存の Azure Policy の割り当てを削除します。Removes an existing Azure Policy assignment.
Remove-AzPolicyDefinitionRemove-AzPolicyDefinition 既存の Azure Policy の定義を削除します。Removes an existing Azure Policy definition.

Azure CLIAzure CLI

このサンプルを実行するには、最新バージョンの Azure CLI をインストールします。To run this sample, install the latest version of the Azure CLI. 開始するには、az login を実行して、Azure との接続を作成します。To start, run az login to create a connection with Azure.

Azure CLI のサンプルは、bash シェル用に記述されています。Samples for the Azure CLI are written for the bash shell. このサンプルを Windows PowerShell またはコマンド プロンプトで実行するには、スクリプトの要素を変更する必要があります。To run this sample in Windows PowerShell or Command Prompt, you may need to change elements of the script.

Azure CLI でのデプロイDeploy with Azure CLI

# Create the Policy Definition (Subscription scope)
definition=$(az policy definition create --name 'enforce-resourceGroup-tags' --display-name 'Enforce tag and its value on resource groups' --description 'Enforces a required tag and its value on resource groups.' --rules 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/ResourceGroup/enforce-resourceGroup-tags/azurepolicy.rules.json' --params 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/ResourceGroup/enforce-resourceGroup-tags/azurepolicy.parameters.json' --mode All)

# Set the scope to a resource group; may also be a resource, subscription, or management group
scope=$(az group show --name 'YourResourceGroup')

# Set the Policy Parameter (JSON format)
policyParam='{ "tagName": { "value": "costCenter" }, "tagValue": { "value": "headquarter" } }'

# Create the Policy Assignment
assignment=$(
az policy assignment create --name 'enforce-resourceGroup-tags-assignment' --display-name 'Enforce tag and its value on resource groups'  --scope `echo $scope | jq '.id' -r` --policy `echo $definition | jq '.name' -r` --params "$policyparam")

Azure CLI での削除Remove with Azure CLI

以前の割り当てと定義を削除するには、次のコマンドを実行します。Run the following commands to remove the previous assignment and definition:

# Remove the Policy Assignment
az policy assignment delete --name `echo $assignment | jq '.name' -r`

# Remove the Policy Definition
az policy definition delete --name `echo $definition | jq '.name' -r`

Azure CLI の説明Azure CLI explanation

commandCommand メモNotes
az policy definition createaz policy definition create 新しい Azure Policy の定義を作成します。Creates a new Azure Policy definition.
az group showaz group show 単一のリソース グループを取得します。Gets a single resource group.
az policy assignment createaz policy assignment create 新しい Azure Policy の割り当てを作成します。Creates a new Azure Policy assignment. この例では定義を渡していますが、イニシアチブを渡すこともできます。In this example, we provide it a definition, but it can also take an initiative.
az policy assignment deleteaz policy assignment delete 既存の Azure Policy の割り当てを削除します。Removes an existing Azure Policy assignment.
az policy definition deleteaz policy definition delete 既存の Azure Policy の定義を削除します。Removes an existing Azure Policy definition.

Resource Manager REST API の対話操作には、ARMClient や PowerShell などいくつかのツールを使用できます。There are several tools that can be used to interact with the Resource Manager REST API such as ARMClient or PowerShell. PowerShell から REST API を呼び出す例は、ポリシーの定義の構造に関するページの「エイリアス」セクションでご覧いただけます。An example of calling REST API from PowerShell can be found in the Aliases section of Policy definition structure.

REST APIREST API

REST API でのデプロイDeploy with REST API

  • ポリシーの定義を作成します (サブスクリプション スコープ)。Create the Policy Definition (Subscription scope). 要求本文には、ポリシー定義の JSON を使用します。Use the policy definition JSON for the Request Body.

    PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/enforce-resourceGroup-tags?api-version=2016-12-01
    
  • ポリシーの割り当てを作成します (リソース グループ スコープ)。Create the Policy Assignment (Resource Group scope)

    PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/YourResourceGroup/providers/Microsoft.Authorization/policyAssignments/enforce-resourceGroup-tags-assignment?api-version=2017-06-01-preview
    

    要求本文には、次の JSON の例を使用してください。Use the following JSON example for the Request Body:

  {
      "properties": {
          "displayName": "Enforce tag and its value Assignment",
          "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/enforce-resourceGroup-tags",
          "parameters": {
              "tagName": {
                  "value": "costCenter"
              },
              "tagValue": {
                  "value": "headquarter"
              }
          }
      }
  }

REST API での削除Remove with REST API

  • ポリシーの割り当てを削除するRemove the Policy Assignment

    DELETE https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/enforce-resourceGroup-tags-assignment?api-version=2017-06-01-preview
    
  • ポリシーの定義を削除するRemove the Policy Definition

    DELETE https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/enforce-resourceGroup-tags?api-version=2016-12-01
    

REST API の説明REST API explanation

ServiceService GroupGroup OperationOperation メモNotes
リソース管理Resource Management ポリシーの定義Policy Definitions 作成Create 新しい Azure Policy 定義をサブスクリプションで作成します。Creates a new Azure Policy definition at a subscription. 代替手段:管理グループで作成するAlternative: Create at management group
リソース管理Resource Management ポリシーの割り当てPolicy Assignments 作成Create 新しい Azure Policy の割り当てを作成します。Creates a new Azure Policy assignment. この例では定義を渡していますが、イニシアチブを渡すこともできます。In this example, we provide it a definition, but it can also take an initiative.
リソース管理Resource Management ポリシーの割り当てPolicy Assignments 削除Delete 既存の Azure Policy の割り当てを削除します。Removes an existing Azure Policy assignment.
リソース管理Resource Management ポリシーの定義Policy Definitions 削除Delete 既存の Azure Policy の定義を削除します。Removes an existing Azure Policy definition. 代替手段:管理グループで削除するAlternative: Delete at management group

次の手順Next steps