对接GitHub的AWS CodePipeline源阶段报KMS.SubscriptionRequiredException错误
AWS CodePipeline源阶段KMS.SubscriptionRequiredException报错排查方案
报错详情:
动作执行失败
GitHub上传至S3失败,错误信息如下:The AWS Access Key Id needs a subscription for the service (Service: Amazon S3; Status Code: 400; Error Code: KMS.SubscriptionRequiredException; Request ID: NWPB863XQQJV86T2; S3 Extended Request ID: XC5qnepPTZxI0mzF6K3epFPIXpYn+iJiivZqSRjeZ4hR7yVZRAKJT0laFpGZ4twOZYOrusfaZBc=; Proxy: null)
报错截图:
该错误并非S3服务访问权限问题,核心是KMS服务的订阅或权限配置异常。CLI可以正常操作S3,通常是因为CLI上传时默认没有触发KMS加密逻辑,而CodePipeline往目标S3桶写入时默认使用KMS加密,因此触发报错。
排查步骤如下:
- 核对S3存储桶加密配置
进入S3控制台查看目标桶的「属性」-「默认加密」配置,确认是否开启了SSE-KMS加密。如果开启,记录使用的是AWS托管KMS密钥还是客户自行管理的CMK密钥。 - 核对CodePipeline使用的IAM身份与CLI是否一致
多数场景下CLI使用的是个人IAM用户凭证,而CodePipeline源阶段配置了独立的服务角色,二者权限不同。可执行aws sts get-caller-identity获取CLI当前使用的身份ARN,再进入CodePipeline的动作配置页面对比使用的服务角色ARN,确认二者是否为同一实体。 - 补全KMS访问权限
如果目标S3桶开启了SSE-KMS:- 给CodePipeline使用的IAM身份添加包含
kms:GenerateDataKey、kms:Decrypt权限的IAM策略 - 如果使用的是客户自行管理的CMK密钥,还需要在KMS控制台对应密钥的「密钥策略」中,添加允许CodePipeline的IAM身份执行上述操作的规则,仅配置IAM策略不会生效
- 给CodePipeline使用的IAM身份添加包含
- 检查AWS账号KMS服务订阅状态
新注册的AWS账号、存在未支付账单的账号可能会被限制KMS服务访问,可进入AWS控制台「账单和成本管理」页面查看是否有未结清账单,也可提交服务工单确认账号是否存在KMS服务访问限制。 - 手动复现验证
切换为CodePipeline使用的IAM凭证后,执行带KMS加密参数的S3上传命令验证问题:aws s3 cp 本地测试文件路径 s3://目标桶名/测试文件名 --sse aws:kms
如果执行后同样报错,即可排除CodePipeline本身配置问题,聚焦KMS权限/账号订阅问题排查。
内容的提问来源于stack exchange,提问作者cjburkha
相关产品推荐
相关产品推荐


