AWS Amplify前端无法读取SSM Parameter Store存储的环境密钥
AWS Amplify前端无法读取SSM Parameter Store存储的环境密钥
看起来你已经走对了大部分流程,但卡在了SSM参数无法注入Amplify构建环境这一步,我来帮你梳理几个关键的遗漏点,应该能解决问题:
1. 给Amplify的部署角色添加SSM访问权限
Amplify默认的服务角色并没有访问SSM Parameter Store的权限,这大概率是你读不到密钥的核心原因。你需要给Amplify的部署角色附加对应的IAM策略:
- 登录IAM控制台,找到Amplify的部署角色(角色名一般是
amplify-<你的App名称>-<环境名>-DeploymentRole这类格式) - 创建一个自定义IAM策略,内容如下(记得替换
<区域>、<账号ID>、<你的AppId>、<你的环境名>为实际值):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameter", "ssm:GetParametersByPath" ], "Resource": "arn:aws:ssm:<你的区域>:<你的账号ID>:parameter/amplify/<你的AppId>/<你的环境名>/REACT_APP_SECRETS" } ] }
- 将这个策略附加到Amplify的部署角色上,这样Amplify在构建时就有权限读取你的SSM参数了。
2. 在构建脚本中主动拉取并注入SSM参数
Amplify不会自动把SSM参数同步到构建环境变量里,你需要在构建阶段用AWS CLI手动获取参数值并设置为环境变量。修改你的Amplify构建配置YAML:
version: 1 frontend: phases: preBuild: commands: - npm ci # 新增:从SSM拉取加密的参数并解密,设置为环境变量 - export REACT_APP_SECRETS=$(aws ssm get-parameter --name "/amplify/myAppId/myBackendEnvironmentName/REACT_APP_SECRETS" --with-decryption --query "Parameter.Value" --output text) build: commands: - echo $REACT_APP_TEST_VAR - echo $REACT_APP_SECRETS - npm run build artifacts: baseDirectory: build files: - '**/*' cache: paths: - node_modules/**/*
重点注意--with-decryption参数,因为你的参数是Secure String类型,必须加上这个参数才能解密获取到实际值。Amplify的默认构建镜像已经预装了AWS CLI,不用额外安装。
3. 核对SSM参数的命名路径
再仔细检查你的参数名称是否完全匹配Amplify的要求:
- 确保
/amplify/myAppId/myBackendEnvironmentName/REACT_APP_SECRETS里的myAppId和myBackendEnvironmentName和你从amplify pull命令里拿到的完全一致(包括大小写,SSM参数名是大小写敏感的)
4. 验证KMS密钥的解密权限
你用了AWS默认的alias/aws/ssm KMS密钥,需要确保Amplify的部署角色拥有这个密钥的kms:Decrypt权限:
- 登录KMS控制台,找到这个默认密钥,进入「密钥策略」页面
- 添加一条权限,允许Amplify部署角色执行
kms:Decrypt操作
做完这些步骤后,重新触发Amplify的构建,应该就能在构建日志里看到REACT_APP_SECRETS的输出,并且前端的process.env.REACT_APP_SECRETS也能拿到值了。
备注:内容来源于stack exchange,提问作者Sebastian Meckovski
相关产品推荐
相关产品推荐

