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

GitLab CI/CD环境下Terraform无法assume AWS IAM角色问题求助

排查步骤与解决方案
  • 补全IAM角色信任关系配置
    你当前仅配置了gitlab-runner-role的权限策略(用于定义角色拥有的操作权限),缺少核心的信任关系策略,该策略用于定义哪些身份有权限调用sts:AssumeRole接口获取该角色的权限。
    进入IAM控制台gitlab-runner-role的配置页,切换到「信任关系」标签,编辑信任策略为以下内容(替换为你的AWS账号ID):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[你的AWS账号ID]:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  • 为根账号显式授权AssumeRole权限
    虽然AWS根账号默认拥有最高权限,部分场景下仍需要显式配置允许根账号调用AssumeRole接口,你可以为根账号添加如下内联策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::[你的AWS账号ID]:role/gitlab-runner-role"
        }
    ]
}
  • 校验角色ARN配置
    确认provider.tf中填写的role_arn和IAM控制台中实际角色的ARN完全一致,检查账号ID、角色名称拼写、大小写以及是否存在多余空格。
  • 补充角色操作权限
    你当前绑定的gitlab-runner-policy仅包含S3读写权限,仅能满足Terraform状态存储的需求,创建EC2实例还需要补充EC2相关操作权限,你可以在策略的Statement数组中新增如下配置:
{
    "Sid": "EC2Operations",
    "Effect": "Allow",
    "Action": [
        "ec2:RunInstances",
        "ec2:DescribeInstances",
        "ec2:TerminateInstances",
        "ec2:CreateTags",
        "ec2:DescribeInstanceTypes",
        "ec2:DescribeImages"
    ],
    "Resource": "*"
}
  • 优化凭证配置
    删除provider.tf中硬编码的access_key、secret_key字段,Terraform AWS Provider会自动读取环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,你直接在GitLab CI/CD项目变量中配置这两个值即可,无需手动export或写在配置文件中。
  • 快速调试验证
    可以在.gitlab-ci.yml的before_script中新增aws sts assume-role --role-arn [你的角色ARN] --role-session-name gitlab-debug命令,直接测试AssumeRole接口是否能调用成功,比反复执行Terraform排查效率更高。

内容的提问来源于stack exchange,提问作者Josh Edgar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:03