首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Terraform无法承担IAM角色

Terraform无法承担IAM角色
EN

Stack Overflow用户
提问于 2021-09-16 18:31:18
回答 1查看 1.4K关注 0票数 1

我正在尝试开始使用Terraform,并使用GitLab CI/CD与其交互。我的Runner无法承担IAM角色,该角色提升了创建AWS资源的权限。我在这方面的Google-fu让我失望了。

收到的错误是:

错误:无法假定配置Terraform : IAM角色(my:arn)时出错。造成这种情况的可能原因有几种--最常见的原因是:

  • 用于承担角色的凭据是无效的
  • 凭据没有适当的权限来承担角色
  • 角色ARN是无效的

我在IAM中创建了一个访问/秘密密钥,并尝试提供这些变量,如GitLab CI/CD变量、我在export中直接使用的环境变量,甚至不推荐将它们硬编码到provider节中。无论如何,我还是会犯同样的错误。

特别奇怪的是,AWS显示了正在使用的密钥。“最后一次使用”列将始终反映最后一次尝试运行管道的时间戳。不管是好是坏,关键都是我的根AWS帐户的一部分--这是一个沙箱项目,我没有任何IAM用户,所以我不清楚Terraform如何不能使用这些凭据来承担一个角色,而根据AWS,它可以访问我的帐户,而我的帐户具有根权限。

这是我的provider.tf

代码语言:javascript
运行
复制
terraform {
    required_version = ">= 0.14"
    backend "s3" { }
}

provider "aws" {
    region = "us-east-1"
    access_key = "redacted"
    secret_key = "redacted"
    assume_role {
        role_arn = "arn:aws:iam::redacted:role/gitlab-runner-role"
    }
}

下面是我这个阶段的.gitlab-ci.yml的相关部分:

代码语言:javascript
运行
复制
.terraform_init: &terraform_init |-
  terraform init -backend-config="bucket=my-terraform-state" -backend-config="region=us-east-1" -backend-config="key=terraform.tfstate"

tf-plan:
  image: 
    name: hashicorp/terraform
    entrypoint: [""]
  stage: plan
  before_script:
    - *terraform_init
  script:
    - terraform plan -out=tfplan.plan
    - terraform show --json tfplan.plan | convert_report > tfplan.json
  needs:
    - job: tf-val
  tags:
    - my-runner

我的main.tf只包含一个基本的aws_instance节,我的terraform validate阶段(上面省略了)说它是船形的。这是我回购中仅有的3个文件。

我的gitlab-runner-role只包含一个策略,gitlab-runner-policy,其JSON是:

代码语言:javascript
运行
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*/*",
                "arn:aws:s3:::my-terraform-state"
            ]
        }
    ]
}

蒂娅有任何建议..。真的把我的头撞到墙上了。

EN

回答 1

Stack Overflow用户

发布于 2021-09-16 19:14:12

事实证明,assume_role只需要用于跨账户工作。我在我自己的帐户中做了所有的工作,所以删除它允许Terraform只使用键来完成工作,而不需要一个不同的IAM角色(或者它可以通过附加到Runner作为实例配置文件的角色来完成它所需要的工作)。我不清楚为什么指定assume_role会导致错误,因为访问应该在那里,但是删除它已经解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69213521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档