GitHub Action执行SSM SendCommand报错:terraform用户无权限
问题分析与解决
1. 为何以terraform用户执行操作?
- Secrets配置不符:你可能误将
terraform用户的访问密钥存入了AWS_ACCESS_KEY_DEV和AWS_SECRET_ACCESS_KEY_DEV这两个GitHub Secrets中。登录AWS IAM控制台,查看terraform用户的访问密钥列表,对比你在GitHub中存储的密钥即可验证。 - 环境变量覆盖参数:部分AWS相关Action会优先读取系统环境变量中的
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,而非你传入的参数。如果之前的工作流步骤残留了这两个环境变量,会覆盖你设置的参数值。可在报错步骤前添加以下步骤排查:- name: 检查AWS环境变量 run: | echo "AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID" echo "AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY" - Action版本问题:你使用的
peterkimzz/aws-ssm-send-command@master是主分支快照版本,可能存在参数读取逻辑bug。建议切换到该Action的稳定release版本(如v1.0.0,具体以实际发布版本为准)。
2. 解决ssm:SendCommand权限报错
无论最终使用哪个IAM用户,都需要为其添加对应的SSM操作权限。创建或更新IAM策略,添加以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:GetCommandInvocation", "ssm:ListCommandInvocations" ], "Resource": [ "arn:aws:ec2:us-east-1:<AccountNumber>:instance/<你的EC2实例ID>", "arn:aws:ssm:us-east-1:<AccountNumber>:document/AWS-RunShellScript" ] } ] }
- 替换
<AccountNumber>和<你的EC2实例ID>为实际值; - 需添加
AWS-RunShellScript文档权限,因为SSM执行Shell命令默认依赖该系统文档; - 将该策略附加到对应的IAM用户(若确认是
terraform用户则附加给它,若为其他目标用户则附加给目标用户)。
3. 额外验证点
- 确认EC2实例已安装并运行SSM Agent,且在AWS Systems Manager控制台的「托管实例」中显示为「在线」状态;
- 确认EC2实例的IAM角色(若配置)具备接收SSM命令的基础权限,但本次报错核心为IAM用户权限,优先处理用户策略。
内容的提问来源于stack exchange,提问作者Korba
相关产品推荐
相关产品推荐

