amazon-web-services - Terraform 无法承担 IAM 角色
问题描述
我正在尝试开始使用 Terraform,并正在使用 GitLab CI/CD 与之交互。My Runner 无法担任具有创建 AWS 资源的提升权限的 IAM 角色。我在这方面的 Google-fu 让我失望了。
收到的错误是:
错误:配置 Terraform AWS 提供程序时出错:无法假定 IAM 角色 (my:arn)。有许多可能的原因 - 最常见的是:
- 用于承担角色的凭据无效
- 凭据没有担任该角色的适当权限
- 角色 ARN 无效
我在 IAM 中创建了一个访问/密钥,并尝试将它们作为 GitLab CI/CD 变量、我直接export
在我before_script
的provider
. 无论如何,我仍然遇到同样的错误。
更奇怪的是,AWS 显示该密钥正在被使用。“上次使用”列将始终反映上次尝试运行管道的时间戳。无论好坏,密钥都是我的根 AWS 账户的一部分 - 这是一个沙盒项目,我没有任何 IAM 用户,因此,我不清楚 Terraform 如何无法使用这些凭证来承担角色,根据 AWS,它可以访问我的帐户,并且我的帐户具有 root 权限。
这是我的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
只包含一个 Policy, 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"
]
}
]
}
TIA 的任何建议......真的把我的头撞在墙上。
解决方案
事实证明,假设角色只需要跨账户工作。我在我自己的帐户中完成所有工作,因此删除它允许 Terraform 只使用密钥来完成工作,而无需其他 IAM 角色(或者它能够通过附加到Runner 作为实例配置文件)。我不清楚为什么无论如何指定假设角色会导致错误,因为访问应该在那里,但删除它已经解决了这个问题。
推荐阅读
- c++ - 如何将 Mat 重塑为张量以在 C++ 中用于深度神经网络?
- python - 在 tkinter 的文本小部件中忽略“Enter”作为换行符
- node.js - 如何在反应钩子中从 mongoDB express 服务器 POST 和 GET?
- c# - 如果 if 语句不满足特定要求,他们是否有任何方法来循环它
- macos - 如何在macOS中以root用户身份运行弹性搜索?
- arrays - 数组值不递增
- flutter - 我需要在条带支付方式中为 paymentIntentClientSecret 传递哪些参数?
- vba - 宏使用 serverxmlhttp 请求获得部分响应
- r - 如何循环 glm
- arrays - 如何将元素列表替换为元素列表作为单个元素