
云原生运维安全【免费下载链接】cloud-custodianRules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources项目地址https://gitcode.com/gh_mirrors/cl/cloud-custodian点击查看免费下载导读本文基于 Cloud Custodian 官方示例 docs/source/aws/examples/elbsslwhitelist.rst深入讲解如何用一条 YAML 策略实现对 AWS Classic ELB经典负载均衡器的 SSL 策略治理用ssl-policy过滤器识别出启用了非白名单协议/密码套件的 HTTPS/SSL 负载均衡器再用set-ssl-listener-policy动作将其强制收敛到公司允许的 TLS 协议白名单。读完本文你将掌握白名单与黑名单两种过滤模式的差异、matching正则的精细化用法、预定义 AWS 安全策略的引用方式以及该策略在 CloudTrail 事件驱动模式下的实时自愈能力并理解其背后的源码实现原理。一、示例策略全景一条策略完成检测 修复原文档给出的示例完整覆盖了 Cloud Custodian 策略的四个核心组成部分资源类型、执行模式mode、过滤器filters与动作actionspolicies: - name: elb-ssl-whitelist description: | HTTPS/SSL ELBs should only have whitelisted ciphers/protocols resource: elb mode: type: cloudtrail events: - CreateLoadBalancer - CreateLoadBalancerPolicy - SetLoadBalancerPoliciesOfListener filters: - type: ssl-policy whitelist: POLICY - Protocol-TLSv1 - Protocol-TLSv1.1 - Protocol-TLSv1.2 actions: - type: set-ssl-listener-policy name: CustodianEnforcedPolicy attributes: *POLICY逐段拆解resource: elb目标资源是经典负载均衡器。在源码 c7n/resources/elb.py 中ELB资源管理器通过describe_load_balancers枚举资源id为LoadBalancerName并支持describe与config两种数据源source_mappingDescribeELB.augment还会通过universal_augment补充资源标签。mode: type: cloudtrail将策略部署为 Lambda 函数由 CloudTrail 事件实时触发。events列出三个触发事件创建负载均衡器、创建负载均衡策略、以及为监听器设置策略——恰好覆盖了 SSL 策略从产生到变更的全生命周期保证违规配置一落地就被发现并修复。filtersssl-policy过滤器根据whitelist判定哪些 ELB 的当前生效 SSL 策略超出了允许范围详见第三节。actions对命中过滤器的 ELB 执行set-ssl-listener-policy写入名为CustodianEnforcedPolicy的自定义策略attributes与过滤器共用同一个 YAML 锚点POLICY/*POLICY确保判定基准与修复基准永远一致不会出现两边清单漂移的问题。这里使用 YAML 锚点POLICY定义、*POLICY引用是本例的一个精妙设计白名单清单只在文件中出现一次过滤与修复共用同一份数据既减少了重复书写又避免了两处不一致带来的策略漏洞。二、为什么需要治理 ELB 的 SSL 策略经典负载均衡器Classic Load Balancer的 HTTPS/SSL 监听器依赖SSLNegotiationPolicyType策略来决定两件事允许的 TLS/SSL 协议版本如Protocol-SSLv3、Protocol-TLSv1、Protocol-TLSv1.1、Protocol-TLSv1.2允许的密码套件cipher如AES128-SHA256、ECDHE-RSA-AES128-GCM-SHA256等。如果放任默认或历史遗留的 SSL 策略负载均衡器可能继续启用SSLv2/SSLv3这类已被证明存在严重漏洞的协议如 POODLE 攻击针对 SSLv3或者允许 RC4 等弱密码套件。企业安全规范通常要求只允许 TLS 1.1 及以上甚至只允许 TLS 1.2并且只允许强密码套件。Cloud Custodian 的elb-ssl-whitelist策略正是把这一规范固化为可自动执行的代码——这也是安全团队常说的配置漂移自动纠正。需要注意的是本文策略针对的是Classic ELB资源类型elb而不是 ALB/NLB资源类型appelb/elb之外的新一代负载均衡器。ALB 的安全策略通过ssl-policy属性引用 AWS 预定义策略名治理方式不同Classic ELB 才使用本文所述的SSLNegotiationPolicyType自定义策略机制。三、ssl-policy过滤器白名单 / 黑名单 / 正则匹配过滤器源码位于 c7n/resources/elb.pySSLPolicyFilter。其核心思路是把每个 ELB 当前生效的 SSL 策略属性即值为true的属性名收集成集合再与白名单或黑名单做集合比较。3.1 两种判定模式模式配置键匹配逻辑命中含义白名单whitelist当前生效属性集合 − 白名单 ≠ ∅ELB 启用了白名单之外的协议/密码即超范围命中黑名单blacklist当前生效属性集合 ∩ 黑名单 ≠ ∅ELB 启用了被禁止的协议/密码命中源码中的判定逻辑c7n/resources/elb.py黑名单模式blacklist.intersection(active_policies)非空即命中并把交集写入资源的ProhibitedPolicies字段便于审计与报告白名单模式set(active_policies).difference(whitelist)非空即命中差异项同样写入ProhibitedPolicies。3.2matching正则只比较关心的属性键默认情况下过滤器会比较 ELB 策略中所有值为true的属性协议、密码套件、Server-Defined-Cipher-Order等。如果只想针对某一类键做判定可以加matching选项filters: - type: ssl-policy matching: ^Protocol- whitelist: - Protocol-TLSv1.1 - Protocol-TLSv1.2matching是一个正则表达式在 c7n/resources/elb.py 中过滤器会先用re.match(regex, policy, flagsre.IGNORECASE)过滤出匹配的属性再执行白/黑名单比较。例如上面这条策略只检查Protocol-开头的协议版本从而忽略密码套件差异实现只治理 TLS 版本、不动密码套件的精细化控制。测试用例test_ssl_matchingtests/test_elb.py验证了该模式能正确命中test-elb-invalid-policy。3.3 校验规则过滤器在策略加载阶段会进行严格校验c7n/resources/elb.py违反以下规则会直接抛出PolicyValidationError不能同时指定whitelist和blacklist两者必须分开写成独立策略语句必须指定其中之一否则策略无法通过校验blacklist必须是列表不能是单个字符串matching必须是可编译的合法正则。对应测试见 tests/test_elb.py空过滤器、blacklist传字符串等非法写法都会被校验器拦截。3.4 底层实现属性收集流程过滤器的数据收集分三步c7n/resources/elb.pycreate_elb_custom_policy_tuples遍历每个 ELB 的ListenerDescriptions收集监听器上引用的所有策略名create_elb_active_attributes_tuples调用describe_load_balancer_policies批量获取策略详情只保留PolicyTypeName SSLNegotiationPolicyType的策略并把其中AttributeValue true的属性名收集为生效属性集合将收集到的策略名写入资源对象的c7n.ssl-policies字段——这个字段正是后面set-ssl-listener-policy动作识别现存 SSL 策略的依据见第四节。测试用例test_ssl_cipherstests/test_elb.py验证了黑名单模式能准确命中启用了Protocol-SSLv2的 ELB。四、set-ssl-listener-policy动作强制写入合规策略动作源码位于 c7n/resources/elb.pySetSslListenerPolicy。它需要两个必填参数参数类型说明name字符串自定义策略名的基础部分实际创建时会被追加毫秒级时间戳以保证唯一性attributes字符串数组 或 对象策略属性清单。数组形式表示启用列表中的每个属性值为true对象形式则每个键值对作为一个属性AttributeName/AttributeValue4.1 两种属性写法数组形式自定义密码策略——把每个协议/密码套件作为独立字符串等价于启用这些属性actions: - type: set-ssl-listener-policy name: SSLNegotiation-Custom-Policy-01 attributes: - Protocol-SSLv3 - Protocol-TLSv1.1 - DHE-RSA-AES256-SHA256对象形式引用 AWS 预定义安全策略——用Reference-Security-Policy键引用 AWS 推荐的预定义策略例如ELBSecurityPolicy-TLS-1-2-2017-01actions: - type: set-ssl-listener-policy name: SSLNegotiation-Predefined-Policy-01 attributes: Reference-Security-Policy: ELBSecurityPolicy-TLS-1-2-2017-01两种写法的转换在 c7n/resources/elb.py数组形式被映射为AttributeValue: true的属性对象形式则原样保留键值对。测试test_set_ssl_listener_policy_predefinedtests/test_elb.py验证了引用预定义策略后生效属性包含Protocol-TLSv1.2及一系列 ECDHE 强密码套件。4.2 动作执行流程process_elbc7n/resources/elb.py按以下步骤修复单个负载均衡器跳过非 SSL 负载均衡器is_ssl()检查ListenerDescriptions中是否存在HTTPS或SSL协议监听器c7n/resources/elb.py没有则直接返回创建唯一策略名name 当前时间戳毫秒保证同一 ELB 上多次执行不会冲突创建自定义策略调用create_load_balancer_policyPolicyTypeName固定为SSLNegotiationPolicyType遇到DuplicatePolicyName等幂等异常时忽略c7n/resources/elb.py应用到所有 SSL 监听器遍历ListenerDescriptions对每个HTTPS/SSL监听器调用set_load_balancer_policies_of_listener。这里有两处细节值得注意保留非 SSL 策略policy_names.extend(ld.get(PolicyNames, ()))会先保留监听器上原有的非 SSL 策略清除旧的 SSL 策略如果资源带有c7n.ssl-policies字段由过滤器写入会用集合差集把它从新策略列表中剔除实现旧合规策略被新策略替换c7n/resources/elb.py。整个动作所需的 IAM 权限为elasticloadbalancing:CreateLoadBalancerPolicy与elasticloadbalancing:SetLoadBalancerPoliciesOfListenerc7n/resources/elb.py部署 Lambda 或运行 CLI 时需确保执行角色具备这两项权限。五、结合 CloudTrail 模式的实时自愈闭环示例策略的mode: type: cloudtrail意味着它运行在事件驱动模式下Cloud Custodian 会把策略打包为 Lambda 函数并订阅 CloudTrail 事件。完整闭环为工程师创建或修改 ELB 的 SSL 策略触发CreateLoadBalancer、CreateLoadBalancerPolicy或SetLoadBalancerPoliciesOfListener事件Cloud Custodian 的 Lambda 函数被事件唤醒拉取受影响的 ELB 资源ssl-policy过滤器比对当前生效属性与白名单判定是否超范围命中后set-ssl-listener-policy动作立即创建CustodianEnforcedPolicy并应用到所有 SSL 监听器将协议/密码收敛回白名单。由于修复动作会再次写入负载均衡器策略CloudTrail 会产生新事件但此时资源已符合白名单过滤器不再命中策略进入稳定状态不会形成检测—修复的死循环。这就是配置即代码式的自愈发现即修复且修复结果可审计命中资源会带上ProhibitedPolicies字段记录超范围的具体项。六、从示例到生产进阶用法与注意事项6.1 只治理协议版本如果公司标准只关心 TLS 版本、不想约束密码套件可用matching缩小比较范围并用白名单只列出协议policies: - name: elb-tls-version-whitelist resource: elb filters: - type: ssl-policy matching: ^Protocol- whitelist: - Protocol-TLSv1.1 - Protocol-TLSv1.2 actions: - type: set-ssl-listener-policy name: CustodianTLS12Policy attributes: Reference-Security-Policy: ELBSecurityPolicy-TLS-1-2-2017-016.2 与黑名单示例的对照仓库中另有一个黑名单版本示例 docs/source/aws/examples/elbsslblacklist.rst用blacklist明确禁止Protocol-SSLv2/Protocol-SSLv3。两者对比白名单默认拒绝一切未显式允许的协议/密码适合强合规场景但要求清单维护完整黑名单只拦截明确禁止的项其余放行适合快速封堵已知高危项如 SSLv3 的 POODLE 漏洞。两者不可在同一策略中混用校验器强制需要既禁弱协议又限白名单时应写成两条独立策略。6.3 运维注意事项执行方式除 Lambda 事件模式外也可以按需运行custodian run命令对存量 ELB 做一次性扫描修复策略配置同本文示例去掉mode即可IAM 权限运行角色需包含过滤器所需的elasticloadbalancing:DescribeLoadBalancerPolicies与动作所需的两项权限策略唯一性动作会自动追加毫秒时间戳同名策略重复执行不会冲突历史上被替换的旧策略会遗留在 ELB 上建议结合定期清理策略参见 docs/source/aws/examples/elbgarbagecollection.rst控制策略数量适用资源范围本文所有机制仅针对 Classic ELBresource: elb若治理 ALB/NLB 需使用appelb资源及其对应的 SSL 策略属性。七、小结elb-ssl-whitelist是一个典型的检测—修复—自愈安全策略范式ssl-policy过滤器以白名单集合差集的方式精准识别超范围 SSL 配置set-ssl-listener-policy动作以幂等的方式强制写入合规策略配合 CloudTrail 事件模式实现实时治理。其源码实现c7n/resources/elb.py与测试用例tests/test_elb.py完整印证了从属性收集、集合判定到策略落地的全链路逻辑可直接作为团队落地 ELB 传输层安全基线治理的参考模板。赞分享云原生运维安全【免费下载链接】cloud-custodianRules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources项目地址https://gitcode.com/gh_mirrors/cl/cloud-custodian点击查看免费下载相关推荐gh_mirrors/cas/cas高可用网络设计负载均衡器与SSL终结配置gh_mirrors/cas/cas高可用网络设计负载均衡器与SSL终结配置 在企业级应用部署中保证服务的高可用性和安全性至关重要。gh_mirrors/c后端认证鉴权单点登录上一篇告别表单开发痛点React-TS-Form 零样板类型安全方案下一篇Nhost 仓库中 zapx v13 的 ZAP 索引文件格式解析全文搜索 Segment 的磁盘布局、写入路径与读取路径创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考