本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
该工具允许Cloud Custodian直接针对基础设施即代码(IaC)源代码资产评估策略,同时提供独立的命令行界面(CLI)以增强源代码资产评估的命令行用户体验。适用于在开发和部署流程中对IaC资产进行策略合规性检查,确保基础设施配置符合安全、成本等最佳实践。
c7n-left命令行工具,优化命令行用户体验当前仅支持macOS和Linux系统上的Python > 3.10,Windows系统建议使用Docker镜像。
pip install c7n-left
提供签名Docker镜像:
docker pull cloudcustodian/c7n-left:dev
可使用cosign验证镜像签名:
export IMAGE=$(docker image inspect cloudcustodian/c7n-left:dev -f '{{index .RepoDigests 0}}') cosign verify $IMAGE \ --certificate-identity '[***] \ --certificate-oidc-issuer '[***]
❯ c7n-left run --help Usage: c7n-left run [OPTIONS] 针对IaC源评估策略。 示例: c7n-left -p policy_dir -d terraform_root --filters "severity=HIGH" 警告 - CLI界面可能会更改。 Options: --format TEXT --filters TEXT 以k=v键值对形式过滤策略或资源,支持通配符 -p, --policy-dir PATH 策略所在目录 -d, --directory PATH 要评估的IaC目录 -o, --output [cli|github|json] 输出格式(默认cli) --output-file FILENAME 输出文件(默认stdout) --var-file FILE 从指定文件加载变量,可多次使用 --output-query TEXT 使用jmespath表达式过滤json输出 --summary [policy|resource] 摘要显示方式(默认policy) --help 显示帮助信息并退出
创建包含策略的目录:
# policies/test.yaml policies: - name: test resource: terraform.aws_s3_bucket metadata: severity: medium filters: - server_side_encryption_configuration: absent
评估Terraform根模块:
❯ c7n-left run -p policies -d module Running 1 policies on 1 resources test - terraform.aws_s3_bucket Failed File: s3.tf:1-8 1 resource "aws_s3_bucket" "example" { 2 bucket = "my-custodian-test-bucket" 3 acl = "private" 4 5 tags = { 6 original-tag = "original-value" 7 } 8 } Evaluation complete 0.00 seconds -> 1 Failures 策略摘要 ┏━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓ ┃ 严重级别 ┃ 策略名称 ┃ 结果 ┃ ┡━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩ │ medium │ test │ 1失败 0通过 │ └──────────┴────────┴───────────────────┘ 1个资源中0个合规,1个资源存在1个策略违规
需要使用卷挂载提供策略目录和Terraform根模块访问权限:
docker run -ti --rm -v $(pwd)/policies:/policies -v $(pwd)/root-module:/module \ cloudcustodian/c7n-left:dev run -p /policies -d /module
如果Terraform根模块有其他远程模块依赖,需先使用Terraform获取依赖:
terraform get -update
通过--filters选项可控制评估的策略和资源,格式为k=v键值对,支持通配符。
name: 策略名称category: 策略类别severity: 最低策略严重级别(unknown、low、medium、high、critical)type: 资源类型,如aws_security_groupid: 资源ID,如aws_vpc.example# 对ebs卷和sqs队列运行所有加密策略 c7n-left run -p policy_dir -d terraform --filters="category=encryption type=aws_ebs_volume,aws_sqs_queue" # 运行所有中等及以上级别成本策略 c7n-left run -p policy_dir -d terraform --filters="severity=medium category=cost"
策略的严重级别和类别在metadata部分指定:
policies: - name: check-encryption resource: [aws_ebs_volume, aws_sqs_queue] metadata: category: [encryption, security] severity: high filters: - kms_master_key_id: absent
cli: 默认格式,显示详细结果和摘要表格github: 适合GitHub Actions,直接在PR中添加注释json: JSON格式输出,可通过--output-query使用jmespath表达式过滤支持两种摘要显示方式,通过--summary指定:
policy(默认): 按策略显示摘要resource: 按资源显示摘要c7n-left策略支持超出标准Custodian策略的额外功能:
策略可针对多种资源类型,以数组或通配符形式指定:
policies: - name: check-encryption resource: [aws_ebs_volume, aws_sqs_queue]
traverse过滤器允许从资源到任何相关资源的多跳图遍历:
示例:检查EC2实例关联的安全组是否有允许0.0.0.0/0访问的权限
policies: - name: check-security-group-open-cidr resource: terraform.aws_instance description: "EC2实例不应在ssh端口开放给所有IP" filters: - type: traverse resources: - aws_security_group - aws_security_ingress_permission attrs: - Ipv4: 0.0.0.0/0
c7n-left支持编写和运行策略测试,验证策略是否按预期工作。
在策略文件旁创建tests目录,测试结构如下:
policy-dir-a/ ├── alb.yaml # 策略文件 └── tests └── alb-deletion-protection-disabled # 测试目录(与策略名称对应) ├── left.plan.yaml # 断言文件 ├── negative1.tf # 不应匹配策略的Terraform文件 └── positive1.tf # 应匹配策略的Terraform文件
left.plan.yaml是断言数组,每个断言是匹配策略发现结果的字典,匹配数据来自c7n-left run --output json的输出。
示例断言文件:
# left.plan.yaml - "resource.__tfmeta.filename": "positive1.tf"
使用c7n-left test命令运行测试:
❯ c7n-left test -p policy-dir-a/ Discovered 1 Tests Failure alb-deletion-protection-disabled [{'resource.__tfmeta.filename': 'positive1.tf'}] checks not used 1 Test Complete (0.05s) 1 Failure
测试失败的情况:
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429