You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:33:19