我正在尝试开始使用Terraform,并使用GitLab CI/CD与其交互。我的Runner无法承担IAM角色,该角色提升了创建AWS资源的权限。我在这方面的Google-fu让我失望了。
收到的错误是:
错误:无法假定配置Terraform : IAM角色(my:arn)时出错。造成这种情况的可能原因有几种--最常见的原因是:
我在IAM中创建了一个访问/秘密密钥,并尝试提供这些变量,如GitLab CI/CD变量、我在export中直接使用的环境变量,甚至不推荐将它们硬编码到provider节中。无论如何,我还是会犯同样的错误。
特别奇怪的是,AWS显示了正在使用的密钥。“最后一次使用”列将始终反映最后一次尝试运行管道的时间戳。不管是好是坏,关键都是我的根AWS帐户的一部分--这是一个沙箱项目,我没有任何IAM用户,所以我不清楚Terraform如何不能使用这些凭据来承担一个角色,而根据AWS,它可以访问我的帐户,而我的帐户具有根权限。
这是我的provider.tf
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的相关部分:
.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是:
{
"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"
]
}
]
}蒂娅有任何建议..。真的把我的头撞到墙上了。
发布于 2021-09-16 19:14:12
事实证明,assume_role只需要用于跨账户工作。我在我自己的帐户中做了所有的工作,所以删除它允许Terraform只使用键来完成工作,而不需要一个不同的IAM角色(或者它可以通过附加到Runner作为实例配置文件的角色来完成它所需要的工作)。我不清楚为什么指定assume_role会导致错误,因为访问应该在那里,但是删除它已经解决了这个问题。
https://stackoverflow.com/questions/69213521
复制相似问题