全部产品
Search
文档中心

Container Service for Kubernetes:Pustaka aturan kebijakan keamanan kontainer

更新时间:Jan 01, 2026

Anda dapat mengonfigurasi kebijakan keamanan untuk pod guna memverifikasi keamanan permintaan penerapan dan pembaruan. Fitur manajemen kebijakan pada kluster ACK menyediakan beberapa pustaka aturan bawaan, termasuk Compliance, Infra, K8s-general, PSP, dan FinOps.

Pengenalan aturan

Pustaka aturan kebijakan keamanan kontainer ACK mencakup templat aturan berikut:

  • Compliance: Aturan keamanan yang dikustomisasi berdasarkan standar kepatuhan, seperti Alibaba Cloud K8s Reinforcement.

  • Infra: Aturan yang meningkatkan dan melindungi keamanan sumber daya infrastruktur cloud.

  • K8s-general: Aturan yang membatasi dan menstandarkan konfigurasi sumber daya sensitif dalam kluster Kubernetes untuk meningkatkan keamanan aplikasi.

  • PSP: Kebijakan yang menggantikan Kubernetes Pod Security Policies (PSP). Kebijakan ini menyediakan batasan keamanan yang setara dengan fitur PSP asli dalam manajemen kebijakan ACK.

  • FinOps: Aturan kebijakan pengendalian dan optimalisasi untuk proses tata kelola biaya.

Pustaka aturan kebijakan

Container Service for Kubernetes (ACK) menyediakan pustaka aturan kebijakan bawaan berikut. Kategori kebijakan beserta deskripsinya adalah sebagai berikut:

Kategori

Kebijakan

Deskripsi

Tingkat keparahan

Compliance

ACKNoEnvVarSecrets

Membatasi pemasangan rahasia sebagai variabel lingkungan di pod aplikasi menggunakan secretKeyRef.

medium

ACKPodsRequireSecurityContext

Mengharuskan semua kontainer dalam sebuah pod memiliki bidang securityContext dikonfigurasi.

low

ACKRestrictNamespaces

Membatasi penerapan resource ke namespace tertentu dalam kluster.

low

ACKRestrictRoleBindings

Membatasi role binding dalam namespace tertentu agar hanya menggunakan role atau cluster role dari rentang yang ditentukan.

high

ACKNamespacesDeleteProtection

Mencegah namespace tertentu dihapus secara tidak sengaja.

medium

ACKServicesDeleteProtection

Mencegah instance Service di namespace tertentu dihapus secara tidak sengaja.

medium

ACKProtectBoundingPV

Mencegah penghapusan persistent volume (PV) yang berada dalam status bound.

high

ACKBlockNodeDelete

Mencegah penghapusan node yang memiliki tag kustom.

high

ACKResourceDeletionProtection

Mencegah penghapusan berbagai resource (termasuk Service, Namespace, dan Ingress) yang memiliki tag kustom.

high

ACKProtectCoreDNS

Mencegah penghapusan resource terkait CoreDNS dalam namespace kube-system.

high

ACKBlockCrdDeletion

Mencegah penghapusan CustomResourceDefinitions (CRD) yang masih memiliki custom resource (CR) terkait.

medium

Infra

ACKBlockProcessNamespaceSharing

Membatasi penggunaan shareProcessNamespace dalam aplikasi yang diterapkan dalam cakupan tertentu di kluster.

high

ACKEmptyDirHasSizeLimit

Mengharuskan volume tipe `emptyDir` menentukan sizelimit.

low

ACKLocalStorageRequireSafeToEvict

Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster memiliki anotasi "cluster-autoscaler.kubernetes.io/safe-to-evict": "true". Secara default, autoscaler tidak menghapus pod yang menggunakan volume HostPath atau EmptyDir selama autoscaling kluster. Untuk mengizinkan penghapusan pod tersebut, Anda harus menambahkan anotasi ini ke pod.

low

ACKOSSStorageLocationConstraint

Membatasi penerapan dalam namespace tertentu agar hanya menggunakan persistent volume (PV) Alibaba Cloud OSS dari wilayah tertentu.

low

ACKPVSizeConstraint

Membatasi kapasitas disk maksimum yang dapat diminta untuk instance PV yang dibuat di kluster.

medium

ACKPVCConstraint

Membatasi penerapan instance persistent volume claim (PVC) hanya pada daftar putih namespace dan membatasi kapasitas disk maksimum yang dapat diminta untuk instance PVC.

medium

ACKBlockVolumeTypes

Menentukan jenis pemasangan volume yang dilarang untuk Pod yang diterapkan dalam cakupan tertentu di kluster.

medium

ASMSidecarInjectionEnforced

Mengharuskan pod memiliki sidecar ASM yang disuntikkan.

high

K8s-general

ACKAllowedRepos

Membatasi pod aplikasi yang diterapkan dalam cakupan tertentu di kluster agar hanya menarik citra dari repositori yang ada dalam daftar putih.

high

ACKBlockAutoinjectServiceEnv

Mengharuskan aplikasi dikonfigurasi dengan enableServiceLinks: false untuk mencegah IP layanan terekspos di variabel lingkungan pod.

low

ACKBlockAutomountToken

Mengharuskan aplikasi memiliki bidang automountServiceAccountToken: false diatur untuk mencegah pemasangan otomatis token serviceaccount.

high

ACKBlockEphemeralContainer

Membatasi startup kontainer ephemeral dalam pod aplikasi dalam cakupan tertentu di kluster.

medium

ACKBlockLoadBalancer

Membatasi penerapan layanan bertipe LoadBalancer dalam cakupan tertentu di kluster.

high

ACKBlockNodePort

Membatasi penggunaan layanan bertipe NodePort dalam cakupan tertentu di kluster.

high

ACKContainerLimits

Mengharuskan pod aplikasi dalam cakupan tertentu di kluster memiliki limits resource dikonfigurasi.

low

ACKExternalIPs

Membatasi instance Service dalam cakupan tertentu di kluster agar hanya menggunakan externalIPs yang ada dalam daftar putih.

high

ACKImageDigests

Membatasi penerapan citra yang tidak menggunakan format digest dalam cakupan tertentu di kluster.

low

ACKRequiredLabels

Membatasi penerapan aplikasi yang tidak memiliki label standar tertentu dalam cakupan tertentu di kluster.

low

ACKRequiredProbes

Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster dikonfigurasi dengan jenis readinessProbe dan livenessProbe tertentu.

medium

ACKCheckNginxPath

Membatasi konfigurasi berbahaya dalam bidang spec.rules[].http.paths[].path instance Ingress. Aktifkan kebijakan ini untuk versi Ingress-nginx sebelum 1.2.1.

high

ACKCheckNginxAnnotation

Membatasi konfigurasi berbahaya dalam bidang metadata.annotations instance Ingress. Aktifkan kebijakan ini untuk versi Ingress-nginx sebelum 1.2.1.

high

ACKBlockInternetLoadBalancer

Membatasi pembuatan layanan LoadBalancer yang menghadap publik.

high

RatifyVerification

Setelah menginstal komponen Ratify dari pasar, verifikasi metadata keamanan, seperti signature atau bill of materials (BOM), dalam citra pod yang diterapkan dalam cakupan tertentu di kluster.

high

PSP

ACKPSPAllowPrivilegeEscalationContainer

Membatasi konfigurasi parameter allowPrivilegeEscalation untuk pod yang diterapkan dalam cakupan tertentu di kluster.

medium

ACKPSPAllowedUsers

Membatasi user, group, supplementalGroups, dan fsGroup saat startup untuk pod yang diterapkan dalam cakupan tertentu di kluster.

medium

ACKPSPAppArmor

Membatasi konfigurasi AppArmor untuk pod yang diterapkan dalam cakupan tertentu di kluster.

low

ACKPSPCapabilities

Membatasi konfigurasi Linux Capabilities untuk pod yang diterapkan dalam cakupan tertentu di kluster.

high

ACKPSPFSGroup

Membatasi konfigurasi fsGroup untuk pod yang diterapkan dalam cakupan tertentu di kluster.

medium

ACKPSPFlexVolumes

Membatasi konfigurasi driver FlexVolume untuk pod yang diterapkan dalam cakupan tertentu di kluster.

medium

ACKPSPForbiddenSysctls

Membatasi rentang sysctls terlarang untuk pod yang diterapkan dalam cakupan tertentu di kluster.

high

ACKPSPHostFilesystem

Membatasi rentang direktori host yang boleh dipasang oleh pod yang diterapkan dalam cakupan tertentu di kluster.

high

ACKPSPHostNamespace

Membatasi apakah pod yang diterapkan dalam cakupan tertentu di kluster boleh berbagi namespace host.

high

ACKPSPHostNetworkingPorts

Membatasi penggunaan jaringan host dan port tertentu oleh pod yang diterapkan dalam cakupan tertentu di kluster.

high

ACKPSPPrivilegedContainer

Membatasi startup kontainer istimewa dalam pod yang diterapkan dalam cakupan tertentu di kluster.

high

ACKPSPProcMount

Membatasi jenis pemasangan proc yang diizinkan untuk pod yang diterapkan dalam cakupan tertentu di kluster.

low

ACKPSPReadOnlyRootFilesystem

Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster menggunakan sistem file root read-only.

medium

ACKPSPSELinuxV2

Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster menggunakan konfigurasi SELinux yang ditentukan dalam parameter allowedSELinuxOptions.

low

ACKPSPSeccomp

Membatasi pod yang diterapkan dalam cakupan tertentu di kluster agar hanya menggunakan profil Seccomp tertentu.

low

ACKPSPVolumeTypes

Membatasi pod yang diterapkan dalam cakupan tertentu di kluster agar hanya menggunakan jenis pemasangan volume tertentu.

medium

FinOps

ACKContainerRequests

Mengharuskan pod aplikasi tertentu dalam kluster mendeklarasikan resource requests.

low

ACKContainerResourcesWhitelist

Mengharuskan konfigurasi resource CPU dan memori pod aplikasi tertentu dalam kluster dipilih dari daftar opsi yang telah ditentukan.

low

ACKContainerResourcesRange

Membatasi konfigurasi resource pod aplikasi tertentu dalam kluster agar berada dalam rentang tertentu.

low

ACKRequiredNodeSelector

Mengharuskan pod aplikasi tertentu dalam kluster memiliki label nodeSelector yang dikonfigurasi.

low

ACKWorkloadReplicasRange

Membatasi jumlah replika aplikasi ke rentang minimum dan maksimum tertentu.

low

ACKRestrictALBCreation

Mewajibkan penggunaan ulang instance ALB yang sudah ada dan melarang pembuatan instance resource ALB baru melalui AlbConfig.

low

Compliance

ACKNoEnvVarSecrets

Deskripsi aturan: Membatasi pemasangan rahasia sebagai variabel lingkungan di pod aplikasi menggunakan secretKeyRef.

Tingkat keparahan: medium.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mengharuskan semua kontainer dalam sebuah pod memiliki bidang securityContext yang dikonfigurasi.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKRestrictNamespaces

Deskripsi aturan: Membatasi penerapan resource ke namespace tertentu dalam kluster.

Tingkat keparahan: low.

Parameter:

Nama Parameter

Tipe

Deskripsi

restrictedNamespaces

array

Melarang penerapan resource ke target yang ditentukan dalam parameter ini.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

ACKRestrictRoleBindings

Deskripsi: Membatasi RoleBinding dalam namespace tertentu ke kumpulan Role atau ClusterRole tertentu.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Jenis Parameter

Deskripsi

restrictedRole

object

ClusterRole atau Role yang dibatasi.

allowedSubjects

array

Daftar putih subjek yang dapat dilampirkan.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mencegah penghapusan tidak sengaja namespace tertentu. Anda dapat menggunakan parameter protectionNamespaces untuk mengonfigurasi nama namespace yang dilindungi.

Prasyarat: Komponen gatekeeper harus v3.10.0.130-g0e79597d-aliyun atau lebih baru. Untuk informasi selengkapnya tentang versi komponen gatekeeper, lihat Gatekeeper.

Tingkat keparahan: medium.

Parameter:

Parameter

Jenis Parameter

Deskripsi

protectionNamespaces

array

Daftar nama namespace yang dilindungi.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKServicesDeleteProtection

Deskripsi aturan: Mencegah penghapusan tidak sengaja instance Service dalam namespace tertentu. Anda dapat menggunakan parameter protectionServices untuk mengonfigurasi nama instance Service yang dilindungi.

Tingkat keparahan: medium.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

protectionServices

array

Daftar nama instance Service yang dilindungi dalam namespace tertentu.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKProtectBoundingPV

Deskripsi aturan: Mencegah penghapusan persistent volume (PV) yang terikat ke persistent volume claim (PVC) dalam kluster.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKProtectBoundingPV
metadata:
  name: protect-pv-deletion
spec:
  enforcementAction: deny
  match:
    kinds:
    - apiGroups:
      - ""
      kinds:
      - PersistentVolume

Diizinkan:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv-bound-should-be-blocked
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual-sc
  hostPath:
    path: /tmp/data
    type: DirectoryOrCreate
status:
  phase: Released

Dilarang:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv-bound-should-be-blocked
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 1Gi
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual-sc
  hostPath:
    path: /tmp/data
    type: DirectoryOrCreate
status:
  phase: Bound

ACKBlockNodeDelete

Deskripsi aturan: Mencegah penghapusan node yang memiliki tag kustom dalam kluster. Anda dapat menentukan beberapa pasangan kunci-nilai. Node dilindungi jika cocok dengan salah satu pasangan kunci-nilai yang ditentukan.

Tingkat Keparahan: Tinggi.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

protectedLabels

array

Tag kustom yang digunakan untuk mengidentifikasi node yang dilindungi.

protectedLabels.labelName

string

Kunci tag kustom.

protectedLabels.labelValue

string

Nilai tag kustom.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockNodeDelete
metadata:
  name: block-node-delete
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: ["*"]
        kinds: ["Node"]
  parameters:
    protectedLabels:
    - labelName: policy.alibabacloud.vpc.com/node-delete-protection
      labelValue: "true"
    - labelName: policy.alibabacloud.com/node-delete-protection
      labelValue: "true"

Diizinkan:

apiVersion: v1
kind: Node
metadata:
  name: cn-hangzhou-1

Ditolak:

apiVersion: v1
kind: Node
metadata:
  labels:
    policy.alibabacloud.vpc.com/node-delete-protection: "true"
  name: cn-hangzhou-1
---
apiVersion: v1
kind: Node
metadata:
  labels:
    policy.alibabacloud.vpc.com/node-delete-protection: "true"
  name: cn-hangzhou-2
---
apiVersion: v1
kind: Node
metadata:
  labels:
    policy.alibabacloud.com/node-delete-protection: "true"
    policy.alibabacloud.vpc.com/node-delete-protection: "true"
  name: cn-hangzhou-3

ACKResourceDeletionProtection

Deskripsi aturan: Mencegah penghapusan resource yang memiliki tag kustom dalam kluster. Aturan ini mendukung jenis resource seperti Service, Namespace, Ingress, Deployment, StatefulSet, DaemonSet, Job, dan CronJob. Anda dapat menentukan beberapa pasangan kunci-nilai. Resource dilindungi jika cocok dengan salah satu pasangan kunci-nilai yang ditentukan.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

labels

array

Tag kustom yang digunakan untuk mengidentifikasi node yang dilindungi.

labels.labelName

string

Kunci tag kustom.

labels.labelValue

string

Nilai tag kustom.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKResourceDeletionProtection
metadata:
  name: resource-deletion-protection
  annotations:
    description: "Protect resources from being accidentally deleted."
spec:
  enforcementAction: deny
  match:
    kinds:
    - apiGroups:
      - ""
      kinds:
      - Service
      - Namespace
    - apiGroups:
      - extensions
      - networking.k8s.io
      kinds:
      - Ingress
    - apiGroups:
      - apps
      kinds:
      - Deployment
      - StatefulSet
      - DaemonSet
    - apiGroups:
      - batch
      kinds:
      - Job
      - CronJob
  parameters:
    labels:
    - labelName: policy.alibabacloud.com/delete-protection
      labelValue: "true"

Diizinkan:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
  namespace: test-gatekeeper
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      labels:
        app: test-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Dilarang:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
  namespace: test-gatekeeper
  labels:
    policy.alibabacloud.com/delete-protection: "true"
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      labels:
        app: test-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

ACKProtectCoreDNS

Deskripsi aturan: Mencegah penghapusan resource terkait CoreDNS dalam namespace kube-system, termasuk Deployment, Service, dan ConfigMap terkait.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

min_replicas

int

Menentukan jumlah replika minimum yang diinginkan untuk Deployment CoreDNS.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKProtectCoreDNS
metadata:
  name: coredns-protect-rule
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: ["*"]
        kinds: ["Deployment", "Service", "Scale", "ConfigMap" ]
    scope: "Namespaced"
    namespaces: ["kube-system"]
  parameters:
    min_replicas: 2

Diizinkan:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: coredns
  namespace: kube-system
spec:
  replicas: 3
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
    spec:
      containers:
        - name: coredns
          image: registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/coredns:latest
          imagePullPolicy: IfNotPresent

Dilarang:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: coredns
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
    spec:
      containers:
        - name: coredns
          image: registry-cn-hangzhou-vpc.ack.aliyuncs.com/acs/coredns:latest
          imagePullPolicy: IfNotPresent
---
apiVersion: v1
data:
  Corefile: ""
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: KubeDNS
  name: kube-dns
  namespace: kube-system

ACKBlockCrdDeletion

Deskripsi aturan: Mencegah penghapusan CustomResourceDefinitions (CRD) yang masih memiliki custom resource (CR) terkait.

Tingkat keparahan: medium.

Parameter: Tidak ada.

Contoh dan penggunaan: Sebelum menerapkan kebijakan, Anda harus terlebih dahulu menginstal dan mengonfigurasi ack-policy-external-provider. Kemudian, Anda dapat menerapkan kebijakan untuk melindungi CRD.

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKBlockCrdDeletion
metadata:
  name: block-crd-deletion
spec:
  enforcementAction: deny
  match:
    kinds:
    - apiGroups:
      - '*'
      kinds:
      - CustomResourceDefinition

Infra

ACKBlockProcessNamespaceSharing

Deskripsi aturan: Membatasi penggunaan shareProcessNamespace dalam aplikasi yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mengharuskan volume emptyDir menentukan sizeLimit.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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"

Dilarang:

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

Deskripsi aturan: Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster memiliki anotasi "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" . Selama autoscaling, autoscaler kluster tidak menghapus pod yang tidak memiliki anotasi ini.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi penerapan dalam namespace tertentu agar hanya menggunakan persistent volume (PV) Alibaba Cloud Object Storage Service (OSS) dari wilayah tertentu.

Tingkat keparahan: low.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

mode

string

Menentukan apakah akan menggunakan daftar putih. Nilai default allowlist menunjukkan mode daftar putih. Nilai lain menunjukkan mode daftar hitam.

regions

array

Daftar ID wilayah Alibaba Cloud tertentu.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

ACKPVSizeConstraint

Deskripsi aturan: Membatasi kapasitas disk maksimum yang dapat diminta untuk instance PV yang dibuat di kluster.

Tingkat keparahan: medium.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

maxSize

string

Kapasitas disk maksimum yang dapat diminta untuk instance PV. Nilai default adalah 50 GiB.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi penerapan instance persistent volume claim (PVC) hanya pada daftar putih namespace dan membatasi kapasitas disk maksimum yang dapat diminta untuk instance PVC.

Tingkat keparahan: medium.

Parameter:

Parameter

Jenis parameter

Deskripsi

maxSize

string

Kapasitas disk maksimum yang dapat diminta untuk instance PV. Nilai default adalah 50 GiB.

allowNamespaces

array

Daftar putih namespace tempat instance PVC dapat diterapkan.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Melarang jenis pemasangan volume tertentu untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: medium.

Parameter:

Nama Parameter

Tipe

Deskripsi

volumes

array

Daftar jenis pemasangan volume yang dilarang.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

ASMSidecarInjectionEnforced

Deskripsi aturan: Mengharuskan pod memiliki sidecar Alibaba Cloud Service Mesh (ASM) yang disuntikkan.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ASMSidecarInjectionEnforced
metadata:
  name: asm-sidecar-injectionen-forced
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces: ["test-gatekeeper"]

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  name: sidecar-injection
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test
    - name: istio-proxy
      image: xxx/proxyv2:xxx

Dilarang:

apiVersion: v1
kind: Pod
metadata:
  name: sidecar-injection
  namespace: test-gatekeeper
spec:
  containers:
    - name: test
      image: test

K8s-general

ACKAllowedRepos

Deskripsi aturan: Mengharuskan pod aplikasi yang diterapkan dalam cakupan tertentu di kluster hanya menarik citra dari repositori yang ada dalam daftar putih.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Tipe

Deskripsi

repos

array

Daftar putih repositori citra yang diizinkan.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mengharuskan aplikasi dikonfigurasi dengan enableServiceLinks: false untuk mencegah alamat IP layanan terekspos sebagai variabel lingkungan pod.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKBlockAutomountToken

Deskripsi aturan: Mengharuskan aplikasi memiliki bidang automountServiceAccountToken: false yang diatur untuk mencegah pemasangan otomatis token ServiceAccount.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKBlockEphemeralContainer

Deskripsi aturan: Mencegah kontainer ephemeral dimulai dalam pod aplikasi dalam cakupan tertentu di kluster.

Tingkat keparahan: medium.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  name: hello-pod
  namespace: test-gatekeeper
spec:
  containers:
  - name: hello-pod
    image: redis

Dilarang:

  • Mulai kontainer ephemeral berdasarkan pod yang sudah ada.

    kubectl debug -it hello-pod -n test-gatekeeper --image=test --target=hello-pod
  • Output yang diharapkan:

    Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [block-ephemeral-container-w5c6n] Creating ephemeral containers is disallowed, pod: hello-pod

ACKBlockLoadBalancer

Deskripsi aturan: Mencegah penerapan layanan bertipe LoadBalancer dalam cakupan tertentu di kluster.

Tingkat keparahan: high.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

restrictedNamespaces

array

Menolak penerapan resource yang ditentukan dalam parameter ini.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mencegah penggunaan layanan bertipe NodePort dalam cakupan tertentu di kluster.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mengharuskan pod aplikasi dalam cakupan tertentu di kluster memiliki resource limits yang dikonfigurasi.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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"

Diizinkan:

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"

Dilarang:

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

Deskripsi aturan: Mengharuskan instance Service dalam cakupan tertentu di kluster hanya menggunakan externalIPs dari daftar putih.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

allowedIPs

array

Daftar putih externalIPs.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mengharuskan citra yang diterapkan dalam cakupan tertentu di kluster menggunakan format digest.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Memverifikasi bahwa pod berisi label tertentu dan memastikan nilai label sesuai dengan format yang telah ditentukan. Anda dapat menentukan ekspresi reguler untuk setiap kunci label guna memvalidasi nilainya. Anda juga dapat menggunakan parameter optional untuk mengontrol apakah validasi label bersifat wajib.

Tingkat keparahan: low.

Parameter:

Nama Parameter

Tipe

Deskripsi

allowedRegex

string

Ekspresi reguler untuk daftar putih label.

key

string

Kunci tag yang divalidasi.

optional

bool

Menentukan apakah pod boleh tidak memiliki tag ini.

  • true: Pod boleh tidak memiliki tag. Tag divalidasi hanya jika ada. Jika tag ada, nilainya harus lolos validasi ekspresi reguler.

  • false: Pod tidak boleh tidak memiliki tag. Tag harus ada dan lolos validasi.

Contoh:

Constraint:

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.*$"
      - key: env
        allowedRegex: "^(dev|prod)$"
        optional: true

Diizinkan:

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

Dilarang:

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

ACKRequiredProbes

Deskripsi aturan: Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster dikonfigurasi dengan jenis readinessProbe dan livenessProbe tertentu.

Tingkat keparahan: medium.

Parameter:

Nama Parameter

Jenis Parameter

Deskripsi

probes

array

Probe yang harus dikonfigurasi dalam pod. Misalnya, readinessProbe dan livenessProbe.

probeTypes

array

Jenis probe yang harus dikonfigurasi dalam pod. Misalnya, tcpSocket, httpGet, dan exec.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKCheckNginxPath

Mencegah konfigurasi berbahaya dalam bidang spec.rules[].http.paths[].path instance Ingress. Anda harus mengaktifkan kebijakan ini untuk versi Ingress-nginx sebelum 1.2.1.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Mencegah konfigurasi berbahaya dalam bidang metadata.annotations instance Ingress. Anda harus mengaktifkan kebijakan ini untuk versi Ingress-nginx sebelum 1.2.1.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mencegah pembuatan layanan LoadBalancer yang menghadap Internet.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Setelah Anda menginstal komponen Ratify dari pasar di kluster, Anda dapat menggunakan kebijakan ini untuk memverifikasi metadata keamanan, seperti signature atau bill of materials (BOM), untuk citra pod yang diterapkan dalam cakupan tertentu.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

apiVersion: v1
kind: Pod
metadata:
  name: bad-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/acs/unsigned   # Deploy an invalid image that fails the Ratify signature verification.
    name: test-container

PSP

ACKPSPAllowedUsers

Deskripsi aturan: Membatasi user, group, supplementalGroups, dan fsGroup saat startup untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: medium.

Parameter:

Parameter

Jenis parameter

Deskripsi

runAsUser

object

Untuk deskripsi detail parameter ini, lihat konfigurasi User dalam aturan PSP asli. Mendukung konfigurasi jenis aturan serta UID minimum dan maksimum. Untuk informasi selengkapnya, lihat Users and groups.

runAsGroup

object

Untuk deskripsi detail parameter ini, lihat konfigurasi Group dalam aturan PSP asli. Mendukung konfigurasi jenis aturan serta UID minimum dan maksimum. Untuk informasi selengkapnya, lihat Users and groups.

supplementalGroups

object

Untuk deskripsi detail parameter ini, lihat konfigurasi SupplementalGroups dalam aturan PSP asli. Mendukung konfigurasi jenis aturan serta UID minimum dan maksimum. Untuk informasi selengkapnya, lihat Users and groups.

fsGroup

object

Untuk deskripsi detail parameter ini, lihat konfigurasi fsGroup dalam aturan PSP asli. Mendukung konfigurasi jenis aturan serta UID minimum dan maksimum. Untuk informasi selengkapnya, lihat Users and groups.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKPSPAllowPrivilegeEscalationContainer

Deskripsi aturan: Membatasi konfigurasi parameter allowPrivilegeEscalation untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: medium.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKPSPAppArmor

Deskripsi aturan: Membatasi konfigurasi AppArmor untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: low.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

probes

array

Probe yang harus dikonfigurasi dalam pod. Misalnya, readinessProbe dan livenessProbe.

probeTypes

array

Jenis probe yang harus dikonfigurasi dalam pod. Misalnya, tcpSocket, httpGet, dan exec.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKPSPCapabilities

Deskripsi aturan: Membatasi konfigurasi Linux Capabilities untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

allowedCapabilities

array

Daftar putih capabilities yang diizinkan.

requiredDropCapabilities

array

capabilities yang harus di-drop.

Contoh:

Constraint:

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

Diizinkan:

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"

Dilarang:

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

ACKPSPFlexVolumes

Deskripsi aturan: Membatasi konfigurasi driver FlexVolume untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: medium.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

allowedFlexVolumes

array

Daftar driver FlexVolume yang diizinkan.

Contoh:

Constraint:

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"

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi rentang sysctls terlarang untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat Keparahan: Tinggi.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

forbiddenSysctls

array

Daftar sysctls terlarang di pod.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi konfigurasi fsGroup untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: medium.

Parameter:

Nama Parameter

Jenis Parameter

Deskripsi

rule

string

Untuk deskripsi detail parameter ini, lihat konfigurasi fsGroup dalam aturan PSP asli. Nilai yang didukung adalah MustRunAs, MayRunAs, dan RunAsAny. Untuk informasi selengkapnya, lihat Volumes and file systems.

ranges

object

Berisi nilai berikut:

  • min: Nilai minimum ID fsGroup.

  • max: Nilai maksimum ID fsGroup.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi rentang direktori host yang dapat dipasang oleh pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: high.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

allowedHostPaths

object

Konfigurasi daftar putih path host.

readOnly

boolean

Menentukan apakah path bersifat read-only.

pathPrefix

string

Awalan path.

Contoh:

Constraint:

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"

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
  name: good1
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test
    volumeMounts:
      - name: test-volume
        mountPath: "/projected-volume"
        readOnly: true
  volumes:
  - name: test-volume
    hostPath:
      path: /foo

Dilarang:

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

Deskripsi aturan: Membatasi apakah pod yang diterapkan dalam cakupan tertentu di kluster boleh berbagi namespace host.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi penggunaan jaringan host dan port tertentu oleh pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat Keparahan: Tinggi.

Parameter:

Nama Parameter

Tipe

Deskripsi

hostNetwork

boolean

Menentukan apakah pod diizinkan berbagi jaringan host.

min

int

Nilai minimum hostPort.

max

int

Nilai maksimum hostPort.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Mencegah startup kontainer istimewa dalam pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: high.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

Deskripsi aturan: Membatasi jenis pemasangan proc yang diizinkan untuk pod yang diterapkan dalam cakupan tertentu di kluster.

Tingkat keparahan: high.

Parameter:

Nama Parameter

Tipe

Deskripsi

procMount

string

Jenis pemasangan proc. Jenis berikut diizinkan:

  • Default: Menyembunyikan direktori /proc secara default.

  • Unmasked: Tidak menyembunyikan /proc.

Untuk informasi selengkapnya tentang pengaturan parameter, lihat AllowedProcMountTypes.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKPSPReadOnlyRootFilesystem

Deskripsi aturan: Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster menggunakan sistem file root read-only.

Tingkat keparahan: medium.

Parameter: Tidak ada.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

ACKPSPSeccomp

Deskripsi aturan: Membatasi pod yang diterapkan dalam cakupan tertentu di kluster agar hanya menggunakan profil Seccomp tertentu.

Tingkat Kepentingan: Rendah

Parameter:

Nama Parameter

Jenis parameter

Deskripsi metrik

allowedProfileTypes

array

Daftar putih tipe profil Seccomp yang diizinkan.

allowedProfiles

array

Profil Seccomp yang diizinkan.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: test
    echo-k8s-webhook-enabled: 'true'
  name: bad
  namespace: test-gatekeeper
spec:
  containers:
  - image: test
    name: test

ACKPSPSELinuxV2

Deskripsi aturan: Mengharuskan pod yang diterapkan dalam cakupan tertentu di kluster menggunakan konfigurasi SELinux yang ditentukan dalam parameter allowedSELinuxOptions.

Tingkat keparahan: low.

Parameter:

Nama parameter

Jenis parameter

Deskripsi

allowedSELinuxOptions

object

Daftar putih konfigurasi SELinux yang diizinkan. Untuk informasi selengkapnya, lihat SELinuxOptions v1 core.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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"

ACKPSPVolumeTypes

Deskripsi aturan: Membatasi pod yang diterapkan dalam cakupan tertentu di kluster agar hanya menggunakan jenis pemasangan volume tertentu.

Tingkat keparahan: low.

Parameter:

Nama Parameter

Type

Deskripsi

volumes

array

Daftar jenis pemasangan volume yang diizinkan.

Contoh:

Constraint:

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

Diizinkan:

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

Dilarang:

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

FinOps

ACKContainerRequests

Deskripsi aturan: Mengharuskan pod aplikasi tertentu dalam kluster mendeklarasikan resource requests.

Tingkat keparahan: low.

Parameter:

Parameter

Jenis parameter

Deskripsi

cpu

string

Nilai maksimum untuk requests CPU kontainer.

memory

string

Nilai maksimum untuk requests memori kontainer.

Contoh:

Constraint:

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

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
  namespace: test-gatekeeper
spec:
  containers:
  - image: openpolicyagent/test-webserver
    name: test-container
    resources:
      requests:
        memory: "100Mi"
        cpu: "500m"

Dilarang:

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

ACKContainerResourcesWhitelist

Deskripsi aturan: Mengharuskan konfigurasi resource CPU dan memori pod aplikasi tertentu dalam kluster dipilih dari daftar opsi yang telah ditentukan.

Tingkat keparahan: low.

Parameter:

Parameter

Jenis Parameter

Deskripsi

cpuRequests

array

Daftar putih requests CPU untuk kontainer. Array kosong [] menunjukkan bahwa semua nilai diizinkan.

cpuLimits

array

Daftar putih limits CPU untuk kontainer. Array kosong [] menunjukkan bahwa semua nilai diizinkan.

memoryRequests

array

Daftar putih requests memori untuk kontainer. Array kosong [] menunjukkan bahwa semua nilai diizinkan.

memoryLimits

array

Daftar putih limits memori untuk kontainer. Array kosong [] menunjukkan bahwa semua nilai diizinkan.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKContainerResourcesWhitelist
metadata:
  name: container-resources-whitelist
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [ "" ]
        kinds: [ "Pod" ]
    namespaces:
      - "test-gatekeeper"
  parameters:
    cpuRequests:
      - "100m"
      - "500m"
      - "1"
    cpuLimits:
      - "2"
      - "4000m"
    memoryRequests:
      - "256Mi"
      - "512Mi"
    memoryLimits:
      - "1Gi"
      - "2048Mi"

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
    - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      name: test-container
      resources:
        requests:
          cpu: 100m
          memory: 512Mi
        limits:
          cpu: "2"
          memory: 1Gi

Dilarang:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
    - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      name: test-container
      resources:
        requests:
          cpu: 10m
          memory: 512Mi
        limits:
          cpu: "1"
          memory: 1Gi

ACKContainerResourcesRange

Deskripsi aturan: Membatasi konfigurasi resource pod aplikasi tertentu dalam kluster ke rentang tertentu.

Tingkat keparahan: low.

Parameter:

Nama parameter

Jenis Parameter

Deskripsi

cpuRequests

object

Berisi nilai berikut:

  • min: Nilai minimum untuk requests CPU kontainer.

  • max: Nilai maksimum untuk requests CPU kontainer.

cpuLimits

object

Berisi nilai berikut:

  • min: Nilai minimum untuk limits CPU kontainer.

  • max: Nilai maksimum untuk limits CPU kontainer.

memoryRequests

object

Berisi nilai berikut:

  • min: Nilai minimum untuk requests memori kontainer.

  • max: Nilai maksimum untuk requests memori kontainer.

memoryLimits

object

Berisi nilai berikut:

  • min: Nilai minimum untuk limits memori kontainer.

  • max: Nilai maksimum untuk limits memori kontainer.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKContainerResourcesRange
metadata:
  name: container-resources-range
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [ "" ]
        kinds: [ "Pod" ]
    namespaces:
      - "test-gatekeeper"
  parameters:
    cpuRequests:
      min: "100m"
      max: "1"
    cpuLimits:
      min: "500m"
      max: "2"
    memoryRequests:
      min: "256Mi"
      max: "512Mi"
    memoryLimits:
      min: "1Gi"
      max: "2048Mi"

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
    - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      name: test-container
      resources:
        requests:
          cpu: 100m
          memory: 512Mi
        limits:
          cpu: "2"
          memory: 2Gi

Dilarang:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
    - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      name: test-container
      resources:
        requests:
          cpu: 10m
          memory: 5Mi
        limits:
          cpu: "3"
          memory: 128Mi

ACKRequiredNodeSelector

Deskripsi aturan: Mengharuskan pod aplikasi tertentu dalam kluster memiliki label nodeSelector yang dikonfigurasi.

Tingkat keparahan: low.

Parameter:

Nama Parameter

Jenis parameter

Deskripsi

nodeSelector

array

Berisi nilai berikut:

  • key: Kunci label yang ditentukan.

  • allowedRegex: Ekspresi reguler untuk nilai label.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKRequiredNodeSelector
metadata:
  name: must-have-nodeselector
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: [""]
        kinds: ["Pod"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    nodeSelector:
      - key: "node.alibabacloud.com/nodepool-id"
        allowedRegex: "^np.*$"
      - key: "kubernetes.io/os"
        allowedRegex: "^linux$"

Diizinkan:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
    - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      name: test-container
      resources:
        requests:
          cpu: 100m
          memory: 512Mi
        limits:
          cpu: "2"
          memory: 1Gi
  nodeSelector:
    node.alibabacloud.com/nodepool-id: npd37f0e64410c41328a6282dbe5d35cae
    kubernetes.io/os: linux

Dilarang:

apiVersion: v1
kind: Pod
metadata:
  name: pod-0
  namespace: test-gatekeeper
spec:
  containers:
    - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
      name: test-container
      resources:
        requests:
          cpu: 100m
          memory: 512Mi
        limits:
          cpu: "2"
          memory: 1Gi
  nodeSelector:
    node.alibabacloud.com/nodepool-id: npd37f0e64410c41328a6282dbe5d35cae
    kubernetes.io/os: windows

ACKWorkloadReplicasRange

Deskripsi aturan: Membatasi jumlah replika aplikasi ke rentang minimum dan maksimum tertentu.

Tingkat keparahan: low.

Parameter:

Parameter

Jenis parameter

Deskripsi

minReplicas

int

Jumlah minimum replika untuk aplikasi.

maxReplicas

int

Jumlah maksimum replika untuk aplikasi.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKWorkloadReplicasRange
metadata:
  name: replica-limiter
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: ["*"]
        kinds: ["Deployment", "StatefulSet", "ReplicaSet", "Scale"]
    namespaces:
      - "test-gatekeeper"
  parameters:
    minReplicas: 2
    maxReplicas: 3

Diizinkan:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  namespace: test-gatekeeper
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: "500m"

Dilarang:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-basic-0
  namespace: test-gatekeeper
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: "500m"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-basic-1
  namespace: test-gatekeeper
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: "500m"

ACKRestrictALBCreation

Deskripsi aturan: Mewajibkan penggunaan ulang instance Application Load Balancer (ALB) yang sudah ada dan melarang pembuatan instance ALB baru melalui AlbConfig.

Tingkat keparahan: low.

Parameter: Tidak ada.

Contoh:

Constraint:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: ACKRestrictALBCreation
metadata:
  name: restrict-alb-creation
spec:
  enforcementAction: deny
  match:
    kinds:
      - apiGroups: ["alibabacloud.com"]
        kinds: ["AlbConfig"]

Diizinkan:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: reuse-alb
spec:
  config:
    id: 'abcdefghijklmnopqrstuvwxyz'
    forceOverride: false
    listenerForceOverride: false

Dilarang:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    name: alb
    addressType: Internet
    zoneMappings:               
    - vSwitchId: vsw-uf6ccg2a9g71hx8go****  # Replace with the vSwitch IDs of at least two vSwitches in different zones within the VPC where the cluster resides.
      allocationId: eip-asdfas****          # Replace with the EIP ID. The default option is to automatically assign a public IP address.
    - vSwitchId: vsw-uf6nun9tql5t8nh15****  # Replace with the vSwitch IDs of at least two vSwitches in different zones within the VPC where the cluster resides.
      allocationId: eip-dpfmss****          # Replace with the EIP ID.
  listeners:
    - port: 80
      protocol: HTTP