AWS部署React应用CodeBuild报ssm:GetParameters访问拒绝错误
问题排查与修复
这个报错的核心原因是CodeBuild服务角色没有获取对应SSM参数的权限,你配置的策略不生效优先按以下顺序排查:
- 首先核对资源ARN的账号ID
你当前配置的策略里,ssm:GetParameters对应的资源ARN写的是arn:aws:ssm:sa-east-1:CODEHERE:parameter/*,但报错信息里实际要访问的SSM参数属于账号IDMYCODE(你日志里占位符对应的真实账号值),两者账号ID不匹配,IAM策略完全不会命中,这是最常见的配置错误。直接把策略里Resource字段的CODEHERE替换成你实际的AWS账号ID即可。 - 检查加密参数的KMS权限
如果你要拉取的SSM参数是自定义KMS密钥加密的(不是AWS默认托管的SSM密钥),仅配置ssm:GetParameters不够,还要给角色附加对应KMS密钥的解密权限,补充权限示例:{ "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:sa-east-1:你的真实账号ID:key/加密参数使用的KMS密钥ID" } - 校验其他权限拦截规则
- 确认你编辑的IAM策略已经正确附加到
codebuild-QA-service-role角色,没有语法错误、拼写错误 - 检查该角色是否配置了权限边界,或者你的AWS组织是否配置了SCP策略显式拒绝SSM相关操作,这类拒绝级别的策略优先级高于允许策略,会直接导致权限不生效
- 确认CodeBuild项目和SSM参数都在
sa-east-1区域,跨区域拉取SSM参数也会抛出同类访问拒绝错误 - 核对CodeBuild里配置的SSM参数路径和AWS控制台里的实际参数路径完全一致,不存在多打、漏打路径前缀的问题
- 确认你编辑的IAM策略已经正确附加到
- 快速验证方法
可以临时把ssm:GetParameters对应的资源改成*测试,如果修改后构建能正常拉取参数,就可以确定是之前的资源ARN配置错误,测试完成后再把资源范围收窄到指定参数,避免权限过度开放。
内容的提问来源于stack exchange,提问作者Gabriel Donada
相关产品推荐
相关产品推荐

