AWS CDK搭配GitLab CI执行cdk deploy无法读取AWS凭证报IncompleteSignature错误
报错原因
你遇到的凭证报错本质是AWS签名不完整导致的接口调用失败:从错误日志可以看到STS请求的Authorization头中Credential字段为空,说明CDK读取到的AWS访问密钥ID是空值,无法生成合法的AWS请求签名,被AWS接口返回400错误后,CDK判定没有有效可用的凭证,最终抛出对应报错。
未发现的配置错误
- GitLab CI变量未正确注入:你在GitLab UI配置的AK/SK变量没有生效,大概率是以下配置问题:
- 变量名拼写错误,存在多余空格、大小写不匹配(必须严格为
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY) - 变量勾选了「受保护变量」选项,而你部署用的dev分支不在项目的受保护分支列表内,GitLab不会为非受保护分支注入受保护变量
- 你使用的GitLab 13.6.3版本存在已知问题:若变量值包含特殊字符且勾选了「掩码变量」,会导致变量无法正常注入到Job运行环境
- 变量名拼写错误,存在多余空格、大小写不匹配(必须严格为
- 缺失AWS区域配置:你仅配置了AK/SK,没有配置AWS区域,CDK默认fallback到us-east-1,和你app.py中硬编码的区域不匹配时也会触发凭证校验异常。
修复方案
- 先验证变量是否正常注入:在CI脚本的
aws configure list之前新增一行echo $AWS_ACCESS_KEY_ID | head -c 10,如果输出为空,直接去GitLab项目的「设置→CI/CD→变量」页面调整配置:- 核对变量名和变量值完全正确,无多余前后空格
- 要么取消「受保护变量」勾选,要么将dev分支加入项目受保护分支列表
- 先取消「掩码变量」勾选测试,确认变量可以正常注入后再按需开启
- 补全区域配置:在配置AK/SK的命令后新增
aws configure set region <你的实际AWS区域>,或者直接在CI Job中声明环境变量AWS_DEFAULT_REGION为你实际使用的区域 - 可选优化:CDK优先读取环境变量中的AWS凭证,优先级高于
~/.aws/credentials文件,你可以直接删除脚本中创建~/.aws目录、手动写凭证文件的相关命令,只要变量正确注入即可正常运行。
内容的提问来源于stack exchange,提问作者Brad Beggs
相关产品推荐
相关产品推荐

