如何限制仅通过CloudFront Staging分发修改主分发(IAM权限配置)
解决方案:通过IAM策略条件区分直接修改与Staging关联的主分发更新
核心思路
问题的关键是要区分两种cloudfront:UpdateDistribution操作:
- 禁止无关联Staging分发的直接主分发修改
- 允许关联指定Staging分发的流量加权配置触发的主分发更新
1. 预准备:创建专属持续部署策略
先为目标主分发创建一个专门的Continuous Deployment Policy(持续部署策略),用于关联Staging分发。记录该策略的ID(例如abc123-xyz789)。
2. 编写带条件例外的IAM拒绝策略
使用IAM策略的Deny效果配合Condition规则,拒绝所有用户对主分发的UpdateDistribution操作,除非请求中明确引用了上述专属的持续部署策略ID。
示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "cloudfront:UpdateDistribution", "Resource": "arn:aws:cloudfront::ACCOUNT_ID:distribution/YOUR_MAIN_DISTRO_ID", "Condition": { "StringNotEquals": { "cloudfront:RequestParameter/DistributionConfig.ContinuousDeploymentPolicyId": "YOUR_CONTINUOUS_DEPLOYMENT_POLICY_ID" } }, "Principal": "*" } ] }
3. 可选:限制Staging分发的创建权限
为确保只有授权用户能创建关联主分发的Staging分发,可额外添加允许策略,仅允许用户创建带有指定持续部署策略关联的Staging分发:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "cloudfront:CreateDistribution", "Resource": "*", "Condition": { "StringEquals": { "cloudfront:RequestParameter/DistributionConfig.ContinuousDeploymentPolicyId": "YOUR_CONTINUOUS_DEPLOYMENT_POLICY_ID" } } } ] }
关键说明
- 当创建Staging分发并配置加权流量时,CloudFront会自动在主分发的更新请求中带上
ContinuousDeploymentPolicyId参数,此时策略的Condition会匹配,允许操作通过。 - 直接修改主分发(如修改缓存策略、源站设置)的请求不会包含该参数,会被策略拒绝。
- 需替换策略中的
ACCOUNT_ID、YOUR_MAIN_DISTRO_ID、YOUR_CONTINUOUS_DEPLOYMENT_POLICY_ID为实际值。
验证方法
- 尝试直接修改主分发配置(如修改默认缓存行为),应收到权限拒绝错误。
- 创建Staging分发并关联主分发的持续部署策略、配置加权流量,此时主分发的更新操作会被允许。
内容的提问来源于stack exchange,提问作者jn23213456
相关产品推荐
相关产品推荐

