ポッドのセキュリティポリシーを設定して、ポッドのデプロイまたは更新要求のセキュリティを検証できます。 クラスターポリシー管理機能には、コンプライアンス、インフラ、K8s-general、PSPの4つの組み込みルールライブラリがあります。
背景情報
ACKは、次のタイプの定義済みセキュリティポリシーを提供します。
コンプライアンス: このタイプのセキュリティポリシーは、Alibaba Cloud Kubernetes Security Hardeningなどのコンプライアンス基準に基づいてカスタマイズされています。
Infra: このタイプのセキュリティポリシーは、クラウドインフラストラクチャリソースのセキュリティを確保および強化するために使用されます。
K8s-general: このタイプのセキュリティポリシーは、Container Service for Kubernetes (ACK) クラスターの機密リソースの設定を制限および正規化し、ACKクラスターのアプリケーションのセキュリティを強化するために使用されます。
PSP: このタイプのセキュリティポリシーは、オープンソースKubernetesのポッドセキュリティポリシー (PSP) の代替として使用でき、同じアクセス制御機能を提供します。
定義済みセキュリティポリシー
次の表に、ACKの事前定義されたセキュリティポリシーを示します。
カテゴリ | ポリシー | 説明 | [重大度] |
コンプライアンス |
| ポッド環境変数を指定する場合、secretKeyRefパラメーターを使用してSecretsを参照することはできません。 | medium |
| 指定された名前空間のポッドは、 | low | |
| 指定された型のリソースは、指定された名前空間にデプロイできません。 | low | |
| 指定された名前空間内のRoleBindingsを使用して、指定されたロールまたはクラスターロールのみをバインドできます。 | high | |
| 指定された名前空間は削除できません。 | medium | |
| 指定された名前空間のサービスインスタンスは削除できません。 | medium | |
インフラ |
| 指定された名前空間内のポッドは、shareProcessNamespaceパラメーターで構成できません。 | high |
| emptyDirボリュームをマウントするときは、 | low | |
| 指定された名前空間のポッドは、 | low | |
| 指定されたリージョンのObject Storage Service (OSS) バケットは、指定された名前空間のポッドにマウントできます。 | low | |
| ACKクラスターに作成される永続ボリューム (PV) に対して要求できる最大ディスク容量を指定します。 | medium | |
| 永続ボリュームクレーム (PVC) をデプロイできる名前空間と、PVに要求できる最大ディスク容量を指定します。 | medium | |
| 指定された名前空間のポッドは、指定されたボリュームを使用できません。 | medium | |
K8s-general |
| 指定された名前空間内のポッドは、指定されたイメージリポジトリからのみイメージをプルできます。 | high |
| 指定された名前空間内のポッドは、サービスIPアドレスがポッド環境変数に注入されないことを指定する | low | |
| 指定された名前空間のポッドは、 | high | |
| 指定された名前空間のポッドは、エフェメラルコンテナを起動できません。 | medium | |
| 指定した名前空間にLoadBalancerサービスをデプロイできません。 | high | |
| NodePortサービスは、指定された名前空間にデプロイできません。 | high | |
| 指定された名前空間のポッドは、リソース | low | |
| 指定された名前空間のサービスは、ポリシーコンテンツで指定されていない外部IPアドレスを使用できません。 | high | |
| 指定された名前空間のポッドは、指定された形式に準拠したダイジェストのイメージからデプロイする必要があります。 | low | |
| 指定した名前空間のポッドには、ポリシーの内容に準拠したラベルが必要です。 | low | |
| 指定された名前空間のポッドは、指定されたタイプの準備プローブとライブネスプローブで構成する必要があります。 | medium | |
| Ingress設定の | high | |
| Ingress設定の | high | |
| インターネット向けLoadBalancerサービスは作成できません。 | high | |
| クラスターのMarketplaceページに承認コンポーネントをインストールした後、そのコンポーネントを使用して、特定の名前空間にデプロイされたポッドのイメージ内の署名やソフトウェア部品表 (SBOM) などのセキュリティメタデータを検証できます。 | high | |
PSP |
| 指定された名前空間のポッドは、 | medium |
| 指定された名前空間のポッドは、 | medium | |
| 指定した名前空間のポッドは、AppArmor設定で構成する必要があります。 | low | |
| 指定された名前空間のポッドは、Linux Capabilities設定で構成する必要があります。 | high | |
| 指定した名前空間のポッドは、ポリシーの内容に準拠したfsGroup設定で構成する必要があります。 | medium | |
| 指定された名前空間内のポッドは、ポリシーコンテンツで指定されていないFlexVolumeドライバを使用できません。 | medium | |
| 指定された名前空間のポッドは、指定されたsysctlsを使用できません。 | high | |
| 指定された名前空間内のポッドにマウントされるhostPathボリュームは、指定された条件を満たす必要があります。 | high | |
| 指定された名前空間のポッドは、ホスト名前空間を共有できません。 | high | |
| 指定した名前空間内のポッドがホストネットワークと指定したポートを使用できるかどうかを指定します。 | high | |
| 指定された名前空間のポッドは特権コンテナを実行できません。 | high | |
| 指定された名前空間のポッドは、ポリシーコンテンツで指定されたProcマウントタイプで構成する必要があります。 | low | |
| 指定された名前空間のポッドは、読み取り専用のルートファイルシステムで実行する必要があります。 | medium | |
| 指定された名前空間内のポッドは、ポリシーコンテンツで指定されていないSELinuxオプションで構成することはできません。 | low | |
| 指定された名前空間のポッドは、指定されたseccompプロファイルで設定する必要があります。 | low | |
| 指定された型のボリュームのみ、指定された名前空間のポッドにマウントできます。 | medium |
コンプライアンス
ACKNoEnvVarSecrets
ポリシーの説明: ポッド環境変数を指定する場合、secretKeyRefパラメーターを使用してSecretsを参照することはできません。
重大度: 中
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKNoEnvVarSecrets metadata: name: no-env-var-secrets spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]
許可:
apiVersion: v1 kind: Pod metadata: name: mypod namespace: test-gatekeeper spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" volumes: - name: foo secret: secretName: mysecret items: - key: username path: my-group/my-username
禁止:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - name: mycontainer image: redis env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: mysecret key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: mysecret key: password restartPolicy: Never
ACKPodsRequireSecurityContext
ポリシーの説明: 指定された名前空間のポッドは、
securityContext
パラメーターで設定する必要があります。重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPodsRequireSecurityContext metadata: name: pods-require-security-context annotations: description: "Requires that Pods must have a `securityContext` defined." spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]
許可:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: test namespace: test-gatekeeper spec: securityContext: runAsNonRoot: false containers: - image: test name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
禁止:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad namespace: non-test-gatekeeper spec: containers: - image: test name: test2 - image: test name: test resources: {} securityContext: runAsNonRoot: false
ACKRestrictNamespaces
ポリシーの説明: 指定された型のリソースは、指定された名前空間にデプロイできません。
重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
restrictedNamespaces
array
リソースをデプロイできない名前空間の名前を指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKRestrictNamespaces metadata: name: restrict-default-namespace annotations: description: "Restricts resources from using the restricted namespace." spec: match: kinds: - apiGroups: [''] kinds: ['Pod'] parameters: restrictedNamespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: test namespace: non-test-gatekeeper spec: containers: - image: test name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
禁止:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - name: mycontainer image: redis restartPolicy: Never
ACKRestrictRoleBindings
ポリシーの説明: 指定された名前空間のRoleBindingsを使用して、指定されたロールまたはクラスターロールのみを割り当てることができます。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
restrictedRole
object
割り当てが許可されていないクラスターの役割を指定します。
allowedSubjects
array
マウントできるサブジェクトを指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKRestrictRoleBindings metadata: name: restrict-clusteradmin-rolebindings annotations: description: "Restricts use of sensitive role in specific rolebinding." spec: match: kinds: - apiGroups: ["rbac.authorization.k8s.io"] kinds: ["RoleBinding"] parameters: restrictedRole: apiGroup: "rbac.authorization.k8s.io" kind: "ClusterRole" name: "cluster-admin" allowedSubjects: - apiGroup: "rbac.authorization.k8s.io" kind: "Group" name: "system:masters"
許可:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: good-2 namespace: test-gatekeeper subjects: - kind: Group name: 'system:masters' roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
禁止:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: bad-1 namespace: test-gatekeeper subjects: - kind: ServiceAccount name: policy-template-controller roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
ACKNamespacesDeleteProtection
ポリシーの説明: 指定された名前空間は削除できません。
protectionNamespaces
パラメーターを、削除できない名前空間の名前に設定できます。このポリシーを有効にするには、ゲートキーパー3.10.0.130-g0e79597d-aliyun以降を使用する必要があります。 gatekeeperのバージョンの詳細については、「gatekeeper」をご参照ください。
重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
protectionNamespaces
array
削除できない名前空間の名前。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKNamespacesDeleteProtection metadata: name: namespace-delete-protection spec: match: kinds: - apiGroups: [''] kinds: ['Namespace'] parameters: protectionNamespaces: - test-gatekeeper
許可:
apiVersion: v1 kind: Namespace metadata: name: will-delete
禁止:
apiVersion: v1 kind: Namespace metadata: name: test-gatekeeper
ACKServicesDeleteProtection
ポリシーの説明: 指定された名前空間内のServiceインスタンスは削除できません。
protectionServices
パラメーターを、削除できないServiceインスタンスの名前に設定できます。重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
protectionServices
array
指定された名前空間内の、削除できないServiceインスタンスの名前。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKServicesDeleteProtection metadata: name: service-delete-protection annotations: description: "Protect to delete specific service." spec: enforcementAction: deny match: kinds: - apiGroups: [''] kinds: ['Service'] namespaces: ["test-gatekeeper"] parameters: protectionServices: - test-svc
許可:
apiVersion: v1 kind: Service metadata: name: good namespace: test-gatekeeper
禁止:
apiVersion: v1 kind: Service metadata: name: test-svc
インフラ
ACKBlockProcessNamespaceSharing
ポリシーの説明: 指定された名前空間のポッドを
shareProcessNamespace
パラメーターで構成することはできません。重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockProcessNamespaceSharing ACKCheckNginxPathmetadata: name: block-share-process-namespace spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]
許可:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: test-3 namespace: test-gatekeeper spec: containers: - image: test name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
禁止:
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: test name: bad namespace: test-gatekeeper spec: shareProcessNamespace: true containers: - image: test name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
ACKEmptyDirHasSizeLimit
ポリシーの説明: emptyDirボリュームをマウントするときは、
sizelimit
パラメーターを設定する必要があります。重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKEmptyDirHasSizeLimit metadata: name: empty-dir-has-sizelimit spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]
許可:
apiVersion: v1 kind: Pod metadata: name: test-1 namespace: test-gatekeeper spec: containers: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: sizeLimit: "10Mi"
禁止:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {}
ACKLocalStorageRequireSafeToEvict
ポリシーの説明: 指定された名前空間のポッドは、
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
のアノテーションで構成する必要があります。 このアノテーションで構成されていないポッドは、スケーリングアクティビティ中に削除されません。重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKLocalStorageRequireSafeToEvict metadata: name: local-storage-require-safe-to-evict spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"]
許可:
apiVersion: v1 kind: Pod metadata: name: test-1 namespace: test-gatekeeper annotations: 'cluster-autoscaler.kubernetes.io/safe-to-evict': 'true' spec: containers: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - mountPath: /test-pd name: test-volume volumes: - name: test-volume hostPath: # directory location on host path: /data # this field is optional type: Directory
禁止:
apiVersion: v1 kind: Pod metadata: name: bad namespace: test-gatekeeper spec: containers: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {}
ACKOSSStorageLocationConstraint
ポリシーの説明: 指定したリージョンのOSSバケットを指定した名前空間のポッドにマウントできるかどうかを指定します。
重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
モード
String
ホワイトリストモードを有効にするかどうかを指定します。 デフォルト値:
allowlist
。ホワイトリストモードが有効になっていることを示します。 その他の値は、ブラックリストモードが有効であることを示します。リージョン
array
指定されたリージョンID。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKOSSStorageLocationConstraint metadata: name: restrict-oss-location annotations: description: "Restricts location of oss storage in cluster." spec: match: kinds: - apiGroups: [""] kinds: ["PersistentVolume", "Pod"] namespaces: - "test-gatekeeper" parameters: mode: "allowlist" regions: - "cn-beijing"
許可:
apiVersion: v1 kind: Pod metadata: name: pod-oss-csi-good namespace: test-gatekeeper spec: containers: - name: test image: test volumes: - name: test csi: driver: ossplugin.csi.alibabacloud.com volumeAttributes: bucket: "oss" url: "oss-cn-beijing.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other" path: "/"
禁止:
apiVersion: v1 kind: Pod metadata: name: pod-oss-csi namespace: test-gatekeeper spec: containers: - name: test image: test volumes: - name: test csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "oss" url: "oss-cn-hangzhou.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other" path: "/"
ACKPVSizeConstraint
ポリシーの説明: ACKクラスターで作成されるPVに対して要求できる最大ディスク容量を指定します。
重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
maxSize
String
ACKクラスターのPVに要求できる最大ディスク容量。 デフォルト値: 50 GiB。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPVSizeConstraint metadata: name: limit-pv-size annotations: description: "Limit the pv storage capacity size within a specified maximum amount." spec: enforcementAction: deny match: kinds: - apiGroups: [ "" ] kinds: [ "PersistentVolume" ] parameters: maxSize: "50Gi"
許可:
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss-csi labels: alicloud-pvname: pv-oss spec: capacity: storage: 25Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "oss" url: "oss-cn-beijing.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other" path: "/"
禁止:
apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss-csi-bad labels: alicloud-pvname: pv-oss spec: capacity: storage: 500Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-oss nodePublishSecretRef: name: oss-secret namespace: default volumeAttributes: bucket: "oss" url: "oss-cn-beijing.aliyuncs.com" otherOpts: "-o max_stat_cache_size=0 -o allow_other" path: "/"
ACKPVCConstraint
ポリシーの説明: PVCをデプロイできる名前空間と、PVに要求できる最大ディスク容量を指定します。
重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
maxSize
String
PVに要求できる最大ディスク容量。 デフォルト値: 50 GiB。
allowNamespaces
array
PVCをデプロイできる名前空間の名前。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPVCConstraint metadata: name: limit-pvc-size-and-ns annotations: description: "Limit the maximum pvc storage capacity size and the namespace whitelists that can be deployed." spec: enforcementAction: deny match: kinds: - apiGroups: [ "" ] kinds: [ "PersistentVolumeClaim" ] parameters: maxSize: "50Gi" allowNamespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc namespace: test-gatekeeper spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
禁止:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bad-disk-pvc namespace: test-gatekeeper spec: accessModes: - ReadWriteOnce resources: requests: storage: 200Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bad-namespace-pvc namespace: test-gatekeeper-bad spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
ACKBlockVolumeTypes
ポリシーの説明: 指定した名前空間内のポッドで使用できないボリュームを指定します。
重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
ボリューム
array
使用が許可されていないボリュームのリスト。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockVolumeTypes metadata: name: block-volume-types spec: enforcementAction: deny match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: ["test-gatekeeper"] parameters: volumes: - "gitRepo"
許可:
apiVersion: v1 kind: Pod metadata: name: use-empty-dir namespace: test-gatekeeper spec: containers: - name: test image: test volumes: - name: emptydir-volume emptyDir: {}
禁止:
apiVersion: v1 kind: Pod metadata: name: use-git-repo namespace: test-gatekeeper spec: containers: - name: test image: test volumes: - name: git-volume gitRepo: repository: "git@***:***/my-git-repository.git" revision: "22f1d8406d464b0c08***"
K8s-general
ACKAllowedRepos
ポリシーの説明: 指定された名前空間内のポッドは、指定されたイメージリポジトリからのみイメージをプルできます。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
リポジトリ
array
ポッドがイメージをプルできるイメージリポジトリを指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKAllowedRepos metadata: name: allowed-repos spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper" parameters: repos: - "registry-vpc.cn-hangzhou.aliyuncs.com/acs/" - "registry.cn-hangzhou.aliyuncs.com/acs/"
許可:
apiVersion: v1 kind: Pod metadata: name: pod-01 namespace: test-gatekeeper spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/test-webserver name: test-container-1 initContainers: - image: registry.cn-hangzhou.aliyuncs.com/acs/test-webserver name: test-container
禁止:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: k8s.gcr.io/test-webserver name: test-container initContainers: - image: k8s.gcr.io/test-webserver name: test-container-3
ACKBlockAutoinjectServiceEnv
ポリシーの説明: 指定された名前空間内のポッドは、サービスIPアドレスがポッド環境変数に挿入されないことを指定する
enableServiceLinks: false
で構成する必要があります。重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockAutoinjectServiceEnv metadata: name: block-auto-inject-service-env spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: Pod metadata: name: pod-0 namespace: test-gatekeeper spec: enableServiceLinks: false containers: - image: openpolicyagent/test-webserver:1.0 name: test-container
禁止:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: k8s.gcr.io/test-webserver name: test-container
ACKBlockAutomountToken
ポリシーの説明: 指定された名前空間のポッドは、
automountServiceAccountToken: false
で構成する必要があります。これは、サービスアカウント
が自動的にマウントされないことを指定します。重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockAutomountToken metadata: name: block-auto-mount-service-account-token spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: Pod metadata: name: pod-0 namespace: test-gatekeeper spec: automountServiceAccountToken: false containers: - image: openpolicyagent/test-webserver:v1.0 name: test-container
禁止:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: test-gatekeeper spec: containers: - image: k8s.gcr.io/test-webserver name: test-container
ACKBlockEphemeralContainer
ポリシーの説明: 指定された名前空間のポッドは、エフェメラルコンテナを起動できません。
重大度: 中
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockEphemeralContainer metadata: name: block-ephemeral-container spec: enforcementAction: deny match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: Pod metadata: name: good-1 namespace: test-gatekeeper spec: containers: - name: mycontainer image: redis
禁止:
apiVersion: v1 kind: Pod metadata: name: bad-1 namespace: non-test-gatekeeper spec: containers: - name: mycontainer image: redis ephemeralContainers: - name: test image: test
ACKBlockLoadBalancer
ポリシーの説明: 指定した名前空間にLoadBalancerサービスをデプロイすることはできません。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
restrictedNamespaces
array
リソースをデプロイできない名前空間の名前を指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockLoadBalancer metadata: name: block-load-balancer spec: match: kinds: - apiGroups: [""] kinds: ["Service"] namespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: Service metadata: name: my-service-1 namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376
禁止:
apiVersion: v1 kind: Service metadata: name: my-service namespace: test-gatekeeper spec: type: LoadBalancer selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376
ACKBlockNodePort
ポリシーの説明: 指定した名前空間にNodePortサービスをデプロイすることはできません。
重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockNodePort metadata: name: block-node-port spec: match: kinds: - apiGroups: [""] kinds: ["Service"] namespaces: - "test-gatekeeper"
許可:
apiVersion: v1 kind: Service metadata: name: my-service-1 namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376
禁止:
apiVersion: v1 kind: Service metadata: name: my-service namespace: test-gatekeeper spec: type: NodePort selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376
ACKContainerLimits
ポリシーの説明: 指定された名前空間のポッドは、リソース
制限
で設定する必要があります。重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKContainerLimits metadata: name: container-must-have-limits spec: match: kinds: - apiGroups: [""] kinds: ["Pod"] namespaces: - "test-gatekeeper" parameters: cpu: "1000m" memory: "1Gi"
許可:
apiVersion: v1 kind: Pod metadata: name: pod-1 namespace: test-gatekeeper spec: containers: - image: openpolicyagent/test-webserver name: test-container resources: limits: memory: "100Mi" cpu: "500m"
禁止:
apiVersion: v1 kind: Pod metadata: name: pod-2 namespace: non-test-gatekeeper spec: containers: - image: openpolicyagent/test-webserver name: test-container resources: limits: memory: "100Gi" cpu: "2000m"
ACKExternalIPs
ポリシーの説明: 指定された名前空間のサービスは、ポリシーコンテンツで指定されていない
外部IPアドレス
を使用できません。重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedIP
array
使用できる
外部IPアドレス
を指定します。例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKExternalIPs metadata: name: external-ips spec: match: kinds: - apiGroups: [""] kinds: ["Service"] namespaces: - "test-gatekeeper" parameters: allowedIPs: - "192.168.0.5"
許可:
apiVersion: v1 kind: Service metadata: name: my-service-3 namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376
禁止:
apiVersion: v1 kind: Service metadata: name: my-service namespace: test-gatekeeper spec: selector: app: MyApp ports: - name: http protocol: TCP port: 80 targetPort: 9376 externalIPs: - 80.11.XX.XX
ACKImageDigests
ポリシーの説明: 指定された名前空間のポッドは、
ダイジェスト
が指定された形式に準拠しているイメージからデプロイする必要があります。重大度: 低い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKImageDigests メタデータ: name: container-image-must-have-digest spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: v1 種類: ポッド メタデータ: 名前: pod-0 名前空間: test-gatekeeper spec: containers: -image: openpolicyagent/test-webserver @ sha256:12e469267d21d66ac9dcae33a4d3d202ccb2591869270b95d0aad7516c7d075b 名前: test-container
禁止:
apiVersion: v1 種類: ポッド メタデータ: 名前: bad-1 名前空間: test-gatekeeper spec: containers: -image: k8s.gcr.io/test-webserver 名前: test-container initContainers: -image: k8s.gcr.io/test-webserver 名前: test-container2
ACKRequiredLabels
ポリシーの説明: 指定された名前空間のポッドには、
allowedRegex
パラメーターで指定されたラベル
が必要です。重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedRegex
String
ラベルを正規表現で指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKRequiredLabels メタデータ: 名前: must-have-label-test spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 パラメータ: # message: '' ラベル: -キー: テスト # 値 allowedRegex: "^ test.*$"
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null name: test 名前空間: test-gatekeeper ラベル: 'test': 'test_233' spec: containers: -name: mycontainer 画像: redis
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null 名前: bad2 名前空間: test-gatekeeper ラベル: 'test': '233' spec: containers: -name: mycontainer 画像: redis
ACKRequiredProbes
ポリシーの説明: 指定された名前空間のポッドは、指定されたタイプの
readiness probes
とliveness probes
で構成する必要があります。重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
プローブ
array
ポッドに対して構成する必要があるプローブを指定します。 有効な値は、readinessProbeおよびlivenessProbeです。
probeTypes
array
ポッドに対して構成する必要があるプローブの種類を指定します。 有効な値: tcpSocket、httpGet、およびexec。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKRequiredProbes メタデータ: 名前: must-have-probes spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: probes: ["readinessProbe", "livenessProbe"] probeTypes: ["tcpSocket", "httpGet", "exec"]
許可:
apiVersion: v1 種類: ポッド メタデータ: 名前: p4 名前空間: test-gatekeeper spec: containers: -name: liveness 画像: k8s.gcr.io/busybox readinessProbe: exec: command: -猫 - /tmp /健康 initialDelaySeconds: 5 periodSeconds: 5 livenessProbe: exec: command: -猫 - /tmp /健康 initialDelaySeconds: 5 periodSeconds: 5
禁止:
apiVersion: v1 種類: ポッド メタデータ: 名前: p1 名前空間: test-gatekeeper spec: containers: -name: liveness 画像: k8s.gcr.io/busybox
ACKCheckNginxPath
このポリシーでは、Ingressの
spec.ru les[].http.paths[].path
フィールドでリスクの高い設定を使用できません。 バージョンが1.2.1より前のIngress-nginxのポリシーを有効にすることを推奨します。重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKCheckNginxPath メタデータ: name: block-nginx-path spec: enforcementAction: 拒否 マッチ: 種類: -apiGroups: ["extensions", "networking.k8s.io"] kinds: ["Ingress"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: networking.k8s.io/v1 kind: Ingress メタデータ: name: good-paths 名前空間: test-gatekeeper spec: rules: - host: foo.example.com http: paths: - path: /tea pathType: プレフィックス backend: service: name: tea-svc port: number: 80 - path: /coffee pathType: プレフィックス backend: service: name: coffee-svc port: 番号: 80
禁止:
apiVersion: networking.k8s.io/v1 kind: Ingress メタデータ: 名前: bad-path-secrets 名前空間: test-gatekeeper spec: rules: - host: foo.example.com http: paths: -パス: /var/run/secrets pathType: プレフィックス backend: service: name: tea-svc port: 番号: 80
ACKCheckNginxアノテーション
このポリシーでは、Ingressのmetadata.annotationsフィールドでリスクの高い設定を使用できません。 バージョンが1.2.1より前のIngress-nginxのポリシーを有効にすることを推奨します。
重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKCheckNginxAnnotation メタデータ: name: block-nginx-annotation spec: マッチ: 種類: -apiGroups: ["extensions", "networking.k8s.io"] kinds: ["Ingress"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: networking.k8s.io/v1 kind: Ingress メタデータ: name: good-annotations 名前空間: test-gatekeeper アノテーション: nginx.org/good: "value" spec: rules: - host: foo.example.com http: paths: - path: /tea pathType: プレフィックス backend: service: name: tea-svc port: number: 80 - path: /coffee pathType: プレフィックス backend: service: name: coffee-svc port: 番号: 80
禁止:
apiVersion: networking.k8s.io/v1 kind: Ingress メタデータ: 名前: var-run-secrets 名前空間: test-gatekeeper アノテーション: nginx.org/bad: "/var/run/secrets" spec: rules: - host: foo.example.com http: paths: - path: /tea pathType: プレフィックス backend: service: name: tea-svc port: number: 80 - path: /coffee pathType: プレフィックス backend: service: name: coffee-svc port: 番号: 80
ACKBlockInternetLoadBalancer
ポリシーの説明: インターネット接続のLoadBalancerサービスは作成できません。
重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKBlockInternetLoadBalancer メタデータ: 名前: block-internet-load-balancer spec: マッチ: 種類: - apiGroups: [""] kinds: ["サービス"] 名前空間: ["test-gatekeeper"]
許可:
apiVersion: v1 種類: サービス メタデータ: 名前: my-service 名前空間: non-test-gatekeeper アノテーション: 'service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type': 'intranet' spec: セレクタ: アプリ: MyApp ポート: - name: http protocol: TCP port: 80 targetPort: 9376 タイプ: LoadBalancer
禁止:
apiVersion: v1 種類: サービス メタデータ: 名前: bad-service-2 名前空間: test-gatekeeper アノテーション: 'service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type': 'internet' spec: type: LoadBalancer セレクタ: アプリ: MyApp ポート: - name: http protocol: TCP port: 80 targetPort: 9376
RatifyVerification
ポリシーの説明: クラスターのMarketplaceページに承認コンポーネントをインストールした後、そのコンポーネントを使用して、特定の名前空間にデプロイされたポッドのイメージ内の署名やソフトウェア部品表 (SBOM) などのセキュリティメタデータを検証できます。
重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: RatifyVerification メタデータ: 名前: ratify-constraint spec: enforcementAction: 拒否 マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: ["default"]
許可:
apiVersion: v1 種類: ポッド メタデータ: 名前: pod-1 名前空間: test-gatekeeper spec: containers: -image: registry.cn-hangzhou.aliyuncs.com/acs/signed# 有効な署名でイメージをデプロイします。 名前: test-container
禁止:
apiVersion: v1 種類: ポッド メタデータ: 名前: bad-1 名前空間: test-gatekeeper spec: containers: -image: registry.cn-hangzhou.aliyuncs.com/acs/unsigned# 有効な署名なしでイメージをデプロイします。 名前: test-container
PSP
ACKPSPAllowedUsers
ポリシーの説明: 指定された名前空間のポッドは、
user
、group
、supplementalGroups
、およびfsGroup
設定で構成する必要があります。重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
runAsUser
object
パラメーターの詳細については、ユーザーの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。
runAsGroup
object
パラメーターの詳細については、グループの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。
supplementalGroups
object
パラメーターの詳細については、SupplementalGroupsの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。
fsGroup
object
パラメーターの詳細については、fsGroupの設定、サポートされているルールタイプ、およびKubernetesのPSPのUIDの最大値と最小値をご参照ください。 詳細については、「ポッドセキュリティポリシー」をご参照ください。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPAallowedUsers メタデータ: 名前: psp-pods-allowed-user-ranges spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: runAsUser: ルール: MustRunAs # MustRunAsNonRoot # RunAsAny 範囲: -分: 100 max: 200 runAsGroup: ルール: MustRunAs # MayRunAs # RunAsAny 範囲: -分: 100 max: 200 supplementalGroups: ルール: MustRunAs # MayRunAs # RunAsAny 範囲: -分: 100 max: 200 fsGroup: ルール: MustRunAs # MayRunAs # RunAsAny 範囲: -分: 100 max: 200
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good2 名前空間: test-gatekeeper spec: securityContext: fsGroup: 150 supplementalGroups: -150 containers: -画像: テスト name: test securityContext: runAsUser: 150 runAsGroup: 150
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト 名前: test
ACKPSPAllowPrivilegeEscalationContainer
ポリシーの説明: 指定された名前空間のポッドは、allowPrivilegeEscalationパラメーターで設定する必要があります。
重大度: 中
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPAllowPrivilegeEscalationContainer メタデータ: 名前: psp-allow-privilege-escalation-container spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: 良い 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: allowPrivilegeEscalation: false initContainers: -画像: テスト 名前: test2 securityContext: allowPrivilegeEscalation: false
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト 名前: test
ACKPSPAppArmor
ポリシーの説明: 指定した名前空間のポッドは、AppArmor設定で構成する必要があります。
重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
プローブ
array
ポッドに対して構成する必要があるプローブを指定します。 有効な値は、readinessProbeおよびlivenessProbeです。
probeTypes
array
ポッドに対して構成する必要があるプローブの種類を指定します。 有効な値: tcpSocket、httpGet、およびexec。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPAppArmor メタデータ: 名前: psp-apparmor spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: allowedProfiles: -ランタイム /デフォルト
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: 良い 名前空間: test-gatekeeper アノテーション: 'container.apparmor.security.beta.kubernetes.io/test': 'runtime/default' 'container.apparmor.security.beta.kubernetes.io/test2': 'runtime/default' spec: containers: -画像: テスト name: test initContainers: -画像: テスト 名前: test2
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト 名前: test
ACKPSPCapabilities
ポリシーの説明: 指定された名前空間のポッドは、Linux Capabilities設定で構成する必要があります。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedCapabilities
array
ポッドに設定できる機能を指定します。
requiredDropCapabilities
array
ポッドに設定できない機能を指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPCapabilities メタデータ: 名前: psp-capabilities spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: allowedCapabilities: ["CHOWN"] requiredDropCapabilities: ["NET_ADMIN" 、"SYS_ADMIN" 、"NET_RAW"]
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good-4 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: 機能: 追加: -CHOWN ドロップ: -"NET_ADMIN" -"SYS_ADMIN" -"NET_RAW"
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad-1 名前空間: test-gatekeeper spec: containers: -画像: テスト 名前: test
ACKPSPFlexVolumes
ポリシーの説明: 指定された名前空間のポッドは、ポリシーコンテンツで指定されていないFlexVolumeドライバーを使用できません。
重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedFlexVolumes
array
ポッドで使用できるFlexVolumeドライバーを指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPFlexVolumes メタデータ: 名前: psp-flexvolume-drivers spec: マッチ: 種類: - apiGroups: [""] kinds: ["Pod", "PersistentVolume"] 名前空間: -「テストゲートキーパー」 parameters: allowedFlexVolumes: #[] -ドライバ: "alicloud/disk" -ドライバー: "alicloud/nas" -ドライバー: "alicloud/oss" -ドライバー: "alicloud/cpfs"
許可:
apiVersion: v1 種類: ポッド メタデータ: name: pv-nas 名前空間: test-gatekeeper spec: containers: -name: テスト 画像: テスト volumes: -name: テスト flexVolume: ドライバー: "alicloud/nas"
禁止:
apiVersion: v1 種類: ポッド メタデータ: 名前: pv-oss-flexvolume 名前空間: test-gatekeeper spec: containers: -name: テスト 画像: テスト volumes: -name: テスト flexVolume: ドライバー: "alicloud/ossxx"
ACKPSPForbiddenSysctls
ポリシーの説明: 指定された名前空間のポッドは、指定されたsysctlsを使用できません。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
forbiddenSysctls
array
ポッドで使用できないsysctlsを指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPForbiddenSysctls メタデータ: 名前: psp-banded-sysctls spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: forbiddenSysctls: # - "*" # * はすべてのsysctlsを禁止するために使用できます -「カーネル。* 」
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good-2 名前空間: test-gatekeeper spec: securityContext: sysctls: -名: 'net.ipv4.tcp_syncookies' 値: "65536" containers: -画像: テスト 名前: test
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad-1 名前空間: test-gatekeeper spec: securityContext: sysctls: -名: 'kernel.shm_rmid_forced' 値: '1024' containers: -画像: テスト 名前: test
ACKPSPFSGroup
ポリシーの説明: 指定された名前空間のポッドは、ポリシーの内容に準拠したfsGroup設定で構成する必要があります。
重大度: 中
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
ルール
String
パラメーターの詳細については、「KubernetesのPSPのfsGroupの設定」をご参照ください。MustRunAs、MayRunAs、およびRunAsAnyパラメーターがサポートされています。 詳細については、「ボリュームとファイルシステム」をご参照ください。
範囲
object
有効な値:
min: fsGroup IDの最小値。
max: fsGroup IDの最大値。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPFSGroup メタデータ: 名前: psp-fsgroup spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: ルール: "MayRunAs" #"MustRunAs" #"MayRunAs" 、"RunAsAny" 範囲: -分: 1 max: 1000
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: 良い 名前空間: test-gatekeeper spec: securityContext: fsGroup: 100 containers: -画像: テスト 名前: test
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad-1 名前空間: non-test-gatekeeper spec: securityContext: fsGroup: 0 shareProcessNamespace: true containers: -画像: テスト 名前: test
ACKPSPFostFilesystem
ポリシーの説明: 指定された名前空間内のポッドにマウントされるhostPathボリュームは、指定された条件を満たす必要があります。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedHostPaths
object
ポッドにマウントできるhostPathボリュームを指定します。
readOnly
Boolean
ボリュームが読み取り専用かどうかを指定します。
pathPrefix
String
ボリュームのプレフィックスを指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPHostFlesystem メタデータ: 名前: psp-host-filesystem spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: allowedHostPaths: -readOnly: true pathPrefix: "/foo"
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good1 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test volumeMounts: -name: test-volume mountPath: "/projected-volume" readOnly: true volumes: -name: test-volume hostPath: パス: /foo
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test volumes: -name: test-volume hostPath: path: /data type: ファイル
ACKPSPHostNamespace
ポリシーの説明: 指定された名前空間のポッドは、ホスト名前空間を共有できません。
重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPHostNamespace メタデータ: 名前: psp-host-namespace spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: 良い 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: 決して status: {}
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: hostPID: true containers: -画像: テスト name: test resources: {} dnsPolicy: ClusterFirst restartPolicy: 決して status: {}
ACKPSPHostNetworkingPorts
ポリシーの説明: 指定した名前空間内のポッドがホストネットワークと指定したポートを使用できるかどうかを指定します。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
hostNetwork
Boolean
ポッドがホストネットワークを使用できるかどうかを指定します。
min
int
最小のホストポート番号を指定します。
max
int
最大ホストポート番号を指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: ACKPSPSHostNetworkingPorts メタデータ: 名前: psp-host-network-ports spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: hostNetwork: true 分: 80 max: 9000
許可:
apiVersion: v1 種類: ポッド メタデータ: 名前: good-2 名前空間: test-gatekeeper spec: hostNetwork: true containers: -image: k8s.gcr.io/test-webserver 名前: test-container ポート: -hostPort: 80 containerPort: 80 initContainers: -image: k8s.gcr.io/test-webserver 名前: test-container2 ポート: -hostPort: 8080 containerPort: 8080
禁止:
apiVersion: v1 種類: ポッド メタデータ: 名前: bad-1 名前空間: non-test-gatekeeper spec: hostNetwork: true containers: -image: k8s.gcr.io/test-webserver 名前: test-container ポート: -hostPort: 22 containerPort: 22
ACKPSPBrivilegedContainer
ポリシーの説明: 指定された名前空間のポッドは特権コンテナを実行できません。
重大度: 高い
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPPrivilegedContainer メタデータ: 名前: psp-privileged-container spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good1 名前空間: test-gatekeeper spec: containers: -画像: テスト 名前: test
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: privileged: true dnsPolicy: ClusterFirst restartPolicy: 決して
ACKPSPConMount
ポリシーの説明: 指定された名前空間のポッドは、ポリシーコンテンツで指定されたProcマウントタイプで構成する必要があります。
重大度: 高い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
procMount
String
Procマウントタイプを指定します。 有効な値:
デフォルト: /procディレクトリはマウントできません。
Unmasked: /procディレクトリをマウントできます。
詳細については、「AllowedProcMountTypes」をご参照ください。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPCrocMount メタデータ: 名前: psp-proc-mount spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: procMount: デフォルト# DefaultまたはUnmasked
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good1 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: procMount: 「デフォルト」
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad3 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: procMount: "Unmasked" initContainers: -画像: テスト 名前: test2
ACKPSPREadOnlyRootFlesystem
ポリシーの説明: 指定された名前空間のポッドは、読み取り専用のルートファイルシステムで実行する必要があります。
重大度: 中
パラメーターの説明: なし
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPReadOnlyRootFlesystem メタデータ: 名前: psp-readonlyrootfilesystem spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: good1 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: readOnlyRootFlesystem: true
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad2 名前空間: non-test-gatekeeper spec: containers: -画像: テスト name: test securityContext: readOnlyRootFlesystem: false initContainers: -画像: テスト 名前: test2
ACKPSPSeccomp
ポリシーの説明: 指定された名前空間のポッドは、指定されたseccompプロファイルで構成する必要があります。
重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedProfileTypes
array
許可されるseccompプロファイルのタイプを指定します。
allowedProfiles
array
許可されるseccompプロファイルを指定します。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPSeccomp メタデータ: 名前: psp-seccomp spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: allowedProfileTypes: #-制限なし -RuntimeDefault -Localhost allowedProfiles: -ランタイム /デフォルト -docker /デフォルト -localhost/profiles/audit.json
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: 良い 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: seccompProfile: タイプ: Localhost localhostProfile: profiles/audit.json initContainers: -画像: テスト 名前: test2 securityContext: seccompProfile: タイプ: Localhost localhostProfile: profiles/audit.json
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test echo-k8s-webhook-enabled: 'true' 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト 名前: test
ACKPSPSLINuxV2
ポリシーの説明: allowedSELinuxOptionsパラメーターで指定されていないSELinuxオプションを使用して、指定された名前空間のポッドを構成することはできません。
重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
allowedSELinuxOptions
object
ポッドに設定できるSELinuxオプションを指定します。 詳細については、「SELinuxOptions v1 core」をご参照ください。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPSLINuxV2 メタデータ: 名前: psp-selinux-v2 spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: allowedSELinuxOptions: -レベル: s0:c123,c456 role: object_r タイプ: svirt_sandbox_file_t ユーザー: system_u
許可:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: 良い 名前空間: test-gatekeeper spec: securityContext: seLinuxOptions: レベル: "s0:c123,c456" containers: -画像: テスト 名前: test
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test securityContext: seLinuxOptions: レベル: "s0:c123,c455"
ACKPSPVolumeTypes
ポリシーの説明: 指定した型のボリュームのみ、指定した名前空間のポッドにマウントできます。
重大度: 低い
下表に、各パラメーターを説明します。
パラメーター
タイプ
説明
ボリューム
array
使用が許可されているボリュームのリスト。
例:
制約条件:
apiVersion: constraints.gatekeeper.sh/v1beta1 種類: ACKPSPVolumeTypes メタデータ: 名前: psp-volume-types spec: マッチ: 種類: - apiGroups: [""] kinds: ["ポッド"] 名前空間: -「テストゲートキーパー」 parameters: volumes: # - "*" # * を使用して、すべてのボリュームタイプを許可できます -configMap # - emptyDir -投影 -秘密 -downwardAPI -persistentVolumeClaim # - hostPath# allowedHostPathsに必要 -allowedFlexVolumesに必要なflexVolume#
許可:
apiVersion: v1 種類: ポッド メタデータ: name: pv-oss 名前空間: test-gatekeeper spec: containers: -name: テスト 画像: テスト volumes: -name: テスト flexVolume: ドライバー: "alicloud/oss"
禁止:
apiVersion: v1 種類: ポッド メタデータ: creationTimestamp: null ラベル: run: test 名前: bad-1 名前空間: test-gatekeeper spec: containers: -画像: テスト name: test volumes: -name: test-volume hostPath: path: /data