Azure Policy の定義構造パラメータ

パラメーターによって、ポリシー定義の数を減らし、ポリシーの管理を単純化できます。 フォームにあるフィールドのようなパラメータ nameaddresscitystate を考えてみてください。 これらのパラメータは常に同じままですが、その値はフォームの個々の入力に基づいて変わります。 パラメーターは、ポリシーの作成時と同じように機能します。 ポリシー定義にパラメーターを含めることで、別の値を使用してさまざまなシナリオについてポリシーを再利用できます。

パラメーターの追加または削除

パラメータは、既存の割り当て済み定義に追加されることがあります。 新しいパラメータには、defaultValue プロパティを含める必要があります。 このプロパティにより、ポリシーまたはイニシアティブの既存の割り当てが間接的に無効になることが適切に防止されます。

パラメータをポリシー定義から削除すると、パラメータ値を設定する割り当てがあった場合に、その参照が壊れるため、削除できません。 一部の組み込みポリシー定義では、メタデータ "deprecated": true を使用して非推奨のパラメータが設定され、Azure portal で定義を割り当てるときにパラメータが非表示になります。 このメソッドはカスタム ポリシー定義ではサポートされていませんが、別のオプションとして、パラメータを指定せずに新しいカスタム ポリシー定義を複製して作成することもできます。

パラメーターのプロパティ

パラメータは、ポリシー定義で次のプロパティを使用します。

  • name:お使いのパラメーターの名前。 ポリシー規則内の parameters デプロイ関数によって使用されます。 詳しくは、パラメーター値の使用に関するページをご覧ください。
  • type: パラメータが stringarrayobjectbooleanintegerfloatdateTime のどれであるかを判定します。
  • metadata: Azure portal によって主に使用されるサブプロパティを定義して、ユーザー フレンドリな情報を表示します。
    • description:パラメーターが何に使用されるかの説明。 許可される値の例を提示するために使用できます。
    • displayName:ポータル内に表示されるパラメーターのフレンドリ名。
    • strongType:(省略可能) ポータル経由でポリシー定義を割り当てるときに使用されます。 コンテキスト対応の一覧を提供します。 詳しくは、strongType に関するページをご覧ください。
    • assignPermissions:(省略可能) ポリシーの割り当て中に Azure portal にロールの割り当てを作成させるには、true に設定します。 このプロパティは、割り当てスコープ外でアクセス許可を割り当てたい場合に便利です。 ロールの割り当ては、ポリシーのロール定義ごと (またはイニシアチブのポリシーのすべてのロール定義ごと) に 1 つあります。 パラメーター値は、有効なリソースまたはスコープである必要があります。
    • deprecated: 組み込み定義でパラメーターが非推奨かどうかを示すブール型フラグ。
  • defaultValue:(省略可能) 値が指定されていない場合、割り当ての中でパラメーターの値を設定します。 割り当てられている既存のポリシー定義を更新するときは、必須です。 オブジェクト型パラメーターの場合、値は適切なスキーマと一致する必要があります。
  • allowedValues:(省略可能) 割り当て中にパラメーターが許可する値の配列を指定します。
    • 大文字と小文字の区別: ポリシーを割り当てる際、許可される値の比較で大文字と小文字が区別されます。つまり、割り当てで選択されたパラメーター値は、定義の allowedValues 配列の値の大文字と小文字が一致している必要があります。 ただし、割り当てに値が選択されると、使用される条件によっては、文字列比較の評価で大文字と小文字が区別されない場合があります。 たとえば、パラメータで割り当てで許可されるタグ値として Dev を指定し、この値が equals 条件を使用して入力文字列と比較される場合、notEquals は大文字と小文字を区別しないため、dev のタグ値が小文字であっても、後で Azure Policy により一致として評価されます。
    • オブジェクト型パラメーターの場合、値は適切なスキーマと一致する必要があります。
  • schema: (省略可能) 割り当て中に、自己定義 JSON スキーマを使用してパラメーター入力の検証を提供します。 このプロパティは、オブジェクト型パラメーターでのみサポートされ、Json.NET Schema 2019-09 の実装に従います。 スキーマの使用については https://json-schema.org/ で、下書きスキーマのテストについては https://www.jsonschemavalidator.net/ で詳細を参照してください。

サンプル パラメータ

例 1

たとえば、リソースをデプロイできる場所を制限するためのポリシー定義を定めることができます。 そのポリシー定義のパラメータは allowedLocations である場合があり、ポリシー定義の割り当てごとに使用して、受け入れられる値を制限できます。 strongType の使用によって、ポータル経由で割り当てを完了したときに、拡張されたエクスペリエンスが提供されます。

"parameters": {
  "allowedLocations": {
    "type": "array",
    "metadata": {
      "description": "The list of allowed locations for resources.",
      "displayName": "Allowed locations",
      "strongType": "location"
    },
    "defaultValue": [
      "westus2"
    ],
    "allowedValues": [
      "eastus2",
      "westus2",
      "westus"
    ]
  }
}

割り当て時に ["westus", "eastus2"] である可能性があるこの配列型パラメータ (strongType なし) のサンプル入力。

例 2

より高度なシナリオでは、指定されたラベルを使用するように Kubernetes クラスター ポッドに求めるポリシーを定義できます。 そのポリシー定義のパラメータには labelSelector を指定でき、ポリシー定義の各割り当てがこれを使用して、ラベル キーと値に基づいて問題の Kubernetes リソースを指定します。

"parameters": {
  "labelSelector": {
    "type": "Object",
    "metadata": {
      "displayName": "Kubernetes label selector",
      "description": "Label query to select Kubernetes resources for policy evaluation. An empty label selector matches all Kubernetes resources."
    },
    "defaultValue": {},
    "schema": {
      "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all resources.",
      "type": "object",
      "properties": {
        "matchLabels": {
          "description": "matchLabels is a map of {key,value} pairs.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "minProperties": 1
        },
        "matchExpressions": {
          "description": "matchExpressions is a list of values, a key, and an operator.",
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "key": {
                "description": "key is the label key that the selector applies to.",
                "type": "string"
              },
              "operator": {
                "description": "operator represents a key's relationship to a set of values.",
                "type": "string",
                "enum": [
                  "In",
                  "NotIn",
                  "Exists",
                  "DoesNotExist"
                ]
              },
              "values": {
                "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "key",
              "operator"
            ],
            "additionalProperties": false
          },
          "minItems": 1
        }
      },
      "additionalProperties": false
    }
  },
}

このオブジェクト型パラメーターの割り当て時のサンプル入力は JSON 形式になり、指定されたスキーマによって検証され、次のようになります。

{
  "matchLabels": {
    "poolID": "abc123",
    "nodeGroup": "Group1",
    "region": "southcentralus"
  },
  "matchExpressions": [
    {
      "key": "name",
      "operator": "In",
      "values": [
        "payroll",
        "web"
      ]
    },
    {
      "key": "environment",
      "operator": "NotIn",
      "values": [
        "dev"
      ]
    }
  ]
}

パラメーター値の使用

ポリシー規則では、次の parameters 関数構文でパラメーターを参照します。

{
  "field": "location",
  "in": "[parameters('allowedLocations')]"
}

このサンプルでは、「パラメータのプロパティ」に示されていた allowedLocations パラメータを参照します。

strongType

metadata プロパティの中で、strongType を使用して、Azure portal 内でオプションの複数選択リストを提供できます。 strongType には、サポートされるリソースの種類または許可される値を指定できます。 リソースの種類strongType に対して有効かどうかを判断するには、Get-AzResourceProvider を使用します。 リソースの種類strongTypeの形式は <Resource Provider>/<Resource Type> です。 たとえば、Microsoft.Network/virtualNetworks/subnets のようにします。

Get-AzResourceProvider によって返されない一部のリソースの種類がサポートされています。 その種類には、次のようなものがあります。

  • Microsoft.RecoveryServices/vaults/backupPolicies

リソースの種類でない strongType の許可される値には、次のものがあります。

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

次のステップ