すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:コンテナセキュリティポリシールールライブラリの概要

最終更新日:Jun 24, 2026

コンプライアンス、インフラ、K8s-general、PSP、FinOps の 5 つの組み込みカテゴリにある 54 の事前定義された Gatekeeper ポリシーに対して、Pod のデプロイメントと更新リクエストを検証します。

ポリシーカテゴリ

カテゴリ 説明
コンプライアンス Alibaba Cloud Kubernetes Security Hardening などのコンプライアンス標準に基づくポリシーです。
インフラ クラウドインフラストラクチャリソースを保護するポリシーです。
K8s-general ACK クラスター内の機密性の高いリソース構成を制限および標準化し、クラスター内のアプリケーションセキュリティを強化するポリシーです。
PSP Kubernetes の Pod セキュリティポリシー (PSP) を置き換え、レガシーな ACK ポリシー管理と同等のセキュリティ制約を提供するポリシーです。

事前定義されたセキュリティポリシー

5 つのカテゴリには 54 の事前定義されたポリシーが含まれています。

カテゴリ ポリシー 説明 重要度
コンプライアンス ACKNoEnvVarSecrets Pod の環境変数で secretKeyRef を使用して Secret を参照することをブロックします。
コンプライアンス ACKPodsRequireSecurityContext 指定された名前空間の Pod に securityContext を含めることを要求します。
コンプライアンス ACKRestrictNamespaces 指定された名前空間で、指定されたリソースタイプのデプロイメントをブロックします。
コンプライアンス ACKRestrictRoleBindings 指定された名前空間の RoleBinding が、指定されたロールまたはクラスターロールのみをバインドするように制限します。
コンプライアンス ACKNamespacesDeleteProtection 指定された名前空間の削除を防止します。
コンプライアンス ACKServicesDeleteProtection 指定された名前空間の Service インスタンスの削除を防止します。
インフラ ACKBlockProcessNamespaceSharing 指定された名前空間の Pod が shareProcessNamespace を使用することをブロックします。
インフラ ACKEmptyDirHasSizeLimit emptyDir ボリュームをマウントする際に sizeLimit を要求します。
インフラ ACKLocalStorageRequireSafeToEvict hostPath または emptyDir ボリュームをマウントする Pod に cluster-autoscaler.kubernetes.io/safe-to-evict: "true" アノテーションを要求します。
インフラ ACKOSSStorageLocationConstraint 指定された名前空間の Pod にマウントできる OSS バケットのリージョンを制御します。
インフラ ACKPVSizeConstraint クラスター内の永続ボリューム (PV) の最大ディスク容量を設定します。
インフラ ACKPVCConstraint 永続ボリューム要求 (PVC) をデプロイできる名前空間を制限し、PV の最大ディスク容量を設定します。
インフラ ACKBlockVolumeTypes 指定された名前空間の Pod が指定されたボリュームタイプを使用することをブロックします。
K8s-general ACKAllowedRepos 指定された名前空間の Pod が、指定されたイメージリポジトリからのみイメージをプルするように制限します。
K8s-general ACKBlockAutoinjectServiceEnv Pod に enableServiceLinks: false を要求し、Service の IP アドレスが Pod の環境変数に注入されるのを防ぎます。
K8s-general ACKBlockAutomountToken Pod に automountServiceAccountToken: false を要求し、サービスアカウントトークンの自動マウントを防ぎます。
K8s-general ACKBlockEphemeralContainer 指定された名前空間の Pod がエフェメラルコンテナを起動することをブロックします。
K8s-general ACKBlockLoadBalancer 指定された名前空間で LoadBalancer Service がデプロイされることをブロックします。
K8s-general ACKBlockNodePort 指定された名前空間で NodePort Service がデプロイされることをブロックします。
K8s-general ACKContainerLimits 指定された名前空間の Pod 内のすべてのコンテナにリソースの limits を要求します。
K8s-general ACKExternalIPs 指定された名前空間の Service が、ポリシーにリストされている外部 IP アドレスのみを使用するように制限します。
K8s-general ACKImageDigests 指定された名前空間の Pod が、指定されたフォーマットのダイジェストを持つイメージを使用することを要求します。
K8s-general ACKRequiredLabels 指定された名前空間の Pod が、ポリシーに一致するラベルを持つことを要求します。
K8s-general ACKRequiredProbes 指定された名前空間の Pod が、指定されたタイプの readiness プローブと liveness プローブを持つことを要求します。
K8s-general ACKCheckNginxPath Ingress リソースの spec.rules[].http.paths[].path にある高リスクの値をブロックします。1.2.1 より前の Ingress-nginx バージョンで有効にします。
K8s-general ACKCheckNginxAnnotation Ingress リソースの metadata.annotations にある高リスクの値をブロックします。1.2.1 より前の Ingress-nginx バージョンで有効にします。
K8s-general ACKBlockInternetLoadBalancer インターネットに面した LoadBalancer Service の作成をブロックします。
K8s-general RatifyVerification Ratify を使用して、指定された名前空間の Pod のイメージ署名またはセキュリティメタデータ (ソフトウェア部品表 (SBOM) など) を検証します。
PSP ACKPSPAllowPrivilegeEscalationContainer 指定された名前空間の Pod に allowPrivilegeEscalation 設定を含めることを要求します。
PSP ACKPSPAllowedUsers 指定された名前空間の Pod に usergroupsupplementalGroups、および fsGroup 設定を含めることを要求します。
PSP ACKPSPAppArmor 指定された名前空間の Pod に AppArmor 設定を含めることを要求します。
PSP ACKPSPCapabilities 指定された名前空間の Pod に Linux 機能設定を含めることを要求します。
PSP ACKPSPFSGroup 指定された名前空間の Pod が、ポリシーに準拠した fsGroup 設定を使用することを要求します。
PSP ACKPSPFlexVolumes 指定された名前空間の Pod が、ポリシーにリストされている FlexVolume ドライバーのみを使用するように制限します。
PSP ACKPSPForbiddenSysctls 指定された名前空間の Pod が指定された sysctl を使用することをブロックします。
PSP ACKPSPHostFilesystem 指定された名前空間の Pod にマウントされた hostPath ボリュームに条件を適用します。
PSP ACKPSPHostNamespace 指定された名前空間の Pod がホストの名前空間を共有することをブロックします。
PSP ACKPSPHostNetworkingPorts 指定された名前空間の Pod がホストネットワークと指定されたポートを使用できるかどうかを制御します。
PSP ACKPSPPrivilegedContainer 指定された名前空間の Pod が特権コンテナを実行することをブロックします。
PSP ACKPSPProcMount 指定された名前空間の Pod が、ポリシーで指定された Proc Mount タイプを使用することを要求します。
PSP ACKPSPReadOnlyRootFilesystem 指定された名前空間の Pod が読み取り専用のルートファイルシステムで実行されることを要求します。
PSP ACKPSPSELinuxV2 指定された名前空間の Pod を、ポリシーにリストされている SELinux オプションに制限します。
PSP ACKPSPSeccomp 指定された名前空間の Pod が指定された seccomp プロファイルを使用することを要求します。
PSP ACKPSPVolumeTypes 指定された名前空間の Pod が、指定されたタイプのボリュームのみをマウントするように制限します。

コンプライアンス

ACKNoEnvVarSecrets

Pod の環境変数で secretKeyRef を使用して Secret を参照することをブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKNoEnvVarSecrets
metadata:
  name: no-env-var-secrets
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]

許可される例 — ボリュームとしてマウントされた Secret:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
  namespace: test-gatekeeper
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
  volumes:
  - name: foo
    secret:
      secretName: mysecret
      items:
      - key: username
        path: my-group/my-username

許可されない例 — 環境変数で secretKeyRef を介して参照される Secret:

apiVersion: v1
kind: Pod
metadata:
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

ACKPodsRequireSecurityContext

指定された名前空間の Pod に securityContext を含めることを要求します。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPodsRequireSecurityContext
metadata:
  name: pods-require-security-context
  annotations:
    description: "Requires that Pods must have a `securityContext` defined."
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]

許可される例 — Pod レベルの securityContext が存在する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: test
  namespace: test-gatekeeper
spec:
  securityContext:
    runAsNonRoot: false
  containers:
  - image: test
    name: test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

許可されない例 — securityContext が Pod ではなくコンテナにのみ存在する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKRestrictNamespaces

指定された名前空間で、指定されたリソースタイプのデプロイメントをブロックします。

重要度:

パラメーター:

パラメーター タイプ 説明
restrictedNamespaces 配列 一致したリソースタイプをデプロイできない名前空間。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKRestrictNamespaces
metadata:
  name: restrict-default-namespace
  annotations:
    description: "Restricts resources from using the restricted namespace."
spec:
  match:
    kinds:
      - apiGroups: ['']
        kinds: ['Pod']
  parameters:
    restrictedNamespaces:
      - "test-gatekeeper"

許可される例 — 制限されていない名前空間の Pod:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: test
  namespace: non-test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

許可されない例 — 制限された名前空間の Pod:

apiVersion: v1
kind: Pod
metadata:
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - name: mycontainer
    image: redis
  restartPolicy: Never

ACKRestrictRoleBindings

指定された名前空間の RoleBinding が、指定されたロールまたはクラスターロールのみをバインドするように制限します。

重要度:

パラメーター:

パラメーター タイプ 説明
restrictedRole オブジェクト バインドできないクラスターロールまたはロール。
allowedSubjects 配列 バインディングの受信を許可されたサブジェクト。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKRestrictRoleBindings
metadata:
  name: restrict-clusteradmin-rolebindings
  annotations:
    description: "Restricts use of sensitive role in specific rolebinding."
spec:
  match:
    kinds:
      - apiGroups: ["rbac.authorization.k8s.io"]
        kinds: ["RoleBinding"]
  parameters:
    restrictedRole:
      apiGroup: "rbac.authorization.k8s.io"
      kind: "ClusterRole"
      name: "cluster-admin"
    allowedSubjects:
      - apiGroup: "rbac.authorization.k8s.io"
        kind: "Group"
        name: "system:masters"

許可される例 — バインディングが許可されたサブジェクトを使用している:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: good-2
  namespace: test-gatekeeper
subjects:
  - kind: Group
    name: 'system:masters'
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

許可されない例 — バインディングが allowedSubjects にないサブジェクトを使用している:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: bad-1
  namespace: test-gatekeeper
subjects:
  - kind: ServiceAccount
    name: policy-template-controller
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

ACKNamespacesDeleteProtection

指定された名前空間の削除を防止します。

重要度:

バージョン 3.10.0.130-g0e79597d-aliyun 以降の Gatekeeper が必要です。

パラメーター:

パラメーター タイプ 説明
protectionNamespaces 配列 削除できない名前空間の名前。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKNamespacesDeleteProtection
metadata:
  name: namespace-delete-protection
spec:
  match:
    kinds:
      - apiGroups: ['']
        kinds: ['Namespace']
  parameters:
    protectionNamespaces:
      - test-gatekeeper

許可される例 — 保護リストにない名前空間:

apiVersion: v1
kind: Namespace
metadata:
  name: will-delete

不許可 — 保護リスト内の名前空間:

apiVersion: v1
kind: Namespace
metadata:
  name: test-gatekeeper

ACKServicesDeleteProtection

指定された名前空間の Service インスタンスの削除を防止します。

重要度:

パラメーター:

パラメーター タイプ 説明
protectionServices 配列 削除できない Service インスタンスの名前。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKServicesDeleteProtection
metadata:
  name: service-delete-protection
  annotations:
    description: "Protect to delete specific service."
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: ['']
        kinds: ['Service']
    namespaces: ["test-gatekeeper"]
  parameters:
    protectionServices:
      - test-svc

許可 — 保護リストにないサービス:

apiVersion: v1
kind: Service
metadata:
  name: good
  namespace: test-gatekeeper

許可されない例 — 保護リストにある Service:

apiVersion: v1
kind: Service
metadata:
  name: test-svc

インフラ

ACKBlockProcessNamespaceSharing

指定された名前空間の Pod が shareProcessNamespace を使用することをブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockProcessNamespaceSharing
metadata:
  name: block-share-process-namespace
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]

許可される例 — shareProcessNamespace が設定されていない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: test-3
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

許可されない例 — Pod に shareProcessNamespace: true が設定されている:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  shareProcessNamespace: true
  containers:
  - image: test
    name: test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

ACKEmptyDirHasSizeLimit

emptyDir ボリュームをマウントする際に sizeLimit を要求します。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKEmptyDirHasSizeLimit
metadata:
  name: empty-dir-has-sizelimit
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]

許可される例 — emptyDir ボリュームに sizeLimit がある:

apiVersion: v1
kind: Pod
metadata:
  name: test-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir:
      sizeLimit: "10Mi"

許可されない例 — emptyDir ボリュームに sizeLimit がない:

apiVersion: v1
kind: Pod
metadata:
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

ACKLocalStorageRequireSafeToEvict

指定された名前空間の Pod に cluster-autoscaler.kubernetes.io/safe-to-evict: "true" アノテーションを要求します。Cluster Autoscaler はデフォルトで hostPath または emptyDir ボリュームを持つ Pod をスキップします。このアノテーションにより、スケーリング中のエビクションが可能になります。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKLocalStorageRequireSafeToEvict
metadata:
  name: local-storage-require-safe-to-evict
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]

許可される例 — Pod に safe-to-evict アノテーションがある:

apiVersion: v1
kind: Pod
metadata:
  name: test-1
  namespace: test-gatekeeper
  annotations:
    'cluster-autoscaler.kubernetes.io/safe-to-evict': 'true'
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /data
      type: Directory

許可されない例 — Pod がボリュームをマウントしているが、アノテーションがない:

apiVersion: v1
kind: Pod
metadata:
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

ACKOSSStorageLocationConstraint

指定された名前空間の Pod にマウントできる OSS バケットのリージョンを制御します。

重要度:

パラメーター:

パラメーター タイプ 説明
mode 文字列 allowlist (デフォルト) は許可リストモードを有効にします。その他の値はブロックリストモードを有効にします。
regions 配列 許可リストまたはブロックリストに含めるリージョン ID。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKOSSStorageLocationConstraint
metadata:
  name: restrict-oss-location
  annotations:
    description: "Restricts location of oss storage in cluster."
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["PersistentVolume", "Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    mode: "allowlist"
    regions:
      - "cn-beijing"

許可 — OSS バケットは許可されたリージョン (cn-beijing) にあります:

apiVersion: v1
kind: Pod
metadata:
  name: pod-oss-csi-good
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
    - name: test
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeAttributes:
          bucket: "oss"
          url: "oss-cn-beijing.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          path: "/"

許可されない例 — OSS バケットが許可リストにないリージョン (cn-hangzhou) にある:

apiVersion: v1
kind: Pod
metadata:
  name: pod-oss-csi
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
    - name: test
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: pv-oss
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          bucket: "oss"
          url: "oss-cn-hangzhou.aliyuncs.com"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          path: "/"

ACKPVSizeConstraint

クラスター内の永続ボリューム (PV) の最大ディスク容量を設定します。

重要度:

パラメーター:

パラメーター タイプ 説明
maxSize 文字列 PV の最大ディスク容量。デフォルト:50Gi

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPVSizeConstraint
metadata:
  name: limit-pv-size
  annotations:
    description: "Limit the pv storage capacity size within a specified maximum amount."
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["PersistentVolume"]
  parameters:
    maxSize: "50Gi"

許可される例 — PV が 50 GiB の制限内で 25 GiB を要求する:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-oss-csi
  labels:
    alicloud-pvname: pv-oss
spec:
  capacity:
    storage: 25Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: ossplugin.csi.alibabacloud.com
    volumeHandle: pv-oss
    nodePublishSecretRef:
      name: oss-secret
      namespace: default
    volumeAttributes:
      bucket: "oss"
      url: "oss-cn-beijing.aliyuncs.com"
      otherOpts: "-o max_stat_cache_size=0 -o allow_other"
      path: "/"

許可されない例 — PV が 500 GiB を要求し、制限を超えている:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-oss-csi-bad
  labels:
    alicloud-pvname: pv-oss
spec:
  capacity:
    storage: 500Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: ossplugin.csi.alibabacloud.com
    volumeHandle: pv-oss
    nodePublishSecretRef:
      name: oss-secret
      namespace: default
    volumeAttributes:
      bucket: "oss"
      url: "oss-cn-beijing.aliyuncs.com"
      otherOpts: "-o max_stat_cache_size=0 -o allow_other"
      path: "/"

ACKPVCConstraint

永続ボリューム要求 (PVC) をデプロイできる名前空間を制限し、PV の最大ディスク容量を設定します。

重要度:

パラメーター:

パラメーター タイプ 説明
maxSize 文字列 PV の最大ディスク容量。デフォルト:50Gi
allowNamespaces 配列 PVC をデプロイできる名前空間。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPVCConstraint
metadata:
  name: limit-pvc-size-and-ns
  annotations:
    description: "Limit the maximum pvc storage capacity size and the namespace whitelists that can be deployed."
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["PersistentVolumeClaim"]
  parameters:
    maxSize: "50Gi"
    allowNamespaces:
      - "test-gatekeeper"

許可される例 — 許可された名前空間で、サイズ制限内の PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: disk-pvc
  namespace: test-gatekeeper
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

許可されない例 — PVC がサイズ制限を超えている、または allowNamespaces にない名前空間にある:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: bad-disk-pvc
  namespace: test-gatekeeper
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: bad-namespace-pvc
  namespace: test-gatekeeper-bad
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

ACKBlockVolumeTypes

指定された名前空間の Pod が指定されたボリュームタイプを使用することをブロックします。

重要度:

パラメーター:

パラメーター タイプ 説明
volumes 配列 Pod が使用を許可されていないボリュームタイプ。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockVolumeTypes
metadata:
  name: block-volume-types
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]
  parameters:
    volumes:
      - "gitRepo"

許可される例 — Pod が emptyDir ボリューム (ブロックされていない) を使用する:

apiVersion: v1
kind: Pod
metadata:
  name: use-empty-dir
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
  - name: emptydir-volume
    emptyDir: {}

許可されない例 — Pod が gitRepo ボリューム (ブロックされている) を使用する:

apiVersion: v1
kind: Pod
metadata:
  name: use-git-repo
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
  - name: git-volume
    gitRepo:
      repository: "git@***:***/my-git-repository.git"
      revision: "22f1d8406d464b0c08***"

K8s-general

ACKAllowedRepos

指定された名前空間の Pod が、指定されたイメージリポジトリからのみイメージをプルするように制限します。

重要度:

パラメーター:

パラメーター タイプ 説明
repos 配列 Pod がイメージをプルすることを許可されているイメージリポジトリ。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKAllowedRepos
metadata:
  name: allowed-repos
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    repos:
      - "registry-vpc.cn-hangzhou.aliyuncs.com/acs/"
      - "registry.cn-hangzhou.aliyuncs.com/acs/"

許可される例 — 許可されたリポジトリからプルされたイメージ:

apiVersion: v1
kind: Pod
metadata:
  name: pod-01
  namespace: test-gatekeeper
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/acs/test-webserver
    name: test-container-1
  initContainers:
  - image: registry.cn-hangzhou.aliyuncs.com/acs/test-webserver
    name: test-container

許可されない例 — 許可リストにないリポジトリからプルされたイメージ:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container

ACKBlockAutoinjectServiceEnv

指定された名前空間の Pod に enableServiceLinks: false を要求し、Service の IP アドレスが Pod の環境変数に注入されるのを防ぎます。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockAutoinjectServiceEnv
metadata:
  name: block-auto-inject-service-env
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — enableServiceLinks: false が設定されている:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  enableServiceLinks: false
  containers:
  - image: openpolicyagent/test-webserver:1.0
    name: test-container

許可されない例 — enableServiceLinks が設定されていない:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container

ACKBlockAutomountToken

指定された名前空間の Pod に automountServiceAccountToken: false を要求し、サービスアカウントトークンの自動マウントを防ぎます。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockAutomountToken
metadata:
  name: block-auto-mount-service-account-token
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — automountServiceAccountToken: false が設定されている:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  automountServiceAccountToken: false
  containers:
  - image: openpolicyagent/test-webserver:v1.0
    name: test-container

許可されない例 — automountServiceAccountToken が false に設定されていない:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container

ACKBlockEphemeralContainer

指定された名前空間の Pod がエフェメラルコンテナを起動することをブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockEphemeralContainer
metadata:
  name: block-ephemeral-container
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — エフェメラルコンテナがない:

apiVersion: v1
kind: Pod
metadata:
  name: good-1
  namespace: test-gatekeeper
spec:
  containers:
  - name: mycontainer
    image: redis

許可されない例 — Pod にエフェメラルコンテナが含まれている:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: non-test-gatekeeper
spec:
  containers:
  - name: mycontainer
    image: redis
  ephemeralContainers:
    - name: test
      image: test

ACKBlockLoadBalancer

指定された名前空間で LoadBalancer Service がデプロイされることをブロックします。

重要度:

パラメーター:

パラメーター タイプ 説明
restrictedNamespaces 配列 LoadBalancer Service をデプロイできない名前空間。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockLoadBalancer
metadata:
  name: block-load-balancer
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Service"]
    namespaces:
      - "test-gatekeeper"

許可される例 — LoadBalancer タイプのない Service:

apiVersion: v1
kind: Service
metadata:
  name: my-service-1
  namespace: test-gatekeeper
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376

許可されない例 — タイプ LoadBalancer の Service:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: test-gatekeeper
spec:
  type: LoadBalancer
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376

ACKBlockNodePort

指定された名前空間で NodePort Service がデプロイされることをブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockNodePort
metadata:
  name: block-node-port
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Service"]
    namespaces:
      - "test-gatekeeper"

許可される例 — NodePort タイプのない Service:

apiVersion: v1
kind: Service
metadata:
  name: my-service-1
  namespace: test-gatekeeper
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376

許可されない例 — タイプ NodePort の Service:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: test-gatekeeper
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376

ACKContainerLimits

指定された名前空間の Pod 内のすべてのコンテナにリソースの limits を要求します。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKContainerLimits
metadata:
  name: container-must-have-limits
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    cpu: "1000m"
    memory: "1Gi"

許可される例 — コンテナにリソース制限が設定されている:

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/acs/signed   # 有効な署名付きのイメージ
    name: test-container

許可されない例 — コンテナの制限がポリシーの最大値を超えている:

apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  namespace: non-test-gatekeeper
spec:
  containers:
  - image: openpolicyagent/test-webserver
    name: test-container
    resources:
      limits:
        memory: "100Gi"
        cpu: "2000m"

ACKExternalIPs

指定された名前空間の Service が、ポリシーにリストされている外部 IP アドレスのみを使用するように制限します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedIPs 配列 Service が使用を許可されている外部 IP アドレス。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKExternalIPs
metadata:
  name: external-ips
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Service"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedIPs:
      - "192.168.0.5"

許可される例 — Service に外部 IP がない:

apiVersion: v1
kind: Service
metadata:
  name: my-service-3
  namespace: test-gatekeeper
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376

許可されない例 — Service が allowedIPs にない外部 IP を使用している:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: test-gatekeeper
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376
  externalIPs:
    - 80.11.XX.XX

ACKImageDigests

指定された名前空間の Pod が、指定されたフォーマットのダイジェストを持つイメージを使用することを要求します。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKImageDigests
metadata:
  name: container-image-must-have-digest
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — イメージ参照にダイジェストが含まれている:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
  - image: openpolicyagent/test-webserver@sha256:12e469267d21d66ac9dcae33a4d3d202ccb2591869270b95d0aad7516c7d075b
    name: test-container

許可されない例 — イメージ参照にダイジェストがない:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
  initContainers:
  - image: k8s.gcr.io/test-webserver
    name: test-container2

ACKRequiredLabels

指定された名前空間の Pod が、ポリシーに一致するラベルを持つことを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedRegex 文字列 正規表現として表現される必須のラベル値。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKRequiredLabels
metadata:
  name: must-have-label-test
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    labels:
      - key: test
        allowedRegex: "^test.*$"

許可される例 — Pod に必須の正規表現に一致するラベルがある:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  name: test
  namespace: test-gatekeeper
  labels:
    'test': 'test_233'
spec:
  containers:
  - name: mycontainer
    image: redis

許可されない例 — ラベル値が必須の正規表現に一致しない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  name: bad2
  namespace: test-gatekeeper
  labels:
    'test': '233'
spec:
  containers:
  - name: mycontainer
    image: redis

ACKRequiredProbes

指定された名前空間の Pod が、指定されたタイプの readiness プローブと liveness プローブを持つことを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
probes 配列 必須のプローブタイプ。有効な値:readinessProbelivenessProbe
probeTypes 配列 必須のプローブ実装タイプ。有効な値:tcpSockethttpGetexec

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKRequiredProbes
metadata:
  name: must-have-probes
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    probes: ["readinessProbe", "livenessProbe"]
    probeTypes: ["tcpSocket", "httpGet", "exec"]

許可される例 — コンテナに readiness プローブと liveness プローブの両方がある:

apiVersion: v1
kind: Pod
metadata:
  name: p4
  namespace: test-gatekeeper
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox
    readinessProbe:
      exec:
        command:
          - cat
          - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
    livenessProbe:
      exec:
        command:
          - cat
          - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

許可されない例 — コンテナにプローブがない:

apiVersion: v1
kind: Pod
metadata:
  name: p1
  namespace: test-gatekeeper
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/busybox

ACKCheckNginxPath

Ingress リソースの spec.rules[].http.paths[].path にある高リスクの値をブロックします。1.2.1 より前の Ingress-nginx バージョンで有効にします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKCheckNginxPath
metadata:
  name: block-nginx-path
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: ["extensions", "networking.k8s.io"]
        kinds: ["Ingress"]
    namespaces:
      - "test-gatekeeper"

許可される例 — パスに安全な値が含まれている:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: good-paths
  namespace: test-gatekeeper
spec:
  rules:
    - host: cafe.example.com
      http:
        paths:
          - path: /tea
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          - path: /coffee
            pathType: Prefix
            backend:
              service:
                name: coffee-svc
                port:
                  number: 80

許可されない例 — パスに高リスクの値が含まれている:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: bad-path-secrets
  namespace: test-gatekeeper
spec:
  rules:
    - host: cafe.example.com
      http:
        paths:
          - path: /var/run/secrets
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80

ACKCheckNginxAnnotation

Ingress リソースの metadata.annotations にある高リスクの値をブロックします。1.2.1 より前の Ingress-nginx バージョンで有効にします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKCheckNginxAnnotation
metadata:
  name: block-nginx-annotation
spec:
  match:
    kinds:
      - apiGroups: ["extensions", "networking.k8s.io"]
        kinds: ["Ingress"]
    namespaces:
      - "test-gatekeeper"

許可される例 — アノテーションに安全な値が含まれている:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: good-annotations
  namespace: test-gatekeeper
  annotations:
    nginx.org/good: "value"
spec:
  rules:
    - host: cafe.example.com
      http:
        paths:
          - path: /tea
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          - path: /coffee
            pathType: Prefix
            backend:
              service:
                name: coffee-svc
                port:
                  number: 80

許可されない例 — アノテーションに高リスクの値が含まれている:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: var-run-secrets
  namespace: test-gatekeeper
  annotations:
    nginx.org/bad: "/var/run/secrets"
spec:
  rules:
    - host: cafe.example.com
      http:
        paths:
          - path: /tea
            pathType: Prefix
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          - path: /coffee
            pathType: Prefix
            backend:
              service:
                name: coffee-svc
                port:
                  number: 80

ACKBlockInternetLoadBalancer

インターネットに面した LoadBalancer Service の作成をブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockInternetLoadBalancer
metadata:
  name: block-internet-load-balancer
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Service"]
    namespaces: ["test-gatekeeper"]

許可される例 — LoadBalancer Service がイントラネットアドレスタイプを使用している:

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: non-test-gatekeeper
  annotations:
    'service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type': 'intranet'
spec:
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376
  type: LoadBalancer

許可されない例 — LoadBalancer Service がインターネットアドレスタイプを使用している:

apiVersion: v1
kind: Service
metadata:
  name: bad-service-2
  namespace: test-gatekeeper
  annotations:
    'service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type': 'internet'
spec:
  type: LoadBalancer
  selector:
    app: MyApp
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 9376

RatifyVerification

Ratify を使用して、指定された名前空間の Pod のイメージ署名またはセキュリティメタデータ (ソフトウェア部品表 (SBOM) など) を検証します。このポリシーを有効にする前に、クラスターの Marketplace から Ratify をインストールしてください。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: RatifyVerification
metadata:
  name: ratify-constraint
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["default"]

許可 — イメージの署名は有効です:

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/acs/signed   # Image with a valid signature
    name: test-container

許可されない例 — イメージに有効な署名がない:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/acs/unsigned   # Image without a valid signature
    name: test-container

PSP

これらのポリシーは、Kubernetes の Pod セキュリティポリシー (PSP) をそのまま置き換えることができます。

ACKPSPAllowPrivilegeEscalationContainer

指定された名前空間の Pod に allowPrivilegeEscalation 設定を含めることを要求します。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPAllowPrivilegeEscalationContainer
metadata:
  name: psp-allow-privilege-escalation-container
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — すべてのコンテナに allowPrivilegeEscalation: false が設定されている:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      allowPrivilegeEscalation: false
  initContainers:
    - image: test
      name: test2
      securityContext:
        allowPrivilegeEscalation: false

許可されない例 — allowPrivilegeEscalation が設定されていない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKPSPAllowedUsers

指定された名前空間の Pod に usergroupsupplementalGroups、および fsGroup 設定を含めることを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
runAsUser オブジェクト Kubernetes PSP のセマンティクスに従ったユーザー構成。詳細については、「Pod セキュリティポリシー」をご参照ください。
runAsGroup オブジェクト Kubernetes PSP のセマンティクスに従ったグループ構成。詳細については、「Pod セキュリティポリシー」をご参照ください。
supplementalGroups オブジェクト Kubernetes PSP のセマンティクスに従った補助グループ構成。詳細については、「Pod セキュリティポリシー」をご参照ください。
fsGroup オブジェクト Kubernetes PSP のセマンティクスに従った fsGroup 構成。詳細については、「Pod セキュリティポリシー」をご参照ください。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPAllowedUsers
metadata:
  name: psp-pods-allowed-user-ranges
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    runAsUser:
      rule: MustRunAs # MustRunAsNonRoot # RunAsAny
      ranges:
        - min: 100
          max: 200
    runAsGroup:
      rule: MustRunAs # MayRunAs # RunAsAny
      ranges:
        - min: 100
          max: 200
    supplementalGroups:
      rule: MustRunAs # MayRunAs # RunAsAny
      ranges:
        - min: 100
          max: 200
    fsGroup:
      rule: MustRunAs # MayRunAs # RunAsAny
      ranges:
        - min: 100
          max: 200

許可される例 — すべてのユーザー/グループ設定が許可された範囲内にある:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good2
  namespace: test-gatekeeper
spec:
  securityContext:
    fsGroup: 150
    supplementalGroups:
      - 150
  containers:
  - image: test
    name: test
    securityContext:
      runAsUser: 150
      runAsGroup: 150

許可されない例 — ユーザー/グループ設定が欠落している:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKPSPAppArmor

指定された名前空間の Pod に AppArmor 設定を含めることを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedProfiles 配列 Pod が使用を許可されている AppArmor プロファイル。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPAppArmor
metadata:
  name: psp-apparmor
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedProfiles:
      - runtime/default

許可される例 — すべてのコンテナに AppArmor アノテーションが存在する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good
  namespace: test-gatekeeper
  annotations:
    'container.apparmor.security.beta.kubernetes.io/test': 'runtime/default'
    'container.apparmor.security.beta.kubernetes.io/test2': 'runtime/default'
spec:
  containers:
  - image: test
    name: test
  initContainers:
  - image: test
    name: test2

許可されない例 — AppArmor アノテーションがない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKPSPCapabilities

指定された名前空間の Pod に Linux 機能設定を含めることを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedCapabilities 配列 コンテナが追加を許可されている Linux 機能。
requiredDropCapabilities 配列 コンテナがドロップしなければならない Linux 機能。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPCapabilities
metadata:
  name: psp-capabilities
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedCapabilities: ["CHOWN"]
    requiredDropCapabilities: ["NET_ADMIN", "SYS_ADMIN", "NET_RAW"]

許可される例 — 許可された機能のみが追加され、必須の機能がドロップされている:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good-4
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      capabilities:
        add:
          - CHOWN
        drop:
         - "NET_ADMIN"
         - "SYS_ADMIN"
         - "NET_RAW"

許可されない例 — 機能の構成がない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKPSPFlexVolumes

指定された名前空間の Pod が、ポリシーにリストされている FlexVolume ドライバーのみを使用するように制限します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedFlexVolumes 配列 Pod が使用を許可されている FlexVolume ドライバー。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPFlexVolumes
metadata:
  name: psp-flexvolume-drivers
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod", "PersistentVolume"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedFlexVolumes:
      - driver: "alicloud/disk"
      - driver: "alicloud/nas"
      - driver: "alicloud/oss"
      - driver: "alicloud/cpfs"

許可される例 — FlexVolume ドライバーが許可リストにある:

apiVersion: v1
kind: Pod
metadata:
  name: pv-nas
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
    - name: test
      flexVolume:
        driver: "alicloud/nas"

許可されない例 — FlexVolume ドライバーが許可リストにない:

apiVersion: v1
kind: Pod
metadata:
  name: pv-oss-flexvolume
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
    - name: test
      flexVolume:
        driver: "alicloud/ossxx"

ACKPSPForbiddenSysctls

指定された名前空間の Pod が指定された sysctl を使用することをブロックします。

重要度:

パラメーター:

パラメーター タイプ 説明
forbiddenSysctls 配列 Pod が使用を許可されていない sysctl。* を使用してすべての sysctl をブロックします。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPForbiddenSysctls
metadata:
  name: psp-forbidden-sysctls
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    forbiddenSysctls:
      # - "*" # Use * to forbid all sysctls
      - "kernel.*"

許可される例 — sysctl がブロックリストにない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good-2
  namespace: test-gatekeeper
spec:
  securityContext:
    sysctls:
      - name: 'net.ipv4.tcp_syncookies'
        value: "65536"
  containers:
  - image: test
    name: test

許可されない例 — sysctl がブロックリストのパターンに一致する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad-1
  namespace: test-gatekeeper
spec:
  securityContext:
    sysctls:
      - name: 'kernel.shm_rmid_forced'
        value: '1024'
  containers:
  - image: test
    name: test

ACKPSPFSGroup

指定された名前空間の Pod が、ポリシーに準拠した fsGroup 設定を使用することを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
rule 文字列 fsGroup ルール。有効な値:MustRunAsMayRunAsRunAsAny。詳細については、「ボリュームとファイルシステム」をご参照ください。
ranges オブジェクト 有効な fsGroup ID の範囲。min で最小値を、max で最大値を設定します。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPFSGroup
metadata:
  name: psp-fsgroup
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    rule: "MayRunAs" # "MustRunAs" or "RunAsAny"
    ranges:
      - min: 1
        max: 1000

許可される例 — fsGroup が許可された範囲内にある:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good
  namespace: test-gatekeeper
spec:
  securityContext:
    fsGroup: 100
  containers:
  - image: test
    name: test

許可されない例 — fsGroup 0 が許可された範囲外にある:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad-1
  namespace: non-test-gatekeeper
spec:
  securityContext:
    fsGroup: 0
  shareProcessNamespace: true
  containers:
  - image: test
    name: test

ACKPSPHostFilesystem

指定された名前空間の Pod にマウントされた hostPath ボリュームに条件を適用します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedHostPaths オブジェクト Pod がマウントを許可されている hostPath ボリューム。
readOnly boolean ボリュームが読み取り専用としてマウントされなければならないかどうか。
pathPrefix 文字列 hostPath ボリュームが一致しなければならないパスプレフィックス。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPHostFilesystem
metadata:
  name: psp-host-filesystem
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedHostPaths:
      - readOnly: true
        pathPrefix: "/foo"

許可される例 — hostPath ボリュームが許可されたプレフィックスを使用し、読み取り専用でマウントされている:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      readOnlyRootFilesystem: true

許可されない例 — hostPath ボリュームが許可されたプレフィックスに一致しないパスを使用している:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
  volumes:
  - name: test-volume
    hostPath:
      path: /data
      type: File

ACKPSPHostNamespace

指定された名前空間の Pod がホストの名前空間を共有することをブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPHostNamespace
metadata:
  name: psp-host-namespace
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — Pod がホストの名前空間を共有していない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

許可されない例 — Pod がホストの PID 名前空間を共有している:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  hostPID: true
  containers:
  - image: test
    name: test
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

ACKPSPHostNetworkingPorts

指定された名前空間の Pod がホストネットワークと指定されたポートを使用できるかどうかを制御します。

重要度:

パラメーター:

パラメーター タイプ 説明
hostNetwork boolean Pod がホストネットワークを使用することを許可されているかどうか。
min integer 許可される最小のホストポート番号。
max integer 許可される最大のホストポート番号。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPHostNetworkingPorts
metadata:
  name: psp-host-network-ports
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    hostNetwork: true
    min: 80
    max: 9000

許可される例 — ホストポートが許可された範囲内にある:

apiVersion: v1
kind: Pod
metadata:
  name: good-2
  namespace: test-gatekeeper
spec:
  hostNetwork: true
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    ports:
      - hostPort: 80
        containerPort: 80
  initContainers:
    - image: k8s.gcr.io/test-webserver
      name: test-container2
      ports:
        - hostPort: 8080
          containerPort: 8080

許可されない例 — ホストポート 22 が許可された範囲外にある:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: non-test-gatekeeper
spec:
  hostNetwork: true
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    ports:
      - hostPort: 22
        containerPort: 22

ACKPSPPrivilegedContainer

指定された名前空間の Pod が特権コンテナを実行することをブロックします。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPPrivilegedContainer
metadata:
  name: psp-privileged-container
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — 特権モードが設定されていない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

許可されない例 — コンテナに privileged: true が設定されている:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      privileged: true
  dnsPolicy: ClusterFirst
  restartPolicy: Never

ACKPSPProcMount

指定された名前空間の Pod が、ポリシーで指定された Proc Mount タイプを使用することを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
procMount 文字列 必須の Proc Mount タイプ。Default/proc のマウントをブロックします。Unmasked はそれを許可します。詳細については、「AllowedProcMountTypes」をご参照ください。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPProcMount
metadata:
  name: psp-proc-mount
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    procMount: Default  # Default or Unmasked

許可される例 — procMount: Default がポリシーに一致する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      procMount: "Default"

許可されない例 — procMount: Unmasked がポリシーに一致しない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad3
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      procMount: "Unmasked"
  initContainers:
  - image: test
    name: test2

ACKPSPReadOnlyRootFilesystem

指定された名前空間の Pod が読み取り専用のルートファイルシステムで実行されることを要求します。

重要度:

パラメーター:なし

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPReadOnlyRootFilesystem
metadata:
  name: psp-readonlyrootfilesystem
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"

許可される例 — readOnlyRootFilesystem: true が設定されている:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      readOnlyRootFilesystem: true

許可されない例 — readOnlyRootFilesystem: false

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad2
  namespace: non-test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      readOnlyRootFilesystem: false
  initContainers:
  - image: test
    name: test2

ACKPSPSELinuxV2

指定された名前空間の Pod を、ポリシーにリストされている SELinux オプションに制限します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedSELinuxOptions オブジェクト Pod が使用を許可されている SELinux オプション。詳細については、「SELinuxOptions v1 core」をご参照ください。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPSELinuxV2
metadata:
  name: psp-selinux-v2
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedSELinuxOptions:
      - level: s0:c123,c456
        role: object_r
        type: svirt_sandbox_file_t
        user: system_u

許可される例 — SELinux オプションが許可リストに一致する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good
  namespace: test-gatekeeper
spec:
  securityContext:
    seLinuxOptions:
      level: "s0:c123,c456"
  containers:
  - image: test
    name: test

許可されない例 — SELinux レベルが許可リストにない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      seLinuxOptions:
        level: "s0:c123,c455"

ACKPSPSeccomp

指定された名前空間の Pod が指定された seccomp プロファイルを使用することを要求します。

重要度:

パラメーター:

パラメーター タイプ 説明
allowedProfileTypes 配列 許可された seccomp プロファイルタイプ。
allowedProfiles 配列 許可された seccomp プロファイル名。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPSeccomp
metadata:
  name: psp-seccomp
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    allowedProfileTypes:
      # - Unconfined
      - RuntimeDefault
      - Localhost
    allowedProfiles:
      - runtime/default
      - docker/default
      - localhost/profiles/audit.json

許可される例 — seccomp プロファイルが許可されたタイプと名前に一致する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    securityContext:
      seccompProfile:
        type: Localhost
        localhostProfile: profiles/audit.json
  initContainers:
  - image: test
    name: test2
    securityContext:
      seccompProfile:
        type: Localhost
        localhostProfile: profiles/audit.json

許可されない例 — seccomp プロファイルが設定されていない:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKPSPVolumeTypes

指定された名前空間の Pod が、指定されたタイプのボリュームのみをマウントするように制限します。

重要度:

パラメーター:

パラメーター タイプ 説明
volumes 配列 Pod が使用を許可されているボリュームタイプ。* を使用してすべてのボリュームタイプを許可します。

制約:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKPSPVolumeTypes
metadata:
  name: psp-volume-types
spec:
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    volumes:
      # - "*" # Use * to allow all volume types
      - configMap
      # - emptyDir
      - projected
      - secret
      - downwardAPI
      - persistentVolumeClaim
      # - hostPath # Required for allowedHostPaths
      - flexVolume # Required for allowedFlexVolumes

許可される例 — Pod が FlexVolume ドライバー (許可リスト内) を使用する:

apiVersion: v1
kind: Pod
metadata:
  name: pv-oss
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
  volumes:
    - name: test
      flexVolume:
        driver: "alicloud/oss"

許可されない例 — Pod が hostPath ボリューム (許可リストにない) を使用する:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
  volumes:
  - name: test-volume
    hostPath:
      path: /data