You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CodePipeline部署阶段S3 ListBucket会话权限错误求助

CodePipeline部署步骤报S3 ListBucket权限错误(已通过IAM模拟器验证权限仍未解决)

问题描述

通过CloudFormation创建了包含三个步骤的AWS CodePipeline:拉取GitHub源码、CodeBuild构建、CloudFormation部署,但部署步骤失败,报错如下:

User: arn:aws:sts::AccountID:assumed-role/drive-tracker-cicd-prod-CodePipelineRole-QnWs78DD8pmv/1730118657170 is not authorized to perform: s3:ListBucket on resource: "arn:aws:s3:::drive-tracker-prod-artifacts" because no session policy allows the s3:ListBucket action (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: Z7135KF3QJY8W53J; S3 Extended Request ID: N+tgLvQdEVUmRhbMJBh+vPIP7X1W+sIVBwzZg8sEjqRgR3ZxHuxi2+QOjpBkkdLyb+hxBkZGQjU=; Proxy: null)

已通过IAM PolicySimulator验证CodePipelineRole和CodeDeployRole对工件存储桶拥有s3:ListBucket权限,添加了KMS密钥访问权限,且确认CodePipelineRole可扮演CodeDeployRole,但错误仍未解决。相关CloudFormation模板见问题原文。

根本原因分析

  1. CodePipelineRole策略包含无效S3动作:在CodePipelineRole的CodePipelineAccess策略中,S3动作列表包含不存在的s3:GetBucket动作。虽IAM会忽略单个无效动作,但部分场景下会导致策略解析异常,影响有效权限的会话传递。
  2. CodeBuildServiceRole存在YAML语法错误:该角色的S3权限Statement重复定义Resource字段,第二个Resource: '*'覆盖了前面的特定桶资源配置,此问题虽不直接触发当前报错,但会造成过度授权的安全风险。
  3. 宽泛的sts:AssumeRole权限引发会话策略冲突:CodePipelineRole的策略中允许sts:AssumeRole作用于所有资源(Resource: '*'),当CodePipeline服务扮演该角色时,自动生成的会话权限范围可能被异常限制。

解决步骤

  1. 修复CodePipelineRole的S3动作配置
    移除无效的s3:GetBucket动作,替换为实际需要的桶级动作(如s3:GetBucketLocation)或直接删除,修改后的S3权限Statement如下:
- Effect: Allow
  Action:
    - s3:PutObject
    - s3:GetObject
    - s3:GetBucketLocation
    - s3:ListBucket
  Resource: 
    - !Join
      - ''
      - - 'arn:aws:s3:::'
        - !Ref PipelineArtifactBucket
    - !Join
      - ''
      - - 'arn:aws:s3:::'
        - !Ref PipelineArtifactBucket
        - /*
  1. 修复CodeBuildServiceRole的YAML语法错误
    删除重复的Resource: '*'行,确保S3权限仅针对目标工件桶:
- Effect: Allow
  Action:
    - s3:PutObject
    - s3:GetObject*
    - s3:GetBucket*
    - s3:ListBucket
  Resource: 
    - !Join
      - ''
      - - 'arn:aws:s3:::'
        - !Ref PipelineArtifactBucket
    - !Join
      - ''
      - - 'arn:aws:s3:::'
        - !Ref PipelineArtifactBucket
        - /*
  1. 限制CodePipelineRole的sts:AssumeRole权限范围
    将sts:AssumeRole的资源范围缩小为仅允许扮演CodeDeployRole,遵循最小权限原则:
- Effect: Allow
  Action:
    - sts:AssumeRole
  Resource: !GetAtt CodeDeployRole.Arn
  1. 重新部署并验证
    更新CloudFormation模板后重新部署,确保角色策略生效,随后触发CodePipeline重试部署步骤。

内容的提问来源于stack exchange,提问作者Nieber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:20:11