Policy Controller 附带默认的限制条件模板库,您可以将该库与 PCI-DSS v3.2.1 包搭配使用,以根据支付卡行业数据安全标准 (PCI-DSS) v3.2.1 的某些方面评估集群资源的合规性。
本页面适用于想要提供并维护自动化以进行审核或强制执行,从而确保云平台中运行的所有资源满足组织合规性要求的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中引用的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
PCI-DSS v3.2.1 政策包限制条件
限制条件名称 | 限制条件说明 | 控制 ID | 个人资料 |
---|---|---|---|
pci-dss-v3.2.1-resources-have-required-labels | 通过要求所有应用都包含指定的标签,确保符合防火墙要求。 | 1.1.4 | 标准 |
pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations | 通过要求所有应用都包含指定的注解,确保符合网络控制的要求。 | 1.1.5、2.4 | 标准 |
pci-dss-v3.2.1-require-default-deny-network-policies | 要求在集群中定义的每个命名空间都具有 Egress 的默认拒绝 NetworkPolicy 。 |
1.2、1.3、2.2.2 | 扩展 |
pci-dss-v3.2.1-block-all-ingress | 限制创建 Ingress 对象。 | 1.2、1.3 | 扩展 |
pci-dss-v3.2.1-require-valid-network-ranges | 限制允许与 Ingress 和 Egress 搭配使用的 CIDR 范围。 | 1.2、1.3.2 | 扩展 |
pci-dss-v3.2.1-require-namespace-network-policies | 要求集群中定义的每个命名空间都具有一个 NetworkPolicy。 | 1.2 | 标准 |
pci-dss-v3.2.1-enforce-managed-by-configmanagement-label | 需要对 RoleBinding 资源添加有效的 app.kubernetes.io/managed-by= 标签。 |
1.2.2、8.1.2 | 标准 |
pci-dss-v3.2.1-block-creation-with-default-serviceaccount | 限制使用默认服务账号创建资源。 | 2.1 | 标准 |
pci-dss-v3.2.1-restrict-default-namespace | 限制 pod 使用默认命名空间。 | 2.1 | 标准 |
pci-dss-v3.2.1-asm-peer-authn-strict-mtls | 强制要求所有 PeerAuthentication 均不得覆盖严格 mMTLS。 | 4.1 | 标准 |
pci-dss-v3.2.1-require-av-daemonset | 需要安装反病毒守护进程集。 | 5.1.1、5.3 | 标准 |
pci-dss-v3.2.1-enforce-config-management | 强制安装和启用 Config Sync。 | 5.3、6.1、6.4 | 标准 |
pci-dss-v3.2.1-enforce-cloudarmor-backendconfig | 对 BackendConfig 资源强制实施 Cloud Armor 配置。 |
6.5、6.6 | 标准 |
pci-dss-v3.2.1-restrict-rbac-subjects | 将 RBAC 主体中的名称限制为只能使用指定的值。 | 8.1、8.1.5 | 扩展 |
pci-dss-v3.2.1-block-secrets-of-type-basic-auth | 限制使用基本-身份验证类型 Secret。 | 8.1.5、8.2.3、8.5 | 标准 |
pci-dss-v3.2.1-nodes-have-consistent-time | 通过确保将 COS 用作 OS 映像,确保节点上的时间一致且正确。 | 10.4.1、10.4.3 | 标准 |
标准捆绑包与扩展捆绑包限制条件
PCI-DSS v3.2.1 捆绑包实现了一组有针对性的政策要求,以实现 PCI-DSS v3.2.1 控制措施的某些方面。 除了修改工作负载以满足标准捆绑包的要求之外,我们还提供一组可选的扩展限制条件,用于根据您的环境进行自定义。
须知事项
- 安装并初始化 Google Cloud CLI,它提供了以下说明中使用的
gcloud
和kubectl
命令。如果您使用 Cloud Shell,则系统会预安装 Google Cloud CLI。 - 在集群上安装 Policy Controller v1.14.3 或更高版本以及默认的限制条件模板库。您还必须启用对参照限制条件的支持,因为此政策包中包含参照限制条件。
为参照限制条件配置政策控制器
在文件中,将以下 YAML 清单保存为
policycontroller-config.yaml
。此清单将 Policy Controller 配置为监视特定种类的对象。apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "apps" version: "v1" kind: "DaemonSet" - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy"
应用
policycontroller-config.yaml
清单:kubectl apply -f policycontroller-config.yaml
为 PCI-DSS v3.2.1 配置集群的工作负载
标准捆绑包
- 所有应用(
ReplicaSet
、Deployment
、StatefulSet
和DaemonSet
)都必须包含架构为pci-dss-[0-9]{4}q[1-4]
的pci-dss-firewall-audit label
。 - 所有应用(
ReplicaSet
、Deployment
、StatefulSet
、DaemonSet
)都必须包含架构为YYYY-MM-DD
的network-controls/date
注解。 - 在集群中定义的每个
namespace
都必须具有NetworkPolicy
。 - 默认情况下,需要对
configmanagement.gke.io
使用 Config Sync,但是可以在pci-dss-v3.2.1-enforce-managed-by-configmanagement-label
限制条件中自定义允许的app.kubernetes.io/managed-by
值。 - 无法使用默认服务账号创建资源。
- 不能将默认
namespace
用于 pod。 - 如果使用 Cloud Service Mesh,则 ASM PeerAuthentication 必须使用严格的 mTLS
spec.mtls.mode: STRICT
。 - 必须使用防病毒解决方案。 默认为
pci-dss-av
namespace
中存在名为clamav
的daemonset
,但daemonset
的名称和命名空间可以自定义以符合pci-dss-v3.2.1-require-av-daemonset
限制条件中的实现。 - 需要安装和启用 Config Sync。
- 必须为 CloudArmor 配置所有
BackendConfig
。 - 不允许使用
basic-auth
类型的 Secret。 - 所有节点都必须使用 Google Container-Optimized OS 作为其映像,以使得时间一致。
扩展捆绑包(可选,需要自定义)
- 在集群中定义的每个
namespace
都有 Egress 的默认拒绝NetworkPolicy
,允许的例外可以在pci-dss-v3.2.1-require-namespace-network-policies
中指定。 - 只能创建允许的 Ingress 对象(
NodePort
和LoadBalancer
的Ingress
、Gateway
和Service
类型),可以在pci-dss-v3.2.1-block-all-ingress
中指定这些对象。 - 只能将允许的 IP 范围用于 Ingress 和 Express,可以在
pci-dss-v3.2.1-require-valid-network-ranges
中指定这些内容。 - 在 RBAC 绑定中只能使用允许的主题,您的域名可以在
pci-dss-v3.2.1-restrict-rbac-subjects
中指定。
审核 PCI-DSS v3.2.1 政策包
政策控制器允许您为 Kubernetes 集群强制执行政策。为了帮助测试您的工作负载及其对上表中列出的 PCI-DSS v3.2.1 政策的合规性,您可以在“审核”模式下部署这些限制条件以发现违规行为,更重要的是让您有机会在 Kubernetes 集群上强制执行之前处理这些违规行为。
您可以在 spec.enforcementAction
设置为 dryrun
的情况下,使用 kubectl、kpt 或 Config Sync 应用这些政策。
kubectl
(可选)使用 kubectl 预览政策限制条件:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
使用 kubectl 应用政策限制条件:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
输出如下所示:
asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v3.2.1-asm-peer-authn-strict-mtls created k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-creation-with-default-serviceaccount created k8sblockobjectsoftype.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-secrets-of-type-basic-auth created k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-cloudarmor-backendconfig created k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-config-management created k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v3.2.1-nodes-have-consistent-time created k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-av-daemonset created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-namespace-network-policies created k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-managed-by-configmanagement-label created k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-resources-have-required-labels created k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v3.2.1-restrict-default-namespace created
验证政策限制条件是否已安装,并检查集群中是否存在违规行为:
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
输出类似于以下内容:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/pci-dss-v3.2.1-asm-peer-authn-strict-mtls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockcreationwithdefaultserviceaccount.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-creation-with-default-serviceaccount dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/pci-dss-v3.2.1-block-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforcecloudarmorbackendconfig.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-cloudarmor-backendconfig dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8senforceconfigmanagement.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-config-management dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirecosnodeimage.constraints.gatekeeper.sh/pci-dss-v3.2.1-nodes-have-consistent-time dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredaemonsets.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-av-daemonset dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/pci-dss-v3.2.1-require-namespace-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredannotations.constraints.gatekeeper.sh/pci-dss-v3.2.1-apps-must-have-certain-set-of-annotations dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-enforce-managed-by-configmanagement-label dryrun 0 k8srequiredlabels.constraints.gatekeeper.sh/pci-dss-v3.2.1-resources-have-required-labels dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/pci-dss-v3.2.1-restrict-default-namespace dryrun 0
kpt
安装并设置 kpt。在这些说明中,kpt 用于自定义和部署 Kubernetes 资源。
使用 kpt 从 GitHub 下载 PCI-DSS v3.2.1 政策捆绑包:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1
运行
set-enforcement-action
kpt 函数将政策的强制执行操作设置为dryrun
:kpt fn eval pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
使用 kpt 初始化工作目录,此操作会创建一个资源来跟踪更改:
cd pci-dss-v3.2.1 kpt live init
使用 kpt 应用政策限制条件:
kpt live apply
验证政策限制条件是否已安装,并检查集群中是否存在违规行为:
kpt live status --output table --poll-until current
状态为
CURRENT
,即确认限制条件成功安装。
Config Sync
- 安装并设置 kpt。在这些说明中,kpt 用于自定义和部署 Kubernetes 资源。
使用 Config Sync 将政策部署到其集群的运维人员可以按照以下说明操作:
更改为 Config Sync 的同步目录:
cd SYNC_ROOT_DIR
创建
resourcegroup.yaml
或将其附加到.gitignore
:echo resourcegroup.yaml >> .gitignore
创建一个专用的
policies
目录:mkdir -p policies
使用 kpt 从 GitHub 下载 PCI-DSS v3.2.1 政策捆绑包:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/pci-dss-v3.2.1 policies/pci-dss-v3.2.1
运行
set-enforcement-action
kpt 函数将政策的强制执行操作设置为dryrun
:kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(可选)预览待创建的政策限制条件:
kpt live init policies/pci-dss-v3.2.1 kpt live apply --dry-run policies/pci-dss-v3.2.1
如果 Config Sync 的同步目录使用 Kustomize,请将
policies/pci-dss-v3.2.1
添加到根kustomization.yaml
。 否则,请移除policies/pci-dss-v3.2.1/kustomization.yaml
文件:rm SYNC_ROOT_DIR/policies/pci-dss-v3.2.1/kustomization.yaml
将更改推送到 Config Sync 代码库:
git add SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Adding PCI-DSS v3.2.1 policy audit enforcement' git push
验证安装状态:
watch gcloud beta container fleet config-management status --project PROJECT_ID
状态
SYNCED
用于确认政策的安装情况。
查看违规问题
在审核模式下安装政策限制条件后,您可以使用政策控制器信息中心在界面中查看集群的违规问题。
您还可以使用 kubectl
来通过以下命令查看针对集群的违规行为:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
如果存在违规行为,您可以使用以下命令查看每个限制条件的违规消息列表:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
更改 PCI-DSS v3.2.1 政策包强制执行操作
查看集群上的政策违规情况后,您可以考虑更改强制执行模式,以便准入控制器发出 warn
,甚至 deny
屏蔽不合规资源应用于集群。
kubectl
使用 kubectl 将政策的强制执行操作设置为
warn
:kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
验证政策限制条件强制执行措施是否已更新:
kubectl get constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1
kpt
运行
set-enforcement-action
kpt 函数将政策的强制执行操作设置为warn
:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
应用政策限制条件:
kpt live apply
Config Sync
使用 Config Sync 将政策部署到其集群的运维人员可以按照以下说明操作:
更改为 Config Sync 的同步目录:
cd SYNC_ROOT_DIR
运行
set-enforcement-action
kpt 函数将政策的强制执行操作设置为warn
:kpt fn eval policies/pci-dss-v3.2.1 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
将更改推送到 Config Sync 代码库:
git add SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Adding PCI-DSS v3.2.1 policy bundle warn enforcement' git push
验证安装状态:
gcloud alpha anthos config sync repo list --project PROJECT_ID
SYNCED
列中显示您的代码库即表示政策安装成功。
测试政策执行情况
使用以下命令在集群上创建不合规的资源:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
name: wordpress
EOF
准入控制器应生成一个警告列表,其中列出了此资源违反政策的行为,如以下示例所示:
Warning: [pci-dss-v3.2.1-restrict-default-namespace] <default> namespace is restricted pod/wp-non-compliant created
移除 PCI-DSS v3.2.1 政策包
如果需要,您可以从集群中移除 PCI-DSS v3.2.1 政策包。
kubectl
使用 kubectl 移除政策:
kubectl delete constraint -l policycontroller.gke.io/bundleName=pci-dss-v3.2.1
kpt
移除政策:
kpt live destroy
Config Sync
使用 Config Sync 将政策部署到其集群的运维人员可以按照以下说明操作:
将更改推送到 Config Sync 代码库:
git rm -r SYNC_ROOT_DIR/policies/pci-dss-v3.2.1 git commit -m 'Removing PCI-DSS v3.2.1 policies' git push
验证状态:
gcloud alpha anthos config sync repo list --project PROJECT_ID
SYNCED
列中显示您的代码库即表示政策移除成功。