用途
Policy as Code 用于通过代码实现策略的自动化执行,防止合规违规在进入生产环境前发生。它适用于对基础设施即代码变更执行安全与合规策略、阻止配置错误的 Kubernetes 工作负载部署、为 Terraform、CloudFormation 或 Helm 在 CI/CD 流水线中自动添加护栏、实施必须一致应用的组织标准,以及用自动化策略检查替代人工审批闸门。
主要能力
Open Policy Agent (OPA) Rego 策略
资料提供了多个 Rego 策略示例,package 命名采用 terraform.aws.<领域> 形式,并使用 rego.v1:
- 禁止公共 S3 桶(
no-public-s3):检查aws_s3_bucket的acl是否为public-read或public-read-write。 - 强制数据存储加密(
require-rds-encryption、require-ebs-encryption、require-s3-encryption):检查 RDS 的storage_encrypted、EBS 的encrypted、S3 的server_side_encryption_configuration。 - 强制标签(
required-tags):要求Environment、Owner、CostCenter、DataClassification四个标签。 - 限制部署区域(
approved-regions):仅允许us-east-1、us-west-2、eu-west-1。
评估方式为先生成 Terraform plan JSON,再用 opa eval 或 conftest test 执行。
Kyverno Kubernetes 策略
资料提供多个 ClusterPolicy YAML 示例,均基于 kyverno.io/v1:
- require-labels(Enforce):要求 Pod 具备
app.kubernetes.io/name、app.kubernetes.io/version、team标签。 - disallow-privileged-containers(Enforce):禁止特权容器,同时检查
containers与initContainers。 - require-resource-limits(Enforce):要求所有容器定义 CPU 与内存限制。
- disallow-latest-tag(Enforce):禁止使用
latest镜像标签。 - restrict-image-registries(Enforce):镜像仅允许来自指定 ECR 或 ghcr.io 仓库。
- require-networkpolicy(Audit):要求命名空间存在 NetworkPolicy,并排除
kube-system、kube-public。
Checkov 自定义检查
资料提供了两个 Checkov 自定义检查 Python 示例:
- S3Versioning(
CUSTOM_S3_001):确保 S3 桶启用版本控制。 - RDSBackupRetention(
CUSTOM_RDS_001):确保 RDS 备份保留至少 7 天。
运行方式包括 --external-checks-dir、指定 --check ID、生成 SARIF 输出以及 --skip-check 跳过检查。
使用方式
- OPA:
terraform plan -out=tfplan后terraform show -json tfplan > tfplan.json,再执行opa eval --data policies/ --input tfplan.json,或使用conftest test。 - Kyverno:使用
kyverno apply对清单执行策略并输出表格结果。 - Checkov:通过
checkov -d ./terraform --framework terraform等命令运行,可指定自定义检查目录、输出格式与跳过项。 - CI/CD:资料给出 GitHub Actions 示例,包含 Terraform 策略作业(setup-terraform、setup-opa、checkov-action、SARIF 上传)与 Kubernetes 策略作业(安装 Kyverno CLI、执行 kyverno apply、conftest-action)。
适用场景
- 基础设施即代码(Terraform 等)变更的安全与合规检查。
- Kubernetes 工作负载部署前的配置校验与拦截。
- CI/CD 流水线中的自动化护栏。
- 组织标准的统一强制执行。
- 用策略检查替代人工审批。
限制
- 资料中未提供各工具的收费、价格、平台支持范围、性能效果等事实。
- 资料未说明这些策略在具体环境中的部署前提与依赖版本要求。
- 资料未提供策略例外管理的完整工具实现细节,仅给出工作流与示例片段。