Configure políticas de segurança para pods a fim de verificar a segurança das solicitações de implantação ou atualização. O recurso de gerenciamento de políticas de cluster do Alibaba Cloud Container Compute Service (ACS) oferece quatro bibliotecas de regras integradas: Compliance, Infra, K8s-general e PSP.
Informações básicas
O ACS fornece os seguintes tipos de políticas de segurança predefinidas:
Compliance: políticas de segurança personalizadas com base em padrões de conformidade, como o Alibaba Cloud Kubernetes Security Hardening.
Infra: garantem e aprimoram a segurança dos recursos de infraestrutura de nuvem.
K8s-general: limitam e normalizam as configurações de recursos sensíveis em clusters ACS, aumentando a segurança das aplicações nesses ambientes.
PSP: funcionam como alternativa às políticas de segurança de pod (PSPs) do Kubernetes open source e oferecem as mesmas capacidades de controle de acesso.
Políticas de segurança predefinidas
A tabela a seguir descreve as políticas de segurança predefinidas do ACS.
Categoria | Política | Descrição | Gravidade |
Compliance |
| Não é permitido usar o parâmetro secretKeyRef para referenciar Secrets ao definir variáveis de ambiente de pods. | média |
| Os pods nos namespaces especificados devem ter o parâmetro | baixa | |
| Recursos dos tipos especificados não podem ser implantados nos namespaces indicados. | baixa | |
| RoleBindings nos namespaces especificados só podem vincular as funções ou cluster roles indicadas. | alta | |
| Os namespaces especificados não podem ser excluídos. | média | |
| As instâncias de Service nos namespaces especificados não podem ser excluídas. | média | |
Infra |
| Os pods nos namespaces especificados não podem ter o parâmetro shareProcessNamespace configurado. | alta |
| É obrigatório configurar o parâmetro | baixa | |
| Os pods nos namespaces especificados devem ter a anotação | baixa | |
| Buckets do Object Storage Service (OSS) nas regiões especificadas podem ser montados em pods nos namespaces indicados. | baixa | |
| Define a capacidade máxima de disco que pode ser solicitada para volumes persistentes (PVs) criados em um cluster ACS. | média | |
| Especifica os namespaces onde reivindicações de volume persistente (PVCs) podem ser implantadas e a capacidade máxima de disco solicitável para PVs. | média | |
K8s-general |
| Os pods nos namespaces especificados só podem baixar imagens dos repositórios indicados. | alta |
| Os pods nos namespaces especificados devem ter | baixa | |
| Os pods nos namespaces especificados devem ter | alta | |
| Os pods nos namespaces especificados não podem iniciar contêineres efêmeros. | média | |
| Serviços LoadBalancer não podem ser implantados nos namespaces especificados. | alta | |
| Os pods nos namespaces especificados devem ter | baixa | |
| Os Services nos namespaces especificados não podem usar endereços IP externos que não estejam listados no conteúdo da política. | alta | |
| Os pods nos namespaces especificados devem ser implantados a partir de imagens cujos digests estejam em conformidade com o formato definido. | baixa | |
| Os pods nos namespaces especificados devem possuir rótulos que atendam ao conteúdo da política. | baixa | |
| Os pods nos namespaces especificados devem ter os tipos definidos de sondas de prontidão e sondas de atividade configurados. | média | |
| O parâmetro | alta | |
| Não é possível criar Services LoadBalancer voltados para a internet. | alta | |
PSP |
| Os pods nos namespaces especificados devem ter o parâmetro | média |
| Os pods nos namespaces especificados devem ter as configurações de | média | |
| Os pods nos namespaces especificados devem ter configurações de AppArmor. | baixa | |
| Os pods nos namespaces especificados devem ter configurações de Linux Capabilities. | alta | |
| Os pods nos namespaces especificados devem ter configurações de fsGroup que atendam ao conteúdo da política. | média | |
| Os pods nos namespaces especificados não podem usar drivers FlexVolume que não estejam listados no conteúdo da política. | média | |
| Os pods nos namespaces especificados não podem usar os sysctls indicados. | alta | |
| Os volumes hostPath montados em pods nos namespaces especificados devem atender às condições definidas. | alta | |
| Os pods nos namespaces especificados não podem executar contêineres privilegiados. | alta | |
| Os pods nos namespaces especificados devem executar com sistemas de arquivos raiz somente leitura. | média | |
| Os pods nos namespaces especificados não podem ter opções SELinux que não estejam listadas no conteúdo da política. | baixa | |
| Os pods nos namespaces especificados devem ter os perfis seccomp indicados configurados. | baixa | |
| Apenas volumes dos tipos especificados podem ser montados em pods no namespace indicado. | média |
Compliance
-
ACKNoEnvVarSecrets
Descrição da política: Não é permitido usar o parâmetro secretKeyRef para referenciar Secrets ao definir variáveis de ambiente de pods.
Gravidade: Média
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKNoEnvVarSecrets metadata: name: no-env-var-secrets spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]Permitido:
apiVersion: v1 kind: Pod metadata: name: mypod namespace: test-gatekeeper spec: containers: - name: mypod image: testimage volumeMounts: - name: foo mountPath: "/etc/foo" volumes: - name: foo secret: secretName: mysecret items: - key: username path: my-group/my-usernameNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - name: mycontainer image: testimage env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never -
ACKPodsRequireSecurityContext
Descrição da política: Os pods nos namespaces especificados devem ter o parâmetro
securityContextconfigurado.Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
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"]Permitido:
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: {}Não permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad namespace: non-test-gatekeeper spec: containers: - image: testimage name: test2 - image: testimage name: test resources: {} securityContext: runAsNonRoot: false -
ACKRestrictNamespaces
Descrição da política: Recursos dos tipos especificados não podem ser implantados nos namespaces indicados.
Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
restrictedNamespaces
array
Especifica os nomes dos namespaces onde os recursos não podem ser implantados.
Exemplo:
Restrição:
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"Permitido:
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: {}Não permitido:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - name: mycontainer image: testimage restartPolicy: Never -
ACKRestrictRoleBindings
Descrição da política: Rolebindings nos namespaces especificados só podem ser usados para atribuir as Roles ou ClusterRoles indicadas.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
restrictedRole
object
Especifica as cluster roles ou roles cuja atribuição não é permitida.
allowedSubjects
array
Especifica os subjects que podem ser vinculados.
Exemplo:
Restrição:
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"Permitido:
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.ioNão permitido:
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
Descrição da política: Os namespaces especificados não podem ser excluídos. Defina o parâmetro
protectionNamespacescom os nomes dos namespaces protegidos contra exclusão.Para ativar esta política, use o gatekeeper versão 3.10.0.130-g0e79597d-aliyun ou superior. Para mais informações sobre as versões do gatekeeper, consulte gatekeeper.
Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
protectionNamespaces
array
Os nomes dos namespaces que não podem ser excluídos.
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKNamespacesDeleteProtection metadata: name: namespace-delete-protection spec: match: kinds: - apiGroups: [''] kinds: ['Namespace'] parameters: protectionNamespaces: - test-gatekeeperPermitido:
apiVersion: v1 kind: Namespace metadata: name: will-deleteNão permitido:
apiVersion: v1 kind: Namespace metadata: name: test-gatekeeper -
ACKServicesDeleteProtection
Descrição da política: As instâncias de Service nos namespaces especificados não podem ser excluídas. Defina o parâmetro
protectionServicescom os nomes das instâncias de Service protegidas contra exclusão.Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
protectionServices
array
Os nomes das instâncias de Service nos namespaces especificados que não podem ser excluídas.
Exemplo:
Restrição:
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-svcPermitido:
apiVersion: v1 kind: Service metadata: name: good namespace: test-gatekeeperNão permitido:
apiVersion: v1 kind: Service metadata: name: test-svc
Infra
-
ACKBlockProcessNamespaceSharing
Descrição da política: Os pods nos namespaces especificados não podem ter o parâmetro
shareProcessNamespaceconfigurado.Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockProcessNamespaceSharing ACKCheckNginxPathmetadata: name: block-share-process-namespace spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]Permitido:
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: {}Não permitido:
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
Descrição da política: É obrigatório configurar o parâmetro
sizelimitao montar volumes emptyDir.Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKEmptyDirHasSizeLimit metadata: name: empty-dir-has-sizelimit spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]Permitido:
apiVersion: v1 kind: Pod metadata: name: test-1 namespace: test-gatekeeper spec: containers: - image: test name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: sizeLimit: "10Mi"Não permitido:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - image: test name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {} -
ACKLocalStorageRequireSafeToEvict
Descrição da política: Os pods nos namespaces especificados devem ter a anotação
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true". Pods sem essa anotação não são removidos durante atividades de dimensionamento.Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKLocalStorageRequireSafeToEvict metadata: name: local-storage-require-safe-to-evict spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]Permitido:
apiVersion: v1 kind: Pod metadata: name: test-1 namespace: test-gatekeeper annotations: 'cluster-autoscaler.kubernetes.io/safe-to-evict': 'true' spec: containers: - image: test 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: DirectoryNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - image: test name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {} -
ACKOSSStorageLocationConstraint
Descrição da política: Define se buckets do OSS nas regiões especificadas podem ser montados em pods nos namespaces indicados.
Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
mode
string
Define se o modo de lista de permissões está ativado. Valor padrão:
allowlist, que indica o modo de lista de permissões ativo. Outros valores indicam o modo de lista de bloqueios ativo.regions
array
Os IDs das regiões especificadas.
Exemplo:
Restrição:
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"Permitido:
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: "/"Não permitido:
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
Descrição da política: Define a capacidade máxima de disco que pode ser solicitada para PVs criados em um cluster ACS.
Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
maxSize
string
A capacidade máxima de disco que pode ser solicitada para PVs em um cluster ACS. Valor padrão: 50 GiB.
Exemplo:
Restrição:
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"Permitido:
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: "/"Não permitido:
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
Descrição da política: Especifica os namespaces onde PVCs podem ser implantadas e a capacidade máxima de disco solicitável para PVs.
Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
maxSize
string
A capacidade máxima de disco que pode ser solicitada para PVs. Valor padrão: 50 GiB.
allowNamespaces
array
Os nomes dos namespaces onde PVCs podem ser implantadas.
Exemplo:
Restrição:
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"Permitido:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc namespace: test-gatekeeper spec: accessModes: - ReadWriteOnce resources: requests: storage: 20GiNão permitido:
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
K8s-general
-
ACKAllowedRepos
Descrição da política: Os pods nos namespaces especificados só podem baixar imagens dos repositórios indicados.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
repos
array
Especifica os repositórios de imagens de onde os pods podem baixar imagens.
Exemplo:
Restrição:
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/"Permitido:
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-containerNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: test name: test-container initContainers: - image: test name: test-container-3 -
ACKBlockAutoinjectServiceEnv
Descrição da política: Os pods nos namespaces especificados devem ter
enableServiceLinks: false, impedindo a injeção de endereços IP de Service nas variáveis de ambiente do pod.Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockAutoinjectServiceEnv metadata: name: block-auto-inject-service-env spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Pod metadata: name: pod-0 namespace: test-gatekeeper spec: enableServiceLinks: false containers: - image: openpolicyagent/test-webserver:1.0 name: test-containerNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: test name: test-container -
ACKBlockAutomountToken
Descrição da política: Os pods nos namespaces especificados devem ter
automountServiceAccountToken: false, evitando a montagem automática deservice accounts.Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockAutomountToken metadata: name: block-auto-mount-service-account-token spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Pod metadata: name: pod-0 namespace: test-gatekeeper spec: automountServiceAccountToken: false containers: - image: openpolicyagent/test-webserver:v1.0 name: test-containerNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: test name: test-container -
ACKBlockEphemeralContainer
Descrição da política: Os pods nos namespaces especificados não podem iniciar contêineres efêmeros.
Gravidade: Média
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockEphemeralContainer metadata: name: block-ephemeral-container spec: enforcementAction: deny match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Pod metadata: name: good-1 namespace: test-gatekeeper spec: containers: - name: mycontainer image: testimageNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: non-test-gatekeeper spec: containers: - name: mycontainer image: testimage ephemeralContainers: - name: test image: test -
ACKBlockLoadBalancer
Descrição da política: Serviços LoadBalancer não podem ser implantados nos namespaces especificados.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
restrictedNamespaces
array
Especifica os nomes dos namespaces onde os recursos não podem ser implantados.
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockLoadBalancer metadata: name: block-load-balancer spec: match: kinds: - apiGroups: [""] kinds: ["Service"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Service metadata: name: my-service-1 namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376Não permitido:
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
Descrição da política: Serviços NodePort não podem ser implantados nos namespaces especificados.
Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockNodePort metadata: name: block-node-port spec: match: kinds: - apiGroups: [""] kinds: ["Service"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Service metadata: name: my-service-1 namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376Não permitido:
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
Descrição da política: Os pods nos namespaces especificados devem ter
limitsde recursos configurados.Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
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"Permitido:
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"Não permitido:
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
Descrição da política: Os Services nos namespaces especificados não podem usar
external IP addressesque não estejam listados no conteúdo da política.Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedIPs
array
Especifica os
external IP addressespermitidos.Exemplo:
Restrição:
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"Permitido:
apiVersion: v1 kind: Service metadata: name: my-service-3 namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376Não permitido:
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
Descrição da política: Os pods nos namespaces especificados devem ser implantados a partir de imagens cujos
digestsestejam em conformidade com o formato definido.Gravidade: Baixa
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKImageDigests metadata: name: container-image-must-have-digest spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Pod metadata: name: pod-0 namespace: test-gatekeeper spec: containers: - image: openpolicyagent/test-webserver@sha256:12e469267d21d66ac9dcae33a4d3d202ccb2591869270b95d0aad7516c7d075b name: test-containerNão permitido:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: test name: test-container initContainers: - image: test name: test-container2 -
ACKRequiredLabels
Descrição da política: Os pods nos namespaces especificados devem possuir
labelsdefinidos pelo parâmetroallowedRegex.Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedRegex
string
Especifica os rótulos em expressões regulares.
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKRequiredLabels metadata: name: must-have-label-test spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper" parameters: # message: '' labels: - key: test # value allowedRegex: "^test.*$"Permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null name: test namespace: test-gatekeeper labels: 'test': 'test_233' spec: containers: - name: mycontainer image: testimageNão permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null name: bad2 namespace: test-gatekeeper labels: 'test': '233' spec: containers: - name: mycontainer image: testimage -
ACKRequiredProbes
Descrição da política: Os pods nos namespaces especificados devem ter os tipos definidos de
readiness probeseliveness probesconfigurados.Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
probes
array
Especifica as sondas que devem ser configuradas para um pod. Valores válidos: readinessProbe e livenessProbe.
probeTypes
array
Especifica os tipos de sondas que devem ser configuradas para um pod. Valores válidos: tcpSocket, httpGet e exec.
Exemplo:
Restrição:
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"]Permitido:
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: 5Não permitido:
apiVersion: v1 kind: Pod metadata: name: p1 namespace: test-gatekeeper spec: containers: - name: liveness image: k8s.gcr.io/busybox -
ACKCheckNginxPath
Esta política impede o uso de configurações de alto risco no campo
spec.rules[].http.paths[].pathde Ingresses. Recomendamos ativar a política para Ingress-nginx com versão anterior à 1.2.1.Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
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"Permitido:
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: 80Não permitido:
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
Esta política impede o uso de configurações de alto risco no campo metadata.annotations de Ingresses. Recomendamos ativar a política para Ingress-nginx com versão anterior à 1.2.1.
Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
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"Permitido:
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: 80Não permitido:
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
Descrição da política: Não é possível criar Services LoadBalancer voltados para a internet.
Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockInternetLoadBalancer metadata: name: block-internet-load-balancer spec: match: kinds: - apiGroups: [""] kinds: ["Service"] namespaces: ["test-gatekeeper"]Permitido:
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: LoadBalancerNão permitido:
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
PSP
-
ACKPSPAllowedUsers
Descrição da política: Os pods nos namespaces especificados devem ter as configurações de
user,group,supplementalGroupsefsGroup.Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
runAsUser
object
Para mais informações sobre este parâmetro, consulte as configurações de User, os tipos de regra suportados e os valores mínimo e máximo de UIDs na PSP do Kubernetes. Para mais detalhes, veja Usuários e grupos.
runAsGroup
object
Para mais informações sobre este parâmetro, consulte as configurações de Group, os tipos de regra suportados e os valores mínimo e máximo de UIDs na PSP do Kubernetes. Para mais detalhes, veja Usuários e grupos.
supplementalGroups
object
Para mais informações sobre este parâmetro, consulte as configurações de SupplementalGroups, os tipos de regra suportados e os valores mínimo e máximo de UIDs na PSP do Kubernetes. Para mais detalhes, veja Usuários e grupos.
fsGroup
object
Para mais informações sobre este parâmetro, consulte as configurações de fsGroup, os tipos de regra suportados e os valores mínimo e máximo de UIDs na PSP do Kubernetes. Para mais detalhes, veja Usuários e grupos.
Exemplo:
Restrição:
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: 200Permitido:
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: 150Não permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad namespace: test-gatekeeper spec: containers: - image: test name: test -
ACKPSPAllowPrivilegeEscalationContainer
Descrição da política: Os pods nos namespaces especificados devem ter o parâmetro allowPrivilegeEscalation configurado.
Gravidade: Média
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPAllowPrivilegeEscalationContainer metadata: name: psp-allow-privilege-escalation-container spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
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: falseNão permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad namespace: test-gatekeeper spec: containers: - image: test name: test -
ACKPSPAppArmor
Descrição da política: Os pods nos namespaces especificados devem ter as configurações de AppArmor.
Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
probes
array
Especifica as sondas que devem ser configuradas para um pod. Valores válidos: readinessProbe e livenessProbe.
probeTypes
array
Especifica os tipos de sondas que devem ser configuradas para um pod. Valores válidos: tcpSocket, httpGet e exec.
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPAppArmor metadata: name: psp-apparmor spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper" parameters: allowedProfiles: - runtime/defaultPermitido:
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: test2Não permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad namespace: test-gatekeeper spec: containers: - image: test name: test -
ACKPSPCapabilities
Descrição da política: Os pods nos namespaces especificados devem ter as configurações de Linux Capabilities.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedCapabilities
array
Especifica as capabilities que podem ser configuradas para um pod.
requiredDropCapabilities
array
Especifica as capabilities que não podem ser configuradas para um pod.
Exemplo:
Restrição:
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"]Permitido:
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"Não permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad-1 namespace: test-gatekeeper spec: containers: - image: test name: test -
ACKPSPFlexVolumes
Descrição da política: Os pods nos namespaces especificados não podem usar drivers FlexVolume que não estejam listados no conteúdo da política.
Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedFlexVolumes
array
Especifica os drivers FlexVolume que podem ser usados por um pod.
Exemplo:
Restrição:
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"Permitido:
apiVersion: v1 kind: Pod metadata: name: pv-nas namespace: test-gatekeeper spec: containers: - name: test image: test volumes: - name: test flexVolume: driver: "alicloud/nas"Não permitido:
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
Descrição da política: Os pods nos namespaces especificados não podem usar os sysctls indicados.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
forbiddenSysctls
array
Especifica os sysctls que não podem ser usados por um pod.
Exemplo:
Restrição:
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.*"Permitido:
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: testNão permitido:
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
Descrição da política: Os pods nos namespaces especificados devem ter configurações de fsGroup que atendam ao conteúdo da política.
Gravidade: Média
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
rule
string
Para mais informações sobre este parâmetro, consulte as configurações de fsGroup na PSP do Kubernetes. Os parâmetros MustRunAs, MayRunAs e RunAsAny são suportados. Para mais detalhes, veja Volumes e sistemas de arquivos.
ranges
object
Valores válidos:
min: o valor mínimo do ID de fsGroup.
max: o valor máximo do ID de fsGroup.
Exemplo:
Restrição:
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: 1000Permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: good namespace: test-gatekeeper spec: securityContext: fsGroup: 100 containers: - image: test name: testNão permitido:
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
Descrição da política: Os volumes hostPath montados em pods nos namespaces especificados devem atender às condições definidas.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedHostPaths
object
Especifica os volumes hostPath que podem ser montados em um pod.
readOnly
boolean
Define se os volumes são somente leitura.
pathPrefix
string
Especifica os prefixos dos volumes.
Exemplo:
Restrição:
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"Permitido:
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: /fooNão permitido:
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
Descrição da política: Os pods nos namespaces especificados não podem compartilhar os namespaces do host.
Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPHostNamespace metadata: name: psp-host-namespace spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
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: {}Não permitido:
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
Descrição da política: Define se os pods nos namespaces especificados podem usar a rede do host e portas específicas.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
hostNetwork
boolean
Define se os pods podem usar a rede do host.
min
int
Especifica o número mínimo da porta do host.
max
int
Especifica o número máximo da porta do host.
Exemplo:
Restrição:
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: 9000Permitido:
apiVersion: v1 kind: Pod metadata: name: good-2 namespace: test-gatekeeper spec: hostNetwork: true containers: - image: test name: test-container ports: - hostPort: 80 containerPort: 80 initContainers: - image: test name: test-container2 ports: - hostPort: 8080 containerPort: 8080Não permitido:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: non-test-gatekeeper spec: hostNetwork: true containers: - image: test name: test-container ports: - hostPort: 22 containerPort: 22 -
ACKPSPPrivilegedContainer
Descrição da política: Os pods nos namespaces especificados não podem executar contêineres privilegiados.
Gravidade: Alta
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPPrivilegedContainer metadata: name: psp-privileged-container spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: good1 namespace: test-gatekeeper spec: containers: - image: test name: testNão permitido:
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
Descrição da política: Os pods nos namespaces especificados devem ter o tipo de Proc Mount definido no conteúdo da política.
Gravidade: Alta
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
procMount
string
Especifica o tipo de Proc Mount. Valores válidos:
Default: O diretório /proc não pode ser montado.
Unmasked: O diretório /proc pode ser montado.
Para mais informações, veja AllowedProcMountTypes.
Exemplo:
Restrição:
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 UnmaskedPermitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: good1 namespace: test-gatekeeper spec: containers: - image: test name: test securityContext: procMount: "Default"Não permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad3 namespace: test-gatekeeper spec: containers: - image: test name: test securityContext: procMount: "Unmasked" initContainers: - image: test name: test2 -
ACKPSPReadOnlyRootFilesystem
Descrição da política: Os pods nos namespaces especificados devem executar com sistemas de arquivos raiz somente leitura.
Gravidade: Média
Descrição dos parâmetros: Nenhuma
Exemplo:
Restrição:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPReadOnlyRootFilesystem metadata: name: psp-readonlyrootfilesystem spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"Permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: good1 namespace: test-gatekeeper spec: containers: - image: test name: test securityContext: readOnlyRootFilesystem: trueNão permitido:
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
Descrição da política: Os pods nos namespaces especificados devem ter os perfis seccomp indicados configurados.
Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedProfileTypes
array
Especifica o tipo de perfis seccomp permitidos.
allowedProfiles
array
Especifica os perfis seccomp permitidos.
Exemplo:
Restrição:
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.jsonPermitido:
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.jsonNão permitido:
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
Descrição da política: Os pods nos namespaces especificados não podem ter opções SELinux que não estejam listadas pelo parâmetro allowedSELinuxOptions.
Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
allowedSELinuxOptios
object
Especifica as opções SELinux que podem ser configuradas para um pod. Para mais informações, consulte SELinuxOptions v1 core.
Exemplo:
Restrição:
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_uPermitido:
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: testNão permitido:
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
Descrição da política: Apenas volumes dos tipos especificados podem ser montados em pods no namespace indicado.
Gravidade: Baixa
A seção a seguir descreve os parâmetros.
Parâmetro
Tipo
Descrição
volumes
object
Especifica os tipos de volumes permitidos para montagem.
Exemplo:
Restrição:
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 allowedFlexVolumesPermitido:
apiVersion: v1 kind: Pod metadata: name: pv-oss namespace: test-gatekeeper spec: containers: - name: test image: test volumes: - name: test flexVolume: driver: "alicloud/oss"Não permitido:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad-1 namespace: non-test-gatekeeper spec: containers: - image: test name: test volumes: - name: test-volume hostPath: path: /data