CodePipeline部署权限不足:无法访问指定S3工件对象
解决CodePipeline部署阶段S3权限不足问题
嘿,这个权限问题我之前帮不少开发者排查过,咱们一步步来解决:
检查CodePipeline服务角色的S3权限
部署阶段是CodePipeline在尝试访问S3里的工件,所以它的服务角色必须具备对应的访问权限。你需要:- 打开IAM控制台,找到你的CodePipeline服务角色(通常命名是
AWSCodePipelineServiceRole-<区域>-<管道名称>) - 给这个角色添加包含
s3:GetObject和s3:GetBucketLocation权限的策略,示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::你的S3桶名称/*", "arn:aws:s3:::你的S3桶名称" ] } ] }记得替换示例里的桶名称为你实际使用的S3桶。
- 打开IAM控制台,找到你的CodePipeline服务角色(通常命名是
核查S3桶的桶策略
如果你的S3桶设置了自定义桶策略,要确认它没有拒绝CodePipeline角色的访问,反而要显式允许:
在S3控制台找到对应桶的权限设置,添加如下桶策略(替换占位符为你的实际信息):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:role/service-role/AWSCodePipelineServiceRole-<区域>-<管道名称>" }, "Action": [ "s3:GetObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::你的S3桶名称/*", "arn:aws:s3:::你的S3桶名称" ] } ] }检查KMS加密相关权限(如果启用了加密)
如果你的S3桶开启了默认服务器端加密,并且使用了自定义KMS密钥,那CodePipeline的服务角色还需要kms:Decrypt权限:
给CodePipeline角色添加如下策略(替换KMS密钥ARN):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<区域>:<账号ID>:key/<你的KMS密钥ID>" } ] }
做完这些配置后,重新触发一次CodePipeline执行,应该就能解决这个权限不足的问题了。
内容的提问来源于stack exchange,提问作者Abraao Carmo
相关产品推荐
相关产品推荐

