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

:ACKの定義済みセキュリティポリシー

最終更新日:Nov 14, 2024

ポッドのセキュリティポリシーを設定して、ポッドのデプロイまたは更新要求のセキュリティを検証できます。 クラスターポリシー管理機能には、コンプライアンス、インフラ、K8s-general、PSPの4つの組み込みルールライブラリがあります。

背景情報

ACKは、次のタイプの定義済みセキュリティポリシーを提供します。

  • コンプライアンス: このタイプのセキュリティポリシーは、Alibaba Cloud Kubernetes Security Hardeningなどのコンプライアンス基準に基づいてカスタマイズされています。

  • Infra: このタイプのセキュリティポリシーは、クラウドインフラストラクチャリソースのセキュリティを確保および強化するために使用されます。

  • K8s-general: このタイプのセキュリティポリシーは、Container Service for Kubernetes (ACK) クラスターの機密リソースの設定を制限および正規化し、ACKクラスターのアプリケーションのセキュリティを強化するために使用されます。

  • PSP: このタイプのセキュリティポリシーは、オープンソースKubernetesのポッドセキュリティポリシー (PSP) の代替として使用でき、同じアクセス制御機能を提供します。

定義済みセキュリティポリシー

次の表に、ACKの事前定義されたセキュリティポリシーを示します。

カテゴリ

ポリシー

説明

[重大度]

コンプライアンス

ACKNoEnvVarSecrets

ポッド環境変数を指定する場合、secretKeyRefパラメーターを使用してSecretsを参照することはできません。

medium

ACKPodsRequireSecurityContext

指定された名前空間のポッドは、securityContextパラメーターで設定する必要があります。

low

ACKRestrictNamespaces

指定された型のリソースは、指定された名前空間にデプロイできません。

low

ACKRestrictRoleBindings

指定された名前空間内のRoleBindingsを使用して、指定されたロールまたはクラスターロールのみをバインドできます。

high

ACKNamespacesDeleteProtection

指定された名前空間は削除できません。

medium

ACKServicesDeleteProtection

指定された名前空間のサービスインスタンスは削除できません。

medium

インフラ

ACKBlockProcessNamespaceSharing

指定された名前空間内のポッドは、shareProcessNamespaceパラメーターで構成できません。

high

ACKEmptyDirHasSizeLimit

emptyDirボリュームをマウントするときは、sizelimitパラメーターを設定する必要があります。

low

ACKLocalStorageRequireSafeToEvict

指定された名前空間のポッドは、"cluster-autoscaler.kubernetes.io/safe-to-evict": "true" のアノテーションで構成する必要があります。 デフォルトでは、autoscalerは、自動スケーリング動作中にhostPathボリュームまたはemptyDirボリュームでマウントされたポッドを削除しません。 自動スケーラーがこれらのポッドを削除できるようにするには、このアノテーションをポッドの設定に追加する必要があります。

low

ACKOSSStorageLocationConstraint

指定されたリージョンのObject Storage Service (OSS) バケットは、指定された名前空間のポッドにマウントできます。

low

ACKPVSizeConstraint

ACKクラスターに作成される永続ボリューム (PV) に対して要求できる最大ディスク容量を指定します。

medium

ACKPVCConstraint

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

medium

ACKBlockVolumeTypes

指定された名前空間のポッドは、指定されたボリュームを使用できません。

medium

K8s-general

ACKAllowedRepos

指定された名前空間内のポッドは、指定されたイメージリポジトリからのみイメージをプルできます。

high

ACKBlockAutoinjectServiceEnv

指定された名前空間内のポッドは、サービスIPアドレスがポッド環境変数に注入されないことを指定するenableServiceLinks: falseで構成する必要があります。

low

ACKBlockAutomountToken

指定された名前空間のポッドは、automountServiceAccountToken: falseで構成する必要があります。これは、サービスアカウントが自動的にマウントされないことを指定します。

high

ACKBlockEphemeralContainer

指定された名前空間のポッドは、エフェメラルコンテナを起動できません。

medium

ACKBlockLoadBalancer

指定した名前空間にLoadBalancerサービスをデプロイできません。

high

ACKBlockNodePort

NodePortサービスは、指定された名前空間にデプロイできません。

high

ACKContainerLimits

指定された名前空間のポッドは、リソース制限で設定する必要があります。

low

ACKExternalIPs

指定された名前空間のサービスは、ポリシーコンテンツで指定されていない外部IPアドレスを使用できません。

high

ACKImageDigests

指定された名前空間のポッドは、指定された形式に準拠したダイジェストのイメージからデプロイする必要があります。

low

ACKRequiredLabels

指定した名前空間のポッドには、ポリシーの内容に準拠したラベルが必要です。

low

ACKRequiredProbes

指定された名前空間のポッドは、指定されたタイプの準備プローブとライブネスプローブで構成する必要があります。

medium

ACKCheckNginxPath

Ingress設定のspec.ru les[].http.paths[].pathパラメーターに危険な設定を含めることはできません。 1.2.1より前のバージョンのIngress-nginxに対してこのポリシーを有効にすることを推奨します。

high

ACKCheckNginxAnnotation

Ingress設定のmetadata.annotationsパラメーターに危険な設定を含めることはできません。 1.2.1より前のバージョンのIngress-nginxに対してこのポリシーを有効にすることを推奨します。

high

ACKBlockInternetLoadBalancer

インターネット向けLoadBalancerサービスは作成できません。

high

RatifyVerification

クラスターのMarketplaceページに承認コンポーネントをインストールした後、そのコンポーネントを使用して、特定の名前空間にデプロイされたポッドのイメージ内の署名やソフトウェア部品表 (SBOM) などのセキュリティメタデータを検証できます。

high

PSP

ACKPSPAllowPrivilegeEscalationContainer

指定された名前空間のポッドは、allowPrivilegeEscalationパラメーターで設定する必要があります。

medium

ACKPSPAallowedUsers

指定された名前空間のポッドは、usergroupsupplementalGroups、およびfsGroup設定で構成する必要があります。

medium

ACKPSPAppArmor

指定した名前空間のポッドは、AppArmor設定で構成する必要があります。

low

ACKPSPCapabilities

指定された名前空間のポッドは、Linux Capabilities設定で構成する必要があります。

high

ACKPSPFSGroup

指定した名前空間のポッドは、ポリシーの内容に準拠したfsGroup設定で構成する必要があります。

medium

ACKPSPFlexVolumes

指定された名前空間内のポッドは、ポリシーコンテンツで指定されていないFlexVolumeドライバを使用できません。

medium

ACKPSPForbiddenSysctls

指定された名前空間のポッドは、指定されたsysctlsを使用できません。

high

ACKPSPBHostFilesystem

指定された名前空間内のポッドにマウントされるhostPathボリュームは、指定された条件を満たす必要があります。

high

ACKPSPHostNamespace

指定された名前空間のポッドは、ホスト名前空間を共有できません。

high

ACKPSPSHostNetworkingPorts

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

high

ACKPSPBrivilegedContainer

指定された名前空間のポッドは特権コンテナを実行できません。

high

ACKPSPCrocMount

指定された名前空間のポッドは、ポリシーコンテンツで指定されたProcマウントタイプで構成する必要があります。

low

ACKPSPReadOnlyRootFilesystem

指定された名前空間のポッドは、読み取り専用のルートファイルシステムで実行する必要があります。

medium

ACKPSPSLINuxV2

指定された名前空間内のポッドは、ポリシーコンテンツで指定されていないSELinuxオプションで構成することはできません。

low

ACKPSPSeccomp

指定された名前空間のポッドは、指定されたseccompプロファイルで設定する必要があります。

low

ACKPSPVolumeTypes

指定された型のボリュームのみ、指定された名前空間のポッドにマウントできます。

medium

コンプライアンス

  • ACKNoEnvVarSecrets

    ポリシーの説明: ポッド環境変数を指定する場合、secretKeyRefパラメーターを使用してSecretsを参照することはできません。

    重大度: 中

    パラメーターの説明: なし

    例:

    制約条件:

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

    許可:

    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

    禁止:

    apiVersion: v1
    kind: Pod
    metadata:
      name: bad
      namespace: test-gatekeeper
    spec:
      containers:
      - name: mycontainer
        image: redis
        env:
          - name: SECRET_USERNAME
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: username
          - name: SECRET_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysecret
                key: password
      restartPolicy: Never
  • ACKPodsRequireSecurityContext

    ポリシーの説明: 指定された名前空間のポッドは、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"]

    許可:

    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: {}

    禁止:

    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: null
      labels:
        run: test
      name: bad
      namespace: non-test-gatekeeper
    spec:
      containers:
      - image: test
        name: test2
      - image: test
        name: test
        resources: {}
        securityContext:
          runAsNonRoot: false
  • ACKRestrictNamespaces

    ポリシーの説明: 指定された型のリソースは、指定された名前空間にデプロイできません。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    restrictedNamespaces

    array

    リソースをデプロイできない名前空間の名前を指定します。

    例:

    制約条件:

    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"

    許可:

    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: {}

    禁止:

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

    ポリシーの説明: 指定された名前空間のRoleBindingsを使用して、指定されたロールまたはクラスターロールのみを割り当てることができます。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    restrictedRole

    object

    割り当てが許可されていないクラスターの役割を指定します。

    allowedSubjects

    array

    マウントできるサブジェクトを指定します。

    例:

    制約条件:

    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

    禁止:

    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

    ポリシーの説明: 指定された名前空間は削除できません。 protectionNamespacesパラメーターを、削除できない名前空間の名前に設定できます。

    このポリシーを有効にするには、ゲートキーパー3.10.0.130-g0e79597d-aliyun以降を使用する必要があります。 gatekeeperのバージョンの詳細については、「gatekeeper」をご参照ください。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    protectionNamespaces

    array

    削除できない名前空間の名前。

    例:

    制約条件:

       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インスタンスの名前に設定できます。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    protectionServices

    array

    指定された名前空間内の、削除できない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

    禁止:

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

インフラ

  • ACKBlockProcessNamespaceSharing

    ポリシーの説明: 指定された名前空間のポッドをshareProcessNamespaceパラメーターで構成することはできません。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

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

    許可:

    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: {}

    禁止:

    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"]

    許可:

    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"

    禁止:

    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

    ポリシーの説明: 指定された名前空間のポッドは、"cluster-autoscaler.kubernetes.io/safe-to-evict": "true" のアノテーションで構成する必要があります。 このアノテーションで構成されていないポッドは、スケーリングアクティビティ中に削除されません。

    重大度: 低い

    パラメーターの説明: なし

    例:

    制約条件:

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

    許可:

    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:
          # directory location on host
          path: /data
          # this field is optional
          type: Directory

    禁止:

    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

    ポリシーの説明: 指定したリージョンのOSSバケットを指定した名前空間のポッドにマウントできるかどうかを指定します。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    モード

    String

    ホワイトリストモードを有効にするかどうかを指定します。 デフォルト値: allowlist。ホワイトリストモードが有効になっていることを示します。 その他の値は、ブラックリストモードが有効であることを示します。

    リージョン

    array

    指定されたリージョン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"

    許可:

    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: "/"

    禁止:

    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

    ポリシーの説明: ACKクラスターで作成されるPVに対して要求できる最大ディスク容量を指定します。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    maxSize

    String

    ACKクラスターのPVに要求できる最大ディスク容量。 デフォルト値: 50 GiB。

    例:

    制約条件:

    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"

    許可:

    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: "/"

    禁止:

    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

    String

    PVに要求できる最大ディスク容量。 デフォルト値: 50 GiB。

    allowNamespaces

    array

    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"

    許可:

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

    禁止:

    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

    ポリシーの説明: 指定した名前空間内のポッドで使用できないボリュームを指定します。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    ボリューム

    array

    使用が許可されていないボリュームのリスト。

    例:

    制約条件:

    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"

    許可:

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

    禁止:

    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

    ポリシーの説明: 指定された名前空間内のポッドは、指定されたイメージリポジトリからのみイメージをプルできます。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    リポジトリ

    array

    ポッドがイメージをプルできるイメージリポジトリを指定します。

    例:

    制約条件:

    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
      initContainers:
      - image: k8s.gcr.io/test-webserver
        name: test-container-3
  • ACKBlockAutoinjectServiceEnv

    ポリシーの説明: 指定された名前空間内のポッドは、サービスIPアドレスがポッド環境変数に挿入されないことを指定するenableServiceLinks: falseで構成する必要があります。

    重大度: 低い

    パラメーターの説明: なし

    例:

    制約条件:

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

    許可:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-0
      namespace: test-gatekeeper
    spec:
      enableServiceLinks: false
      containers:
      - image: openpolicyagent/test-webserver:1.0
        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
  • ACKBlockAutomountToken

    ポリシーの説明: 指定された名前空間のポッドは、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"

    許可:

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-0
      namespace: test-gatekeeper
    spec:
      automountServiceAccountToken: false
      containers:
      - image: openpolicyagent/test-webserver:v1.0
        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
  • ACKBlockEphemeralContainer

    ポリシーの説明: 指定された名前空間のポッドは、エフェメラルコンテナを起動できません。

    重大度: 中

    パラメーターの説明: なし

    例:

    制約条件:

    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

    禁止:

    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サービスをデプロイすることはできません。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    restrictedNamespaces

    array

    リソースをデプロイできない名前空間の名前を指定します。

    例:

    制約条件:

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

    許可:

    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

    禁止:

    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サービスをデプロイすることはできません。

    重大度: 低い

    パラメーターの説明: なし

    例:

    制約条件:

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

    許可:

    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

    禁止:

    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

    ポリシーの説明: 指定された名前空間のポッドは、リソース制限で設定する必要があります。

    重大度: 低い

    パラメーターの説明: なし

    例:

    制約条件:

    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: openpolicyagent/test-webserver
        name: test-container
        resources:
          limits:
            memory: "100Mi"
            cpu: "500m"

    禁止:

    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

    ポリシーの説明: 指定された名前空間のサービスは、ポリシーコンテンツで指定されていない外部IPアドレスを使用できません。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedIP

    array

    使用できる外部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"

    許可:

    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

    禁止:

    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

    ポリシーの説明: 指定された名前空間のポッドは、ダイジェストが指定された形式に準拠しているイメージからデプロイする必要があります。

    重大度: 低い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKImageDigests
    メタデータ:
      name: container-image-must-have-digest
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: pod-0
      名前空間: test-gatekeeper
    spec:
      containers:
      -image: openpolicyagent/test-webserver @ sha256:12e469267d21d66ac9dcae33a4d3d202ccb2591869270b95d0aad7516c7d075b
        名前: test-container 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: bad-1
      名前空間: test-gatekeeper
    spec:
      containers:
      -image: k8s.gcr.io/test-webserver
        名前: test-container
      initContainers:
      -image: k8s.gcr.io/test-webserver
        名前: test-container2 
  • ACKRequiredLabels

    ポリシーの説明: 指定された名前空間のポッドには、allowedRegexパラメーターで指定されたラベルが必要です。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedRegex

    String

    ラベルを正規表現で指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKRequiredLabels
    メタデータ:
      名前: must-have-label-test
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      パラメータ:
    # message: ''
        ラベル:
          -キー: テスト
            # 値
            allowedRegex: "^ test.*$" 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      name: test
      名前空間: test-gatekeeper
      ラベル:
        'test': 'test_233'
    spec:
      containers:
      -name: mycontainer
        画像: redis 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      名前: bad2
      名前空間: test-gatekeeper
      ラベル:
        'test': '233'
    spec:
      containers:
      -name: mycontainer
        画像: redis 
  • ACKRequiredProbes

    ポリシーの説明: 指定された名前空間のポッドは、指定されたタイプのreadiness probesliveness probesで構成する必要があります。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    プローブ

    array

    ポッドに対して構成する必要があるプローブを指定します。 有効な値は、readinessProbeおよびlivenessProbeです。

    probeTypes

    array

    ポッドに対して構成する必要があるプローブの種類を指定します。 有効な値: tcpSockethttpGet、およびexec

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKRequiredProbes
    メタデータ:
      名前: must-have-probes
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        probes: ["readinessProbe", "livenessProbe"]
        probeTypes: ["tcpSocket", "httpGet", "exec"] 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: p4
      名前空間: test-gatekeeper
    spec:
      containers:
      -name: liveness
        画像: k8s.gcr.io/busybox
        readinessProbe:
          exec:
            command:
              -猫
              - /tmp /健康
          initialDelaySeconds: 5
          periodSeconds: 5
        livenessProbe:
          exec:
            command:
              -猫
              - /tmp /健康
          initialDelaySeconds: 5
          periodSeconds: 5 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: p1
      名前空間: test-gatekeeper
    spec:
      containers:
      -name: liveness
        画像: k8s.gcr.io/busybox 
  • ACKCheckNginxPath

    このポリシーでは、Ingressのspec.ru les[].http.paths[].pathフィールドでリスクの高い設定を使用できません。 バージョンが1.2.1より前のIngress-nginxのポリシーを有効にすることを推奨します。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKCheckNginxPath
    メタデータ:
      name: block-nginx-path
    spec:
      enforcementAction: 拒否
      マッチ:
        種類:
          -apiGroups: ["extensions", "networking.k8s.io"]
            kinds: ["Ingress"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      name: good-paths
      名前空間: test-gatekeeper
    spec:
      rules:
        - host: foo.example.com
          http:
            paths:
              - path: /tea
                pathType: プレフィックス
                backend:
                  service:
                    name: tea-svc
                    port:
                      number: 80
              - path: /coffee
                pathType: プレフィックス
                backend:
                  service:
                    name: coffee-svc
                    port:
                      番号: 80 

    禁止:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: bad-path-secrets
      名前空間: test-gatekeeper
    spec:
      rules:
        - host: foo.example.com
          http:
            paths:
              -パス: /var/run/secrets
                pathType: プレフィックス
                backend:
                  service:
                    name: tea-svc
                    port:
                      番号: 80 
  • ACKCheckNginxアノテーション

    このポリシーでは、Ingressのmetadata.annotationsフィールドでリスクの高い設定を使用できません。 バージョンが1.2.1より前のIngress-nginxのポリシーを有効にすることを推奨します。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKCheckNginxAnnotation
    メタデータ:
      name: block-nginx-annotation
    spec:
      マッチ:
        種類:
          -apiGroups: ["extensions", "networking.k8s.io"]
            kinds: ["Ingress"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      name: good-annotations
      名前空間: test-gatekeeper
      アノテーション:
        nginx.org/good: "value"
    spec:
      rules:
        - host: foo.example.com
          http:
            paths:
              - path: /tea
                pathType: プレフィックス
                backend:
                  service:
                    name: tea-svc
                    port:
                      number: 80
              - path: /coffee
                pathType: プレフィックス
                backend:
                  service:
                    name: coffee-svc
                    port:
                      番号: 80 

    禁止:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      名前: var-run-secrets
      名前空間: test-gatekeeper
      アノテーション:
        nginx.org/bad: "/var/run/secrets"
    spec:
      rules:
        - host: foo.example.com
          http:
            paths:
              - path: /tea
                pathType: プレフィックス
                backend:
                  service:
                    name: tea-svc
                    port:
                      number: 80
              - path: /coffee
                pathType: プレフィックス
                backend:
                  service:
                    name: coffee-svc
                    port:
                      番号: 80 
  • ACKBlockInternetLoadBalancer

    ポリシーの説明: インターネット接続のLoadBalancerサービスは作成できません。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKBlockInternetLoadBalancer
    メタデータ:
      名前: block-internet-load-balancer
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["サービス"]
        名前空間: ["test-gatekeeper"] 

    許可:

    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: my-service
      名前空間: non-test-gatekeeper
      アノテーション:
        'service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type': 'intranet'
    spec:
      セレクタ:
        アプリ: MyApp
      ポート:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 9376
      タイプ: LoadBalancer 

    禁止:

    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: bad-service-2
      名前空間: test-gatekeeper
      アノテーション:
        'service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type': 'internet'
    spec:
      type: LoadBalancer
      セレクタ:
        アプリ: MyApp
      ポート:
        - name: http
          protocol: TCP
          port: 80
          targetPort: 9376 
  • RatifyVerification

    ポリシーの説明: クラスターのMarketplaceページに承認コンポーネントをインストールした後、そのコンポーネントを使用して、特定の名前空間にデプロイされたポッドのイメージ内の署名やソフトウェア部品表 (SBOM) などのセキュリティメタデータを検証できます。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: RatifyVerification
    メタデータ:
      名前: ratify-constraint
    spec:
      enforcementAction: 拒否
    マッチ:
      種類:
        - apiGroups: [""]
          kinds: ["ポッド"]
      名前空間: ["default"] 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: pod-1
      名前空間: test-gatekeeper
    spec:
      containers:
      -image: registry.cn-hangzhou.aliyuncs.com/acs/signed# 有効な署名でイメージをデプロイします。
        名前: test-container 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: bad-1
      名前空間: test-gatekeeper
    spec:
      containers:
      -image: registry.cn-hangzhou.aliyuncs.com/acs/unsigned# 有効な署名なしでイメージをデプロイします。
        名前: test-container 

PSP

  • ACKPSPAllowedUsers

    ポリシーの説明: 指定された名前空間のポッドは、usergroupsupplementalGroups、およびfsGroup設定で構成する必要があります。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    runAsUser

    object

    パラメーターの詳細については、ユーザーの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。

    runAsGroup

    object

    パラメーターの詳細については、グループの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。

    supplementalGroups

    object

    パラメーターの詳細については、SupplementalGroupsの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。

    fsGroup

    object

    パラメーターの詳細については、fsGroupの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKPSPAallowedUsers
    メタデータ:
      名前: psp-pods-allowed-user-ranges
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        runAsUser:
          ルール: MustRunAs # MustRunAsNonRoot # RunAsAny
          範囲:
            -分: 100
              max: 200
        runAsGroup:
          ルール: MustRunAs # MayRunAs # RunAsAny
          範囲:
            -分: 100
              max: 200
        supplementalGroups:
          ルール: MustRunAs # MayRunAs # RunAsAny
          範囲:
            -分: 100
              max: 200
        fsGroup:
          ルール: MustRunAs # MayRunAs # RunAsAny
          範囲:
            -分: 100
              max: 200 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good2
      名前空間: test-gatekeeper
    spec:
      securityContext:
        fsGroup: 150
        supplementalGroups:
          -150
      containers:
      -画像: テスト
        name: test
        securityContext:
          runAsUser: 150
          runAsGroup: 150 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPAllowPrivilegeEscalationContainer

    ポリシーの説明: 指定された名前空間のポッドは、allowPrivilegeEscalationパラメーターで設定する必要があります。

    重大度: 中

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPAllowPrivilegeEscalationContainer
    メタデータ:
      名前: psp-allow-privilege-escalation-container
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: 良い
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          allowPrivilegeEscalation: false
      initContainers:
        -画像: テスト
          名前: test2
          securityContext:
            allowPrivilegeEscalation: false 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPAppArmor

    ポリシーの説明: 指定した名前空間のポッドは、AppArmor設定で構成する必要があります。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    プローブ

    array

    ポッドに対して構成する必要があるプローブを指定します。 有効な値は、readinessProbeおよびlivenessProbeです。

    probeTypes

    array

    ポッドに対して構成する必要があるプローブの種類を指定します。 有効な値: tcpSockethttpGet、およびexec

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPAppArmor
    メタデータ:
      名前: psp-apparmor
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        allowedProfiles:
          -ランタイム /デフォルト 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: 良い
      名前空間: test-gatekeeper
      アノテーション:
        'container.apparmor.security.beta.kubernetes.io/test': 'runtime/default'
        'container.apparmor.security.beta.kubernetes.io/test2': 'runtime/default'
    spec:
      containers:
      -画像: テスト
        name: test
      initContainers:
      -画像: テスト
        名前: test2 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPCapabilities

    ポリシーの説明: 指定された名前空間のポッドは、Linux Capabilities設定で構成する必要があります。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedCapabilities

    array

    ポッドに設定できる機能を指定します。

    requiredDropCapabilities

    array

    ポッドに設定できない機能を指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPCapabilities
    メタデータ:
      名前: psp-capabilities
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        allowedCapabilities: ["CHOWN"]
        requiredDropCapabilities: ["NET_ADMIN" 、"SYS_ADMIN" 、"NET_RAW"] 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good-4
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          機能:
            追加:
              -CHOWN
            ドロップ:
             -"NET_ADMIN"
             -"SYS_ADMIN"
             -"NET_RAW" 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad-1
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPFlexVolumes

    ポリシーの説明: 指定された名前空間のポッドは、ポリシーコンテンツで指定されていないFlexVolumeドライバーを使用できません。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedFlexVolumes

    array

    ポッドで使用できるFlexVolumeドライバーを指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKPSPFlexVolumes
    メタデータ:
      名前: psp-flexvolume-drivers
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["Pod", "PersistentVolume"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        allowedFlexVolumes: #[]
          -ドライバ: "alicloud/disk"
          -ドライバー: "alicloud/nas"
          -ドライバー: "alicloud/oss"
          -ドライバー: "alicloud/cpfs" 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      name: pv-nas
      名前空間: test-gatekeeper
    spec:
      containers:
        -name: テスト
          画像: テスト
      volumes:
        -name: テスト
          flexVolume:
            ドライバー: "alicloud/nas" 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: pv-oss-flexvolume
      名前空間: test-gatekeeper
    spec:
      containers:
        -name: テスト
          画像: テスト
      volumes:
        -name: テスト
          flexVolume:
            ドライバー: "alicloud/ossxx" 
  • ACKPSPForbiddenSysctls

    ポリシーの説明: 指定された名前空間のポッドは、指定されたsysctlsを使用できません。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    forbiddenSysctls

    array

    ポッドで使用できないsysctlsを指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPForbiddenSysctls
    メタデータ:
      名前: psp-banded-sysctls
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        forbiddenSysctls:
          # - "*" # * はすべてのsysctlsを禁止するために使用できます
          -「カーネル。* 」 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good-2
      名前空間: test-gatekeeper
    spec:
      securityContext:
        sysctls:
          -名: 'net.ipv4.tcp_syncookies'
            値: "65536"
      containers:
      -画像: テスト
        名前: test 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad-1
      名前空間: test-gatekeeper
    spec:
      securityContext:
        sysctls:
          -名: 'kernel.shm_rmid_forced'
            値: '1024'
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPFSGroup

    ポリシーの説明: 指定された名前空間のポッドは、ポリシーの内容に準拠したfsGroup設定で構成する必要があります。

    重大度: 中

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    ルール

    String

    パラメーターの詳細については、「KubernetesのPSPのfsGroupの設定」をご参照ください。MustRunAsMayRunAs、およびRunAsAnyパラメーターがサポートされています。 詳細については、「ボリュームとファイルシステム」をご参照ください。

    範囲

    object

    有効な値:

    • min: fsGroup IDの最小値。

    • max: fsGroup IDの最大値。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPFSGroup
    メタデータ:
      名前: psp-fsgroup
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        ルール: "MayRunAs" #"MustRunAs" #"MayRunAs" 、"RunAsAny"
        範囲:
          -分: 1
            max: 1000 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: 良い
      名前空間: test-gatekeeper
    spec:
      securityContext:
        fsGroup: 100
      containers:
      -画像: テスト
        名前: test 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad-1
      名前空間: non-test-gatekeeper
    spec:
      securityContext:
        fsGroup: 0
      shareProcessNamespace: true
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPFostFilesystem

    ポリシーの説明: 指定された名前空間内のポッドにマウントされるhostPathボリュームは、指定された条件を満たす必要があります。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedHostPaths

    object

    ポッドにマウントできるhostPathボリュームを指定します。

    readOnly

    Boolean

    ボリュームが読み取り専用かどうかを指定します。

    pathPrefix

    String

    ボリュームのプレフィックスを指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKPSPHostFlesystem
    メタデータ:
      名前: psp-host-filesystem
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        allowedHostPaths:
          -readOnly: true
            pathPrefix: "/foo" 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good1
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        volumeMounts:
          -name: test-volume
            mountPath: "/projected-volume"
            readOnly: true
      volumes:
      -name: test-volume
        hostPath:
          パス: /foo 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
      volumes:
      -name: test-volume
        hostPath:
          path: /data
          type: ファイル 
  • ACKPSPHostNamespace

    ポリシーの説明: 指定された名前空間のポッドは、ホスト名前空間を共有できません。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKPSPHostNamespace
    メタデータ:
      名前: psp-host-namespace
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: 良い
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: 決して
    status: {} 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      hostPID: true
      containers:
      -画像: テスト
        name: test
        resources: {}
      dnsPolicy: ClusterFirst
      restartPolicy: 決して
    status: {} 
  • ACKPSPHostNetworkingPorts

    ポリシーの説明: 指定した名前空間内のポッドがホストネットワークと指定したポートを使用できるかどうかを指定します。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    hostNetwork

    Boolean

    ポッドがホストネットワークを使用できるかどうかを指定します。

    min

    int

    最小のホストポート番号を指定します。

    max

    int

    最大ホストポート番号を指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    kind: ACKPSPSHostNetworkingPorts
    メタデータ:
      名前: psp-host-network-ports
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        hostNetwork: true
        分: 80
        max: 9000 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: good-2
      名前空間: test-gatekeeper
    spec:
      hostNetwork: true
      containers:
      -image: k8s.gcr.io/test-webserver
        名前: test-container
        ポート:
          -hostPort: 80
            containerPort: 80
      initContainers:
        -image: k8s.gcr.io/test-webserver
          名前: test-container2
          ポート:
            -hostPort: 8080
              containerPort: 8080 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      名前: bad-1
      名前空間: non-test-gatekeeper
    spec:
      hostNetwork: true
      containers:
      -image: k8s.gcr.io/test-webserver
        名前: test-container
        ポート:
          -hostPort: 22
            containerPort: 22 
  • ACKPSPBrivilegedContainer

    ポリシーの説明: 指定された名前空間のポッドは特権コンテナを実行できません。

    重大度: 高い

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPPrivilegedContainer
    メタデータ:
      名前: psp-privileged-container
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good1
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        名前: test 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          privileged: true
      dnsPolicy: ClusterFirst
      restartPolicy: 決して 
  • ACKPSPConMount

    ポリシーの説明: 指定された名前空間のポッドは、ポリシーコンテンツで指定されたProcマウントタイプで構成する必要があります。

    重大度: 高い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    procMount

    String

    Procマウントタイプを指定します。 有効な値:

    • デフォルト: /procディレクトリはマウントできません。

    • Unmasked: /procディレクトリをマウントできます。

    詳細については、「AllowedProcMountTypes」をご参照ください。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPCrocMount
    メタデータ:
      名前: psp-proc-mount
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        procMount: デフォルト# DefaultまたはUnmasked 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good1
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          procMount: 「デフォルト」 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad3
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          procMount: "Unmasked"
      initContainers:
      -画像: テスト
        名前: test2 
  • ACKPSPREadOnlyRootFlesystem

    ポリシーの説明: 指定された名前空間のポッドは、読み取り専用のルートファイルシステムで実行する必要があります。

    重大度: 中

    パラメーターの説明: なし

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPReadOnlyRootFlesystem
    メタデータ:
      名前: psp-readonlyrootfilesystem
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: good1
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          readOnlyRootFlesystem: true 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad2
      名前空間: non-test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          readOnlyRootFlesystem: false
      initContainers:
      -画像: テスト
        名前: test2 
  • ACKPSPSeccomp

    ポリシーの説明: 指定された名前空間のポッドは、指定されたseccompプロファイルで構成する必要があります。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedProfileTypes

    array

    許可されるseccompプロファイルのタイプを指定します。

    allowedProfiles

    array

    許可されるseccompプロファイルを指定します。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPSeccomp
    メタデータ:
      名前: psp-seccomp
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        allowedProfileTypes:
          #-制限なし
          -RuntimeDefault
          -Localhost
        allowedProfiles:
          -ランタイム /デフォルト
          -docker /デフォルト
          -localhost/profiles/audit.json 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: 良い
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          seccompProfile:
            タイプ: Localhost
            localhostProfile: profiles/audit.json
      initContainers:
      -画像: テスト
        名前: test2
        securityContext:
          seccompProfile:
            タイプ: Localhost
            localhostProfile: profiles/audit.json 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
        echo-k8s-webhook-enabled: 'true'
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        名前: test 
  • ACKPSPSLINuxV2

    ポリシーの説明: allowedSELinuxOptionsパラメーターで指定されていないSELinuxオプションを使用して、指定された名前空間のポッドを構成することはできません。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    allowedSELinuxOptions

    object

    ポッドに設定できるSELinuxオプションを指定します。 詳細については、「SELinuxOptions v1 core」をご参照ください。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPSLINuxV2
    メタデータ:
      名前: psp-selinux-v2
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        allowedSELinuxOptions:
          -レベル: s0:c123,c456
            role: object_r
            タイプ: svirt_sandbox_file_t
            ユーザー: system_u 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: 良い
      名前空間: test-gatekeeper
    spec:
      securityContext:
        seLinuxOptions:
          レベル: "s0:c123,c456"
      containers:
      -画像: テスト
        名前: test 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
        securityContext:
          seLinuxOptions:
            レベル: "s0:c123,c455" 
  • ACKPSPVolumeTypes

    ポリシーの説明: 指定した型のボリュームのみ、指定した名前空間のポッドにマウントできます。

    重大度: 低い

    下表に、各パラメーターを説明します。

    パラメーター

    タイプ

    説明

    ボリューム

    array

    使用が許可されているボリュームのリスト。

    例:

    制約条件:

    apiVersion: constraints.gatekeeper.sh/v1beta1
    種類: ACKPSPVolumeTypes
    メタデータ:
      名前: psp-volume-types
    spec:
      マッチ:
        種類:
          - apiGroups: [""]
            kinds: ["ポッド"]
        名前空間:
          -「テストゲートキーパー」
      parameters:
        volumes:
          # - "*" # * を使用して、すべてのボリュームタイプを許可できます
          -configMap
          # - emptyDir
          -投影
          -秘密
          -downwardAPI
          -persistentVolumeClaim
          # - hostPath# allowedHostPathsに必要
          -allowedFlexVolumesに必要なflexVolume# 

    許可:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      name: pv-oss
      名前空間: test-gatekeeper
    spec:
      containers:
        -name: テスト
          画像: テスト
      volumes:
        -name: テスト
          flexVolume:
            ドライバー: "alicloud/oss" 

    禁止:

    apiVersion: v1
    種類: ポッド
    メタデータ:
      creationTimestamp: null
      ラベル:
        run: test
      名前: bad-1
      名前空間: test-gatekeeper
    spec:
      containers:
      -画像: テスト
        name: test
      volumes:
      -name: test-volume
        hostPath:
          path: /data