Azure Policy の効果についてUnderstand Azure Policy effects

Azure Policy 内の各ポリシー定義には単一の効果があります。Each policy definition in Azure Policy has a single effect. その効果によって、ポリシー規則が一致すると評価されたときの動作が決まります。That effect determines what happens when the policy rule is evaluated to match. 効果の動作は、対象 (新しいリソース、更新されたリソース、または既存のリソース) によって異なります。The effects behave differently if they are for a new resource, an updated resource, or an existing resource.

現在、ポリシー定義では次の効果がサポートされています。These effects are currently supported in a policy definition:

評価の順序Order of evaluation

Azure Resource Manager を通したリソースの作成または更新の要求は、まず Azure Policy によって評価されます。Requests to create or update a resource through Azure Resource Manager are evaluated by Azure Policy first. Azure Policy では、リソースに適用されるすべての割り当ての一覧が作成された後、各定義に対してリソースが評価されます。Azure Policy creates a list of all assignments that apply to the resource and then evaluates the resource against each definition. Azure Policy では、適切なリソース プロバイダーに要求が渡される前に、さまざまな効果が処理されます。Azure Policy processes several of the effects before handing the request to the appropriate Resource Provider. それによって、リソースが意図された Azure Policy のガバナンス コントロールを満たさない場合に、リソース プロバイダーによって不要な処理が行われるのを防止します。Doing so prevents unnecessary processing by a Resource Provider when a resource doesn't meet the designed governance controls of Azure Policy.

  • Disabled は、ポリシー規則を評価する必要があるかどうかを判断するために、最初に確認されます。Disabled is checked first to determine if the policy rule should be evaluated.
  • AppendModify は、その後で評価されます。Append and Modify are then evaluated. これらいずれかによって要求が変更される可能性があるため、その変更によって、Audit または Deny の効果がトリガーされるのが止められる場合があります。Since either could alter the request, a change made may prevent an audit or deny effect from triggering.
  • 次に、Deny が評価されます。Deny is then evaluated. Audit の前に Deny を評価することによって、不要なリソースの二重のログ記録が回避されます。By evaluating deny before audit, double logging of an undesired resource is prevented.
  • 次に、要求がリソース プロバイダーに移動する前に Audit が評価されます。Audit is then evaluated before the request going to the Resource Provider.

リソース プロバイダーによって成功コードが返された後、AuditIfNotExistsDeployIfNotExists が評価され、追加のコンプライアンスのログ記録またはアクションが必要かどうかが判断されます。After the Resource Provider returns a success code, AuditIfNotExists and DeployIfNotExists evaluate to determine if additional compliance logging or action is required.

現在のところ、EnforceOPAConstraint または EnforceRegoPolicy 効果の評価順序はありません。There currently isn't any order of evaluation for the EnforceOPAConstraint or EnforceRegoPolicy effects.

無効Disabled

この効果は、状況をテストする場合や、効果がポリシー定義によってパラメーター化されている場合に役立ちます。This effect is useful for testing situations or for when the policy definition has parameterized the effect. この柔軟性により、ポリシーのすべての割り当てを無効にするのではなく、単一の割り当てを無効にすることができます。This flexibility makes it possible to disable a single assignment instead of disabling all of that policy's assignments.

無効にした効果の代替は、ポリシー割り当てに設定されている enforcementMode です。An alternative to the Disabled effect is enforcementMode which is set on the policy assignment. enforcementMode[無効] の場合、リソースは引き続き評価されます。When enforcementMode is Disabled, resources are still evaluated. アクティビティ ログなどのログ記録や、ポリシーの効果はありません。Logging, such as Activity logs, and the policy effect don't occur. 詳細については、ポリシー割り当て - 強制モードに関するページを参照してください。For more information, see policy assignment - enforcement mode.

AppendAppend

Append は、作成中または更新中に要求されたリソースにフィールドを追加するために使用します。Append is used to add additional fields to the requested resource during creation or update. 一般的な例としては、ストレージ リソースに対して許可される IP の指定が挙げられます。A common example is specifying allowed IPs for a storage resource.

重要

Append は、タグ以外のプロパティで使用することを目的としています。Append is intended for use with non-tag properties. Append では、作成要求または更新要求時にリソースにタグを追加することができますが、タグに対しては Modify 効果を使用することをお勧めします。While Append can add tags to a resource during a create or update request, it's recommended to use the Modify effect for tags instead.

Append の評価Append evaluation

リソースを作成中または更新中に、リソース プロバイダーによって要求が処理される前に Append による評価が行われます。Append evaluates before the request gets processed by a Resource Provider during the creation or updating of a resource. Append では、ポリシー規則の if 条件が満たされた場合、リソースにフィールドが追加されます。Append adds fields to the resource when the if condition of the policy rule is met. Append 効果によって元の要求の値が別の値でオーバーライドされる場合、Append は Deny 効果として機能し、要求は拒否されます。If the append effect would override a value in the original request with a different value, then it acts as a deny effect and rejects the request. 新しい値を既存の配列に追加するには、 [*] バージョンの別名を使用します。To append a new value to an existing array, use the [*] version of the alias.

Append 効果を使用するポリシー定義が評価サイクルの一部として実行される場合、既存のリソースに対する変更は行われません。When a policy definition using the append effect is run as part of an evaluation cycle, it doesn't make changes to resources that already exist. 代わりに、if 条件を満たすリソースが非準拠とマークされます。Instead, it marks any resource that meets the if condition as non-compliant.

Append のプロパティAppend properties

Append 効果には必須の details 配列が 1 つだけあります。An append effect only has a details array, which is required. details は配列なので、1 つまたは複数の field/value のペアをとることができます。As details is an array, it can take either a single field/value pair or multiples. 許容可能なフィールドの一覧については、定義の構造を参照してください。Refer to definition structure for the list of acceptable fields.

Append の例Append examples

例 1:非 [*] 別名と配列 value を使用してストレージ アカウントに IP 規則を設定する単一の field/value のペア。Example 1: Single field/value pair using a non-[*] alias with an array value to set IP rules on a storage account. [*] 別名が配列の場合、この効果により、value が配列全体として追加されます。When the non-[*] alias is an array, the effect appends the value as the entire array. 配列が既に存在する場合は、競合から拒否イベントが発生します。If the array already exists, a deny event occurs from the conflict.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
        "value": [{
            "action": "Allow",
            "value": "134.5.0.0/21"
        }]
    }]
}

例 2: [*] 別名と配列 value を使用してストレージ アカウントに IP 規則を設定する単一の field/value のペア。Example 2: Single field/value pair using an [*] alias with an array value to set IP rules on a storage account. [*] 別名を使用することで、この効果により、value が事前に存在している可能性のある配列に追加されます。By using the [*] alias, the effect appends the value to a potentially pre-existing array. 配列まだ存在しない場合は、配列が作成されます。If the array doesn't exist yet, it will be created.

"then": {
    "effect": "append",
    "details": [{
        "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]",
        "value": {
            "value": "40.40.40.40",
            "action": "Allow"
        }
    }]
}

変更Modify

Modify は、作成時または更新時にリソースのタグを追加、更新、または削除するために使用されます。Modify is used to add, update, or remove tags on a resource during creation or update. 一般的な例としては、コスト センターなどのリソースでタグを更新することが挙げられます。A common example is updating tags on resources such as costCenter. ターゲット リソースがリソース グループでない限り、変更ポリシーでは常に mode[インデックス設定済み] に設定されている必要があります。A Modify policy should always have mode set to Indexed unless the target resource is a resource group. 準拠していない既存のリソースは、修復タスクで修復できます。Existing non-compliant resources can be remediated with a remediation task. 1 つの Modify 規則には、任意の数の操作を含めることができます。A single Modify rule can have any number of operations.

重要

Modify は現在、タグでのみ使用されます。Modify is currently only for use with tags. タグを管理している場合は、Append ではなく Modify を使用することをお勧めします。Modify では、追加の操作タイプが使用でき、既存のリソースを修復する機能が提供されます。If you are managing tags, it's recommended to use Modify instead of Append as Modify provides additional operation types and the ability to remediate existing resources. ただし、マネージド ID を作成できない場合は、Append を追加することをお勧めします。However, Append is recommended if you aren't able to create a managed identity.

Modify の評価Modify evaluation

リソースを作成中または更新中に、リソース プロバイダーによって要求が処理される前に Modify による評価が行われます。Modify evaluates before the request gets processed by a Resource Provider during the creation or updating of a resource. Modify では、ポリシー規則の if 条件が満たされた場合、リソースのフィールドが追加または更新されます。Modify adds or updates tags on a resource when the if condition of the policy rule is met.

Modify 効果を使用するポリシー定義が評価サイクルの一部として実行される場合、既存のリソースに対する変更は行われません。When a policy definition using the Modify effect is run as part of an evaluation cycle, it doesn't make changes to resources that already exist. 代わりに、if 条件を満たすリソースが非準拠とマークされます。Instead, it marks any resource that meets the if condition as non-compliant.

Modify のプロパティModify properties

Modify 効果の details プロパティには、修復に必要なアクセス許可を定義するすべてのサブプロパティと、タグ値の追加、更新、または削除に使用する operations が含まれます。The details property of the Modify effect has all the subproperties that define the permissions needed for remediation and the operations used to add, update, or remove tag values.

  • roleDefinitionIds [必須]roleDefinitionIds [required]
    • このプロパティには、サブスクリプションでアクセス可能なロールベースのアクセス制御ロール ID と一致する文字列の配列を含める必要があります。This property must include an array of strings that match role-based access control role ID accessible by the subscription. 詳細については、修復 - ポリシー定義を構成するを参照してください。For more information, see remediation - configure policy definition.
    • 定義されたロールには、Contributor ロールに与えられているすべての操作が含まれている必要があります。The role defined must include all operations granted to the Contributor role.
  • operations [必須]operations [required]
    • 一致するリソースで完了されるすべてのタグ操作の配列です。An array of all tag operations to be completed on matching resources.
    • プロパティ:Properties:
      • operation [必須]operation [required]
        • 一致するリソースに対して実行するアクションを定義します。Defines what action to take on a matching resource. オプションは、addOrReplaceAddRemove です。Options are: addOrReplace, Add, Remove. Add は、Append 効果に似た動作をします。Add behaves similar to the Append effect.
      • field [必須]field [required]
        • 追加、置換、または削除するタグです。The tag to add, replace, or remove. タグ名は、他の fields と同じ名前付け規則に従う必要があります。Tag names must adhere to the same naming convention for other fields.
      • value (オプション)value (optional)
        • タグに設定する値です。The value to set the tag to.
        • このプロパティは、operationaddOrReplace または Add の場合に必要です。This property is required if operation is addOrReplace or Add.

Modify の操作Modify operations

operations プロパティ配列を使用すると、1 つのポリシー定義から複数のタグを異なる方法で変更できます。The operations property array makes it possible to alter several tags in different ways from a single policy definition. 各操作は operationfield、および value の各プロパティで構成されます。Each operation is made up of operation, field, and value properties. operation では、修復タスクがタグに対して行う処理を決定し、field では、どのタグを変更するかを決定し、value では、そのタグの新しい設定を定義します。Operation determines what the remediation task does to the tags, field determines which tag is altered, and value defines the new setting for that tag. 下記の例では、以下のタグ変更が実行されます。The example below makes the following tag changes:

  • environment タグを "Test" に設定する (異なる値で既に存在している場合でも)。Sets the environment tag to "Test", even if it already exists with a different value.
  • タグ TempResource を削除する。Removes the tag TempResource.
  • Dept タグを、ポリシーの割り当てで構成されたポリシー パラメーター DeptName に設定する。Sets the Dept tag to the policy parameter DeptName configured on the policy assignment.
"details": {
    ...
    "operations": [
        {
            "operation": "addOrReplace",
            "field": "tags['environment']",
            "value": "Test"
        },
        {
            "operation": "Remove",
            "field": "tags['TempResource']",
        },
        {
            "operation": "addOrReplace",
            "field": "tags['Dept']",
            "value": "[parameters('DeptName')]"
        }
    ]
}

operation プロパティには、次のオプションが用意されています。The operation property has the following options:

操作Operation 説明Description
addOrReplaceaddOrReplace 定義済みのタグと値をリソースに追加します (タグに別の値が既に存在する場合でも)。Adds the defined tag and value to the resource, even if the tag already exists with a different value.
追加Add 定義済みのタグと値をリソースに追加します。Adds the defined tag and value to the resource.
[削除]Remove 定義済みのタグをリソースから削除します。Removes the defined tag from the resource.

Modify の例Modify examples

例 1:environment タグを追加し、既存の environment タグを "Test" に置き換えます。Example 1: Add the environment tag and replace existing environment tags with "Test":

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "operations": [
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "Test"
            }
        ]
    }
}

例 2:env タグを削除し、environment タグを追加するか、既存の environment タグをパラメーター化された値に置き換えます。Example 2: Remove the env tag and add the environment tag or replace existing environment tags with a parameterized value:

"then": {
    "effect": "modify",
    "details": {
        "roleDefinitionIds": [
            "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
        ],
        "operations": [
            {
                "operation": "Remove",
                "field": "tags['env']"
            },
            {
                "operation": "addOrReplace",
                "field": "tags['environment']",
                "value": "[parameters('tagValue')]"
            }
        ]
    }
}

拒否Deny

Deny は、ポリシーを通して定義された基準に一致していないために失敗するリソース要求を防ぐために使用されます。Deny is used to prevent a resource request that doesn't match defined standards through a policy definition and fails the request.

Deny の評価Deny evaluation

照合されたリソースを作成または更新する場合、Deny は、リソース プロバイダーに要求が送信されないようにします。When creating or updating a matched resource, deny prevents the request before being sent to the Resource Provider. 要求は 403 (Forbidden) として返されます。The request is returned as a 403 (Forbidden). ポータルでは、ポリシーの割り当てによって阻止されたデプロイの状態として、この Forbidden を表示できます。In the portal, the Forbidden can be viewed as a status on the deployment that was prevented by the policy assignment.

既存のリソースの評価では、Deny ポリシー定義と一致するリソースは、非準拠としてマークされます。During evaluation of existing resources, resources that match a deny policy definition are marked as non-compliant.

Deny のプロパティDeny properties

Deny 効果には、ポリシー定義の then 条件で使用するためのその他のプロパティはありません。The deny effect doesn't have any additional properties for use in the then condition of the policy definition.

Deny の例Deny example

例:Deny 効果を使用します。Example: Using the deny effect.

"then": {
    "effect": "deny"
}

AuditAudit

非準拠のリソースが評価された場合、Audit を使用してアクティビティ ログに警告イベントが作成されますが、要求は停止されません。Audit is used to create a warning event in the activity log when evaluating a non-compliant resource, but it doesn't stop the request.

Audit の評価Audit evaluation

Audit は、リソースの作成中または更新中に Azure Policy によって確認される最後の効果です。Audit is the last effect checked by Azure Policy during the creation or update of a resource. その後、リソースが Azure Policy によってリソース プロバイダーに送信されます。Azure Policy then sends the resource to the Resource Provider. Audit は、リソース要求でも評価サイクルでも同じように動作します。Audit works the same for a resource request and an evaluation cycle. Azure Policy によって Microsoft.Authorization/policies/audit/action 操作がアクティビティ ログに追加され、リソースが非準拠としてマークされます。Azure Policy adds a Microsoft.Authorization/policies/audit/action operation to the activity log and marks the resource as non-compliant.

Audit のプロパティAudit properties

Audit 効果には、ポリシー定義の then 条件で使用するためのその他のプロパティはありません。The audit effect doesn't have any additional properties for use in the then condition of the policy definition.

Audit の例Audit example

例:Audit 効果を使用します。Example: Using the audit effect.

"then": {
    "effect": "audit"
}

AuditIfNotExistsAuditIfNotExists

AuditIfNotExists は if 条件に一致するリソースの監査を有効にしますが、then 条件の details に指定されるコンポーネントはありません。AuditIfNotExists enables auditing on resources that match the if condition, but doesn't have the components specified in the details of the then condition.

AuditIfNotExists の評価AuditIfNotExists evaluation

AuditIfNotExists は、リソース プロバイダーでリソースの作成または更新要求が処理され、成功を示す状態コードが返された後で実行されます。AuditIfNotExists runs after a Resource Provider has handled a create or update resource request and has returned a success status code. 関連するリソースがない場合、または ExistenceCondition によって定義されたリソースが true と評価されない場合、監査が発生します。The audit occurs if there are no related resources or if the resources defined by ExistenceCondition don't evaluate to true. Audit 効果と同じ方法で、Azure Policy によって Microsoft.Authorization/policies/audit/action 操作がアクティビティ ログに追加されます。Azure Policy adds a Microsoft.Authorization/policies/audit/action operation to the activity log the same way as the audit effect. トリガーされた場合、if 条件を満たしているリソースは、非準拠としてマークされているリソースです。When triggered, the resource that satisfied the if condition is the resource that is marked as non-compliant.

AuditIfNotExists のプロパティAuditIfNotExists properties

AuditIfNotExists 効果の details プロパティは、照合する関連リソースを定義するすべてのサブプロパティを含みます。The details property of the AuditIfNotExists effects has all the subproperties that define the related resources to match.

  • Type [必須]Type [required]
    • 照合する関連リソースの型を指定します。Specifies the type of the related resource to match.
    • details.typeif 条件リソース下にあるリソースの型である場合、この type のリソースが、ポリシーによって評価対象リソースのスコープ内から照会されます。If details.type is a resource type underneath the if condition resource, the policy queries for resources of this type within the scope of the evaluated resource. それ以外の場合は、評価対象リソースと同じリソース グループ内から照会されます。Otherwise, policy queries within the same resource group as the evaluated resource.
  • Name (省略可能)Name (optional)
    • 照合するリソースの正確な名前を指定して、指定した型のすべてのリソースではなく 1 つの特定のリソースを取得します。Specifies the exact name of the resource to match and causes the policy to fetch one specific resource instead of all resources of the specified type.
    • if.field.typethen.details.type の条件値が一致する場合、Name は "必須" になり、[field('name')] であることが必要です。When the condition values for if.field.type and then.details.type match, then Name becomes required and must be [field('name')]. ただし、代わりに audit の影響を考慮する必要があります。However, an audit effect should be considered instead.
  • ResourceGroupName (省略可能)ResourceGroupName (optional)
    • 別のリソース グループに由来する関連リソースを照合できるようにします。Allows the matching of the related resource to come from a different resource group.
    • typeif 条件リソースの下にあるリソースである場合は適用されません。Doesn't apply if type is a resource that would be underneath the if condition resource.
    • 既定値は、if 条件リソースのリソース グループです。Default is the if condition resource's resource group.
  • ExistenceScope (省略可能)ExistenceScope (optional)
    • 使用できる値は SubscriptionResourceGroup です。Allowed values are Subscription and ResourceGroup.
    • 照合する関連リソースを取得する範囲を設定します。Sets the scope of where to fetch the related resource to match from.
    • typeif 条件リソースの下にあるリソースである場合は適用されません。Doesn't apply if type is a resource that would be underneath the if condition resource.
    • ResourceGroup の場合は、if 条件リソースのリソース グループまたは ResourceGroupName で指定されたリソース グループに制限されます。For ResourceGroup, would limit to the if condition resource's resource group or the resource group specified in ResourceGroupName.
    • Subscription の場合は、関連リソースのサブスクリプション全体を検索します。For Subscription, queries the entire subscription for the related resource.
    • 既定値は ResourceGroup です。Default is ResourceGroup.
  • ExistenceCondition (省略可能)ExistenceCondition (optional)
    • 指定されない場合、type の関連リソースは効果を満たしているため、監査はトリガーされません。If not specified, any related resource of type satisfies the effect and doesn't trigger the audit.
    • if 条件のポリシー規則と同じ言語が使用されますが、それぞれの関連リソースに対して個別に評価されます。Uses the same language as the policy rule for the if condition, but is evaluated against each related resource individually.
    • 照合する関連リソースのいずれかが true と評価された場合、効果は条件を満たしているため、監査はトリガーされません。If any matching related resource evaluates to true, the effect is satisfied and doesn't trigger the audit.
    • [field()] を使用して、if 条件の値と等しいことを確認できます。Can use [field()] to check equivalence with values in the if condition.
    • たとえば、(if 条件内の) 親リソースが照合する関連リソースと同じリソースの場所にあることを検証できます。For example, could be used to validate that the parent resource (in the if condition) is in the same resource location as the matching related resource.

AuditIfNotExists の例AuditIfNotExists example

例:仮想マシンを評価してマルウェア対策の拡張機能が存在するかどうかを判定し、ない場合に監査します。Example: Evaluates Virtual Machines to determine if the Antimalware extension exists then audits when missing.

{
    "if": {
        "field": "type",
        "equals": "Microsoft.Compute/virtualMachines"
    },
    "then": {
        "effect": "auditIfNotExists",
        "details": {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "existenceCondition": {
                "allOf": [{
                        "field": "Microsoft.Compute/virtualMachines/extensions/publisher",
                        "equals": "Microsoft.Azure.Security"
                    },
                    {
                        "field": "Microsoft.Compute/virtualMachines/extensions/type",
                        "equals": "IaaSAntimalware"
                    }
                ]
            }
        }
    }
}

DeployIfNotExistsDeployIfNotExists

AuditIfNotExists と同様に、DeployIfNotExists ポリシー定義は条件が満たされたときにテンプレートのデプロイを実行します。Similar to AuditIfNotExists, a DeployIfNotExists policy definition executes a template deployment when the condition is met.

注意

deployIfNotExists入れ子になったテンプレートがサポートされていますが、リンク済みテンプレートは現在サポートされていません。Nested templates are supported with deployIfNotExists, but linked templates are currently not supported.

DeployIfNotExists の評価DeployIfNotExists evaluation

DeployIfNotExists は、リソース プロバイダーでリソースの作成または更新要求が処理され、成功を示す状態コードが返された後で実行されます。DeployIfNotExists runs after a Resource Provider has handled a create or update resource request and has returned a success status code. 関連するリソースがない場合、または ExistenceCondition によって定義されたリソースが true と評価されない場合、テンプレートのデプロイが発生します。A template deployment occurs if there are no related resources or if the resources defined by ExistenceCondition don't evaluate to true.

評価サイクル中は、リソースを照合する DeployIfNotExists 効果があるポリシー定義は非準拠としてマークされ、リソースに対するアクションは実行されません。During an evaluation cycle, policy definitions with a DeployIfNotExists effect that match resources are marked as non-compliant, but no action is taken on that resource.

DeployIfNotExists のプロパティDeployIfNotExists properties

DeployIfNotExists 効果の details プロパティは、照合する関連リソースおよび実行するテンプレートのデプロイを定義するすべてのサブプロパティを含みます。The details property of the DeployIfNotExists effect has all the subproperties that define the related resources to match and the template deployment to execute.

  • Type [必須]Type [required]

    • 照合する関連リソースの型を指定します。Specifies the type of the related resource to match.
    • 最初に if 条件リソースの下にあるリソースを取得しようとし、次に if 条件リソースと同じリソース グループ内を検索します。Starts by trying to fetch a resource underneath the if condition resource, then queries within the same resource group as the if condition resource.
  • Name (省略可能)Name (optional)

    • 照合するリソースの正確な名前を指定して、指定した型のすべてのリソースではなく 1 つの特定のリソースを取得します。Specifies the exact name of the resource to match and causes the policy to fetch one specific resource instead of all resources of the specified type.
    • if.field.typethen.details.type の条件値が一致する場合、Name は "必須" になり、[field('name')] であることが必要です。When the condition values for if.field.type and then.details.type match, then Name becomes required and must be [field('name')].
  • ResourceGroupName (省略可能)ResourceGroupName (optional)

    • 別のリソース グループに由来する関連リソースを照合できるようにします。Allows the matching of the related resource to come from a different resource group.
    • typeif 条件リソースの下にあるリソースである場合は適用されません。Doesn't apply if type is a resource that would be underneath the if condition resource.
    • 既定値は、if 条件リソースのリソース グループです。Default is the if condition resource's resource group.
    • テンプレートのデプロイが実行される場合は、この値のリソース グループにデプロイされます。If a template deployment is executed, it's deployed in the resource group of this value.
  • ExistenceScope (省略可能)ExistenceScope (optional)

    • 使用できる値は SubscriptionResourceGroup です。Allowed values are Subscription and ResourceGroup.
    • 照合する関連リソースを取得する範囲を設定します。Sets the scope of where to fetch the related resource to match from.
    • typeif 条件リソースの下にあるリソースである場合は適用されません。Doesn't apply if type is a resource that would be underneath the if condition resource.
    • ResourceGroup の場合は、if 条件リソースのリソース グループまたは ResourceGroupName で指定されたリソース グループに制限されます。For ResourceGroup, would limit to the if condition resource's resource group or the resource group specified in ResourceGroupName.
    • Subscription の場合は、関連リソースのサブスクリプション全体を検索します。For Subscription, queries the entire subscription for the related resource.
    • 既定値は ResourceGroup です。Default is ResourceGroup.
  • ExistenceCondition (省略可能)ExistenceCondition (optional)

    • 指定されない場合、type の関連リソースは効果を満たすため、デプロイはトリガーされません。If not specified, any related resource of type satisfies the effect and doesn't trigger the deployment.
    • if 条件のポリシー規則と同じ言語が使用されますが、それぞれの関連リソースに対して個別に評価されます。Uses the same language as the policy rule for the if condition, but is evaluated against each related resource individually.
    • 照合する関連リソースのいずれかが true と評価された場合、効果は条件を満たしているため、デプロイはトリガーされません。If any matching related resource evaluates to true, the effect is satisfied and doesn't trigger the deployment.
    • [field()] を使用して、if 条件の値と等しいことを確認できます。Can use [field()] to check equivalence with values in the if condition.
    • たとえば、(if 条件内の) 親リソースが照合する関連リソースと同じリソースの場所にあることを検証できます。For example, could be used to validate that the parent resource (in the if condition) is in the same resource location as the matching related resource.
  • roleDefinitionIds [必須]roleDefinitionIds [required]

    • このプロパティには、サブスクリプションでアクセス可能なロールベースのアクセス制御ロール ID と一致する文字列の配列を含める必要があります。This property must include an array of strings that match role-based access control role ID accessible by the subscription. 詳細については、修復 - ポリシー定義を構成するを参照してください。For more information, see remediation - configure policy definition.
  • DeploymentScope (省略可能)DeploymentScope (optional)

    • 使用できる値は SubscriptionResourceGroup です。Allowed values are Subscription and ResourceGroup.
    • トリガーされるデプロイの種類を設定します。Sets the type of deployment to be triggered. Subscriptionサブスクリプション レベルでのデプロイを示し、ResourceGroup はリソース グループへのデプロイを示します。Subscription indicates a deployment at subscription level, ResourceGroup indicates a deployment to a resource group.
    • サブスクリプション レベルのデプロイを使用する場合は、Deploymentlocation プロパティを指定する必要があります。A location property must be specified in the Deployment when using subscription level deployments.
    • 既定値は ResourceGroup です。Default is ResourceGroup.
  • Deployment [必須]Deployment [required]

    • このプロパティは Microsoft.Resources/deployments PUT API に渡されるため、完全なテンプレートのデプロイを含める必要があります。This property should include the full template deployment as it would be passed to the Microsoft.Resources/deployments PUT API. 詳細については、Deployments REST API をご覧ください。For more information, see the Deployments REST API.

    注意

    Deployment プロパティ内のすべての関数が、ポリシーではなくテンプレートのコンポーネントとして評価されます。All functions inside the Deployment property are evaluated as components of the template, not the policy. 例外は、ポリシーからテンプレートに値を渡す parameters プロパティです。The exception is the parameters property that passes values from the policy to the template. このセクションのテンプレート パラメーター名の value は、この値渡しを実行するために使用されます (DeployIfNotExists の例の fullDbName を参照)。The value in this section under a template parameter name is used to perform this value passing (see fullDbName in the DeployIfNotExists example).

DeployIfNotExists の例DeployIfNotExists example

例:SQL Server データベースを評価して、transparentDataEncryption が有効になっているかどうかを判断します。Example: Evaluates SQL Server databases to determine if transparentDataEncryption is enabled. 有効になっていない場合は、有効にするためのデプロイが実行されます。If not, then a deployment to enable is executed.

"if": {
    "field": "type",
    "equals": "Microsoft.Sql/servers/databases"
},
"then": {
    "effect": "DeployIfNotExists",
    "details": {
        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
        "name": "current",
        "roleDefinitionIds": [
            "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
            "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
        ],
        "existenceCondition": {
            "field": "Microsoft.Sql/transparentDataEncryption.status",
            "equals": "Enabled"
        },
        "deployment": {
            "properties": {
                "mode": "incremental",
                "template": {
                    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {
                        "fullDbName": {
                            "type": "string"
                        }
                    },
                    "resources": [{
                        "name": "[concat(parameters('fullDbName'), '/current')]",
                        "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
                        "apiVersion": "2014-04-01",
                        "properties": {
                            "status": "Enabled"
                        }
                    }]
                },
                "parameters": {
                    "fullDbName": {
                        "value": "[field('fullName')]"
                    }
                }
            }
        }
    }
}

EnforceOPAConstraintEnforceOPAConstraint

この効果は、Microsoft.Kubernetes.Data のポリシー定義モードで使用されます。This effect is used with a policy definition mode of Microsoft.Kubernetes.Data. これは、OPA Constraint FrameworkOpen Policy Agent (OPA) に定義された Gatekeeper v3 受付制御ルールを、Azure 上のセルフマネージド Kubernetes クラスターに渡すために使用されます。It's used to pass Gatekeeper v3 admission control rules defined with OPA Constraint Framework to Open Policy Agent (OPA) to self-managed Kubernetes clusters on Azure.

注意

AKS Engine 用の Azure Policy はパブリック プレビューであり、組み込みのポリシー定義のみをサポートします。Azure Policy for AKS Engine is in Public Preview and only supports built-in policy definitions.

EnforceOPAConstraint の評価EnforceOPAConstraint evaluation

Open Policy Agent アドミッション コントローラーは、クラスター上の新しい要求をリアルタイムで評価します。The Open Policy Agent admission controller evaluates any new request on the cluster in real time. 5 分ごとにクラスターのフル スキャンが完了し、結果が Azure Policy に報告されます。Every 5 minutes, a full scan of the cluster is completed and the results reported to Azure Policy.

EnforceOPAConstraint のプロパティEnforceOPAConstraint properties

EnforceOPAConstraint 効果の details プロパティには、Gatekeeper v3 受付制御ルールを記述するサブプロパティがあります。The details property of the EnforceOPAConstraint effect has the subproperties that describe the Gatekeeper v3 admission control rule.

  • constraintTemplate [必須]constraintTemplate [required]
    • 新しい制約を定義する、制約テンプレート CustomResourceDefinition (CRD) です。The Constraint template CustomResourceDefinition (CRD) that defines new Constraints. このテンプレートは、Rego ロジック、制約スキーマに加えて、Azure Policy からの values で渡される制約パラメーターを定義します。The template defines the Rego logic, the Constraint schema, and the Constraint parameters which are passed via values from Azure Policy.
  • constraint [必須]constraint [required]
    • 制約テンプレートの CRD 実装です。The CRD implementation of the Constraint template. {{ .Values.<valuename> }} のように values で渡されるパラメーターを使用します。Uses parameters passed via values as {{ .Values.<valuename> }}. 次の例では、{{ .Values.cpuLimit }} および {{ .Values.memoryLimit }} となっています。In the example below, this would be {{ .Values.cpuLimit }} and {{ .Values.memoryLimit }}.
  • values [オプション]values [optional]
    • 制約に渡すすべてのパラメーターと値を定義します。Defines any parameters and values to pass to the Constraint. それぞれの値は、制約テンプレート CRD に含まれている必要があります。Each value must exist in the Constraint template CRD.

EnforceRegoPolicy の例EnforceRegoPolicy example

例:AKS エンジンでコンテナーの CPU とメモリのリソース上限を設定する、Gatekeeper v3 の受付制御ルールです。Example: Gatekeeper v3 admission control rule to set container CPU and memory resource limits in AKS Engine.

"if": {
    "allOf": [
        {
            "field": "type",
            "in": [
                "Microsoft.ContainerService/managedClusters",
                "AKS Engine"
            ]
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "enforceOPAConstraint",
    "details": {
        "constraintTemplate": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/template.yaml",
        "constraint": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/Kubernetes/container-resource-limits/constraint.yaml",
        "values": {
            "cpuLimit": "[parameters('cpuLimit')]",
            "memoryLimit": "[parameters('memoryLimit')]"
        }
    }
}

EnforceRegoPolicyEnforceRegoPolicy

この効果は、Microsoft.ContainerService.Data のポリシー定義モードで使用されます。This effect is used with a policy definition mode of Microsoft.ContainerService.Data. これは、Rego で定義されている Gatekeeper v2 受付制御ルールを Azure Kubernetes Service 上の Open Policy Agent (OPA) に渡すために使用されます。It's used to pass Gatekeeper v2 admission control rules defined with Rego to Open Policy Agent (OPA) on Azure Kubernetes Service.

注意

AKS 用の Azure Policy は限定プレビューで、組み込みのポリシー定義のみをサポートしますAzure Policy for AKS is in Limited Preview and only supports built-in policy definitions

EnforceRegoPolicy の評価EnforceRegoPolicy evaluation

Open Policy Agent アドミッション コントローラーは、クラスター上の新しい要求をリアルタイムで評価します。The Open Policy Agent admission controller evaluates any new request on the cluster in real time. 5 分ごとにクラスターのフル スキャンが完了し、結果が Azure Policy に報告されます。Every 5 minutes, a full scan of the cluster is completed and the results reported to Azure Policy.

EnforceRegoPolicy のプロパティEnforceRegoPolicy properties

EnforceRegoPolicy 効果の details プロパティには、Gatekeeper v2 受付制御ルールを記述するサブプロパティがあります。The details property of the EnforceRegoPolicy effect has the subproperties that describe the Gatekeeper v2 admission control rule.

  • policyId [必須]policyId [required]
    • Rego 受付制御規則にパラメーターとして渡される一意の名前。A unique name passed as a parameter to the Rego admission control rule.
  • policy [必須]policy [required]
    • Rego 受付制御規則の URI を指定します。Specifies the URI of the Rego admission control rule.
  • policyParameters [省略可能]policyParameters [optional]
    • rego ポリシーに渡すパラメーターと値を定義します。Defines any parameters and values to pass to the rego policy.

EnforceRegoPolicy の例EnforceRegoPolicy example

例:AKS で指定されたコンテナー イメージのみを許可する Gatekeeper v2 受付制御ルール。Example: Gatekeeper v2 admission control rule to allow only the specified container images in AKS.

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.ContainerService/managedClusters"
        },
        {
            "field": "location",
            "equals": "westus2"
        }
    ]
},
"then": {
    "effect": "EnforceRegoPolicy",
    "details": {
        "policyId": "ContainerAllowedImages",
        "policy": "https://raw.githubusercontent.com/Azure/azure-policy/master/built-in-references/KubernetesService/container-allowed-images/limited-preview/gatekeeperpolicy.rego",
        "policyParameters": {
            "allowedContainerImagesRegex": "[parameters('allowedContainerImagesRegex')]"
        }
    }
}

階層化ポリシーLayering policies

リソースは複数の割り当ての影響を受ける可能性があります。A resource may be impacted by several assignments. これらの割り当てのスコープは、同じ場合も異なっている場合もあります。These assignments may be at the same scope or at different scopes. これらの各割り当てにもさまざまな効果が定義されている可能性があります。Each of these assignments is also likely to have a different effect defined. 各ポリシーの条件と効果は個別に評価されます。The condition and effect for each policy is independently evaluated. 次に例を示します。For example:

  • ポリシー 1Policy 1
    • リソースの場所を 'westus' に制限するRestricts resource location to 'westus'
    • サブスクリプション A に割り当てるAssigned to subscription A
    • Deny 効果Deny effect
  • ポリシー 2Policy 2
    • リソースの場所を 'eastus' に制限するRestricts resource location to 'eastus'
    • サブスクリプション A のリソース グループ B に割り当てるAssigned to resource group B in subscription A
    • Audit 効果Audit effect

この設定の結果は次のようになります。This setup would result in the following outcome:

  • リソース グループ B の既存のリソースで、場所が 'eastus' のリソースは、ポリシー 2 に準拠しているが、ポリシー 1 には準拠していないAny resource already in resource group B in 'eastus' is compliant to policy 2 and non-compliant to policy 1
  • リソース グループ B に既に存在するが、場所が 'eastus' でない既存のリソースは、ポリシー 2 に準拠せず、場所が 'westus' でない場合はポリシー 1 にも準拠していないAny resource already in resource group B not in 'eastus' is non-compliant to policy 2 and non-compliant to policy 1 if not in 'westus'
  • サブスクリプション A の新しいリソースで、場所が 'westus' でないリソースは、ポリシー 1 によって拒否されるAny new resource in subscription A not in 'westus' is denied by policy 1
  • サブスクリプション A のリソース グループ B の新しいリソースで、場所が 'westus' であるリソースは作成されるが、ポリシー 2 には準拠していないAny new resource in subscription A and resource group B in 'westus' is created and non-compliant on policy 2

ポリシー 1 とポリシー 2 の両方に Deny 効果がある場合、状況は次のように変化します。If both policy 1 and policy 2 had effect of deny, the situation changes to:

  • リソース グループ B に既に存在するが、場所が 'eastus' でないリソースは、ポリシー 2 に準拠していないAny resource already in resource group B not in 'eastus' is non-compliant to policy 2
  • リソース グループ B に既に存在するが、場所が 'westus' でないリソースは、ポリシー 1 に準拠していないAny resource already in resource group B not in 'westus' is non-compliant to policy 1
  • サブスクリプション A の新しいリソースで、場所が 'westus' でないリソースは、ポリシー 1 によって拒否されるAny new resource in subscription A not in 'westus' is denied by policy 1
  • サブスクリプション A のリソース グループ B の新しいリソースは、すべて拒否されるAny new resource in resource group B of subscription A is denied

各割り当ては個別に評価されます。Each assignment is individually evaluated. そのため、スコープの違いによって発生する隙間をリソースがすり抜けるチャンスはありません。As such, there isn't an opportunity for a resource to slip through a gap from differences in scope. ポリシーの階層化またはポリシーの重複による最終的な結果は、累積的に最も制限が厳しいと考えられます。The net result of layering policies or policy overlap is considered to be cumulative most restrictive. たとえば、ポリシー 1 とポリシー 2 の両方に拒否効果が設定されている場合、重複するポリシーと競合するポリシーによって、リソースがブロックされます。As an example, if both policy 1 and 2 had a deny effect, a resource would be blocked by the overlapping and conflicting policies. リソースを対象のスコープ内に必ず作成する必要がある場合は、それぞれの割り当ての除外を見直して、適切なポリシーが適切なスコープに影響を与えていることを確認してください。If you still need the resource to be created in the target scope, review the exclusions on each assignment to validate the right policies are affecting the right scopes.

次のステップNext steps