
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
该工具允许Cloud Custodian直接针对基础设施即代码(IaC)源代码资产评估策略,同时提供独立的命令行界面(CLI)以增强源代码资产评估的命令行用户体验。适用于在开发和部署流程中对IaC资产进行策略合规性检查,确保基础设施配置符合安全、成本等最佳实践。
c7n-left命令行工具,优化命令行用户体验当前仅支持macOS和Linux系统上的Python > 3.10,Windows系统建议使用Docker镜像。
shellpip install c7n-left
提供签名Docker镜像:
shelldocker pull cloudcustodian/c7n-left:dev
镜像签名验证
可使用https://github.com/sigstore/cosign%E9%AA%8C%E8%AF%81%E9%95%9C%E5%83%8F%E7%AD%BE%E5%90%8D%EF%BC%9A
shellexport IMAGE=$(docker image inspect cloudcustodian/c7n-left:dev -f '{{index .RepoDigests 0}}') cosign verify $IMAGE \ --certificate-identity 'https://github.com/cloud-custodian/cloud-custodian/.github/workflows/docker.yml@refs/heads/main' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com'
CLI命令选项
shell❯ 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 显示帮助信息并退出
示例策略和执行
创建包含策略的目录:
yaml# policies/test.yaml policies: - name: test resource: terraform.aws_s3_bucket metadata: severity: medium filters: - server_side_encryption_configuration: absent
评估Terraform根模块:
shell❯ 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根模块访问权限:
shelldocker run -ti --rm -v $(pwd)/policies:/policies -v $(pwd)/root-module:/module \ cloudcustodian/c7n-left:dev run -p /policies -d /module
Terraform依赖处理
如果Terraform根模块有其他远程模块依赖,需先使用Terraform获取依赖:
shellterraform get -update
通过--filters选项可控制评估的策略和资源,格式为k=v键值对,支持通配符。
name: 策略名称category: 策略类别severity: 最低策略严重级别(unknown、low、medium、high、critical)type: 资源类型,如aws_security_groupid: 资源ID,如aws_vpc.exampleshell# 对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部分指定:
yamlpolicies: - 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策略的额外功能:
策略可针对多种资源类型,以数组或通配符形式指定:
yamlpolicies: - name: check-encryption resource: [aws_ebs_volume, aws_sqs_queue]
traverse过滤器允许从资源到任何相关资源的多跳图遍历:
示例:检查EC2实例关联的安全组是否有允许0.0.0.0/0访问的权限
yamlpolicies: - 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的输出。
示例断言文件:
yaml# left.plan.yaml - "resource.__tfmeta.filename": "positive1.tf"
使用c7n-left test命令运行测试:
shell❯ 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
测试失败的情况:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务