使用 AWS CLI 将 AWS WAF Web ACL 关联到 CloudFront Distribution Tenant

使用 AWS CLI 将 AWS WAF Web ACL 关联到 CloudFront Distribution Tenant 使用 AWS CLI 将 AWS WAF Web ACL 关联到 CloudFront Distribution Tenant【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli导读aws cloudfront associate-distribution-tenant-web-acl是 AWS CLI 中用于把 AWS WAF Web ACL 关联到 CloudFrontdistribution tenant分发租户的专用命令适用于 CloudFront 多租户分发multi-tenant distribution场景下的安全防护配置。阅读本文后你将掌握该命令的完整参数含义、ETag 乐观并发控制机制、输出字段解析、底层 API 实现细节以及如何用配套的disassociate-distribution-tenant-web-acl命令解除关联从而在脚本或 CI 流程中安全地管理租户级 WAF 防护。Distribution Tenant 与 AWS WAF 的背景CloudFront 的多租户分发distribution tenant是一类专门面向 SaaS 多租户架构的 CloudFront 实体它与标准分发standard distribution在管理模型上相互独立。要为某个租户单独启用 WAF 防护就需要把指定的 Web ACL 与该租户建立关联。AWS CLI 仓库中提供了配套的示例文档关联 Web ACLassociate-distribution-tenant-web-acl.rst解除 Web ACLdisassociate-distribution-tenant-web-acl.rst两个示例共同构成了租户 WAF 防护的开启 / 关闭完整闭环。关联 Web ACL 到 Distribution Tenant在 AWS CLI 中执行关联操作的命令形式如下来自仓库示例 associate-distribution-tenant-web-acl.rstaws cloudfront associate-distribution-tenant-web-acl \ --id dt_2wjDZi3hD1ivOXf6rpZJO1AB \ --if-match E13V1IB3VIYABC \ --web-acl-arn arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f37123ABC执行成功后返回的 JSON 输出{ ETag: E1VC38T7YXBABC, Id: dt_2wjDZi3hD1ivOXf6rpZJO1AB, WebACLArn: arn:aws:wafv2:us-east-1:123456789012:global/webacl/web-global-example/626900da-5f64-418b-ba9b-743f37123ABC }参数详解对照 service-2.json 中AssociateDistributionTenantWebACLRequest的形状定义可以精确还原每个参数的约束与传输方式参数CLI 选项必填传输位置含义Id--id是URL 路径Distribution tenant 的 ID形如dt_2wjDZi3hD1ivOXf6rpZJO1ABWebACLArn--web-acl-arn是请求体XML要关联的 WAF Web ACL 的 ARNIfMatch--if-match否强烈建议HTTP 请求头If-Match当前 distribution tenant 的 ETag用于并发控制关键点说明--id是路径参数从 service-2.json 可以看到底层 HTTP 请求是PUT /2020-05-31/distribution-tenant/{Id}/associate-web-aclId直接嵌入请求 URI因此它是必填项。--if-match建议始终携带它对应 HTTP 头If-Match值为当前租户的 ETag。该 ETag 可通过GetDistributionTenantAPI 获取。携带它可以保证你基于最新版本执行变更避免读到旧版本、覆盖新变更的并发冲突。--web-acl-arn支持全局区域写法示例中的 ARN 为arn:aws:wafv2:us-east-1:...:global/webacl/...说明可以关联 CloudFront 全局globalWeb ACL。输出字段解析关联成功后返回的AssociateDistributionTenantWebACLResult见 service-2.json包含三个字段Iddistribution tenant 的 ID回显请求中的租户标识。WebACLArn成功关联到该租户的 Web ACL ARN可用于校验是否关联了正确的 ACL。ETag关联操作后租户的新版本号通过响应头ETag返回。后续若再对该租户执行其他变更如解除关联、更新域关联应当使用这个新 ETag 作为--if-match的值。也就是说每次成功的变更都会推进租户的 ETag形成一条版本链这正是乐观并发控制optimistic concurrency的实现方式。底层实现从 CLI 命令到 REST 调用从 service-2.json 的 API 定义可以看到associate-distribution-tenant-web-acl命令对应底层云 APIAssociateDistributionTenantWebACL2020_05_31其细节如下HTTP 方法PUT请求 URI 为/2020-05-31/distribution-tenant/{Id}/associate-web-acl正常响应码为200。XML 命名空间请求体使用http://cloudfront.amazonaws.com/doc/2020-05-31/命名空间即 AWS CLI 会把WebACLArn序列化为 XML 请求体并发送。错误类型该操作定义了一组明确的错误形状包括PreconditionFailedIf-Match提供的 ETag 与当前租户版本不匹配即并发冲突AccessDenied缺少权限EntityNotFound租户 ID 或 Web ACL ARN 不存在InvalidArgument参数不合法EntityLimitExceeded达到资源配额上限该错误处理由 CHANGELOG.rst 中记录的变更引入InvalidIfMatchVersionIf-Match头版本无效。AWS CLI 会读取 service-2.json 自动生成命令的输入输出模型因此命令行中的参数名、输出字段名与上述模型一一对应。该命令属于 CloudFront 多租户 API 家族由 CHANGELOG.rst 中记录的 distribution tenant、connection group 与 multi-tenant distribution API 变更一并引入。解除 Web ACL 关联当租户不再需要 WAF 防护例如租户下线或改用其他安全方案时使用配套的disassociate-distribution-tenant-web-acl命令见 disassociate-distribution-tenant-web-acl.rstaws cloudfront disassociate-distribution-tenant-web-acl \ --id dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB \ --if-match E1PA6795UKMABC输出{ ETag: E13V1IB3VIYABC, Id: dt_2wjDZi3hD1ivOXf6rpZJOSNE1AB }从 service-2.json 的DisassociateDistributionTenantWebACLRequest定义可以看到解除操作只需Id必填路径参数与IfMatchIf-Match头建议携带返回Id与新的ETag。注意解除关联后租户的 Web ACL 防护立即失效请在业务低峰期操作并做好预期管理。实战建议与错误排查始终先获取最新 ETag执行变更前调用GetDistributionTenant获取当前 ETag再作为--if-match传入避免覆盖并发修改。遇到PreconditionFailed时重新获取 ETag 后重试。校验返回的 WebACLArn关联成功后比对输出中的WebACLArn与目标 ARN确认没有关联到错误的 ACL。记录新 ETag 并串联后续变更每次操作返回的ETag是下一次变更的前置条件建议在自动化脚本中把输出解析后回传给后续命令。权限最小化IAM 策略需要授予对cloudfront:AssociateDistributionTenantWebACL与cloudfront:DisassociateDistributionTenantWebACL的权限同时具备读取租户GetDistributionTenant与 WAF Web ACL 的权限具体可依据AccessDenied错误逐步收敛授权范围。小结associate-distribution-tenant-web-acl是 CloudFront 多租户分发场景下启用 WAF 防护的核心命令配合disassociate-distribution-tenant-web-acl可完成租户级安全策略的完整生命周期管理。理解其底层PUT /distribution-tenant/{Id}/associate-web-acl调用、ETag 乐观并发模型与错误语义能帮助你在自动化运维中写出更健壮、更安全的脚本。完整的命令示例与输出格式可直接参考仓库中的 associate-distribution-tenant-web-acl.rst 与 disassociate-distribution-tenant-web-acl.rst。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考