AWS CloudFormation访问S3返回403:CodePipeline GenerateChangeSet阶段失败
CodePipeline GenerateChangeSet阶段S3访问403问题常见诱发原因
对应报错信息:
Action execution failed Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 40P7HSHQGWXSRA72; S3 Extended Request ID: I6hiCC7xx+YmnQMLfUnMzZziLDz/5b8uJWzOqWNZwSiVRCS14Q6UyVfss6q80teO5MAGuR9Xft4=; Proxy: null)
常见诱发原因及排查方向
- S3桶策略/访问限制优先级高于IAM角色权限
即使CloudFormation执行角色配置了S3全权限,只要S3桶本身的桶策略存在拒绝规则(比如限制访问源IP、VPC,或者明确拒绝该角色ARN的访问),就会返回403。另外如果桶启用了KMS默认加密,还需要确认CloudFormation角色同时拥有对应KMS密钥的kms:Decrypt权限,缺少密钥权限也会被判定为访问拒绝。 - 访问身份与预期不符
CodeStar自动生成的流水线中,GenerateChangeSet阶段拉取S3产物的身份可能不是CloudFormation执行角色,而是CodePipeline本身的服务角色。需要同步检查CodePipeline服务角色是否配置了产物桶的读取权限。 - 对象所有权与ACL限制
如果S3桶启用了ACL访问控制,CodePipeline上传的产物对象默认归属可能与桶拥有者不一致,即使角色有权限也无法读取。可以将桶的对象所有权规则修改为「桶拥有者首选」,或者检查产物对象的ACL是否开放了读取权限给CloudFormation角色。 - 组织级SCP策略拦截
如果账号归属AWS Organizations组织管理,需要确认组织的服务控制策略(SCP)没有禁止对应角色访问S3。SCP的限制优先级高于账号内的IAM权限,即使账号内给了S3全权限,SCP的拒绝规则依然会生效。 - IAM权限路径匹配错误
核对IAM策略中的S3资源ARN是否匹配实际的产物路径,比如策略仅配置了s3://bucket-name/*但实际产物路径是带特殊前缀的s3://bucket-name/codestar/xxx/artifact.zip,如果通配符匹配规则写错也会触发权限拒绝。
内容的提问来源于stack exchange,提问作者Dan Hanly
相关产品推荐
相关产品推荐

