Azure Policy 定義の deny 効果

deny 効果は、ポリシー定義を通じて定義された標準と一致せず要求が失敗するリソース要求を防ぐために使われます。

Deny の評価

リソース マネージャー モードで照合されたリソースを作成または更新する場合、Deny は、リソース プロバイダーに要求が送信されないようにします。 要求は 403 (Forbidden) として返されます。 ポータルでは、Forbidden はポリシー割り当てによって阻止されたデプロイの状態として表示されます。 リソース プロバイダー モードでは、リソース プロバイダーによってリソースの評価が管理されます。

既存のリソースの評価中に、deny ポリシー定義に一致するリソースは非準拠としてマークされます。

Deny のプロパティ

リソース マネージャー モードの場合、deny 効果には、ポリシー定義の then 条件で使うための他のプロパティはありません。

リソース プロバイダー モードが Microsoft.Kubernetes.Data の場合、deny 効果には次の details のサブ プロパティがあります。 新しいポリシー定義や更新されたポリシー定義では、templateInfo を使用する必要があります。constraintTemplate は非推奨となっています。

  • templateInfo (必須)
    • constraintTemplate とは使用できません。
    • sourceType (必須)
      • 制約テンプレートのソースの種類を定義します。 指定できる値は PublicURL または Base64Encoded です。

      • PublicURL の場合、url プロパティと組み合わせて制約テンプレートの場所を指定します。 この場所はパブリックにアクセスできる必要があります。

        警告

        url には、SAS URI やトークンなど、シークレットが公開されてしまう可能性がある情報は一切使用しないでください。

      • Base64Encoded の場合、content プロパティと組み合わせて、base 64 でエンコードされた制約テンプレートを指定します。 既存の Open Policy Agent (OPA) Gatekeeper v3 制約テンプレートからカスタム定義を作成するには、「制約テンプレートからポリシー定義を作成する」を参照してください。

  • constraint (省略可)
    • templateInfo とは使用できません。
    • 制約テンプレートの CRD 実装です。 values{{ .Values.<valuename> }} のように渡されたパラメーターを使います。 次の例 2 では、これらの値は {{ .Values.excludedNamespaces }} および {{ .Values.allowedContainerImagesRegex }} です。
  • constraintTemplate (非推奨)
    • templateInfo とは使用できません。
    • ポリシーの定義を作成または更新するときは、templateInfo に置き換えてください。
    • 新しい制約を定義する、制約テンプレート CustomResourceDefinition (CRD) です。 このテンプレートは、Rego ロジック、制約スキーマと、Azure Policy から values で渡される制約パラメーターを定義します。 詳細については、「Gatekeeper 制約」に移動してください。
  • constraintInfo (省略可)
    • constraintconstraintTemplateapiGroups、または kinds とは使用できません。
    • constraintInfo が指定されていない場合、制約は templateInfo とポリシーから生成できます。
    • sourceType (必須)
      • 制約用のソースの種類を定義します。 指定できる値は PublicURL または Base64Encoded です。

      • PublicURL の場合、url プロパティと組み合わせて制約の場所を指定します。 この場所はパブリックにアクセスできる必要があります。

        警告

        url には、SAS URI やトークンなど、シークレットが公開されてしまう可能性がある情報は一切使用しないでください。

  • namespaces (省略可)
    • ポリシーの評価対象とする Kubernetes 名前空間配列
    • 値が空または指定しなかった場合、ポリシーの評価には、excludedNamespaces で定義されている名前空間を除くすべての名前空間が含まれます。
  • excludedNamespaces (必須)
  • labelSelector (必須)
    • matchLabels (オブジェクト) と matchExpression (配列) プロパティを含む "オブジェクト" で、指定されたラベルとセレクターに一致するポリシーの評価に含める Kubernetes リソースを指定できます。
    • 値が空または指定しなかった場合、ポリシーの評価には、excludedNamespaces で定義された名前空間を除くすべてのラベルとセレクターが含まれます。
  • apiGroups (templateInfo を使う場合は必須)
    • マッチさせる API グループを含んだ配列。 空の配列 ([""]) は、コア API グループです。
    • apiGroups 向けの ["*"] の定義は許可されません。
  • kinds (templateInfo を使う場合は必須)
    • 評価対象とする Kubernetes オブジェクトの kind を含んだ配列
    • kinds 向けの ["*"] の定義は許可されません。
  • values (省略可)
    • 制約に渡すすべてのパラメーターと値を定義します。 それぞれの値は、制約テンプレート CRD に含まれている必要があります。

Deny の例

例 1: リソース マネージャー モードで deny 効果を使います。

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

例 2: Microsoft.Kubernetes.Data のリソース プロバイダー モードで deny 効果を使います。 details.templateInfo の追加情報では、PublicURL の使用を宣言し、Kubernetes で使う制約テンプレートの場所に url を設定して、許可されるコンテナー イメージを制限します。

"then": {
  "effect": "deny",
  "details": {
    "templateInfo": {
      "sourceType": "PublicURL",
      "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
    },
    "values": {
      "imageRegex": "[parameters('allowedContainerImagesRegex')]"
    },
    "apiGroups": [
      ""
    ],
    "kinds": [
      "Pod"
    ]
  }
}

次のステップ