我在控制所有 route53 区域的主账户下拥有用于开发、QA 和生产的 AWS 子账户。我使用 Terraform 管理一切。我使用主账户中的 STSAssumeRole 跨账户角色来访问子账户。我使用 .aws/config 文件中的角色 arn,并告诉 aws 提供商使用我想要使用的账户的配置文件。
目前,我正在尝试弄清楚如何允许 terraform 在使用一个子账户(假定 sts 角色)的配置文件运行时在该父账户中创建或修改 route53 区域。
当我尝试应用我的 route53 资源时出现以下错误:“aws_route53_record.default:AccessDenied:用户:arn:aws:sts::ID-OF-SUB-ACCOUNT:assumed-role/Cross-Production/COMPANYNAME-prod-01-awsume-session 未获授权访问此资源状态代码:403,请求 ID:BLAHBLAHBLAH”
当我不想在命令行上指定 --profile 时,我使用 awsume 动态交换我的配置文件环境。
我需要想办法告诉 terraform 承担另一个角色,或者停止承担其当前角色(这会将其放回主帐户的管理员用户)。但不太确定如何去做。有什么建议吗?
答案1
Terraform 支持多个提供商
提供者.tf
# default provider
provider "aws" {
access_key = "foo"
secret_key = "bar"
region = "us-east-1"
}
provider "aws" {
alias = "aws-assume"
assume_role {
role_arn = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
session_name = "SESSION_NAME"
external_id = "EXTERNAL_ID"
}
}
以及资源利用
resource "aws_instance" "foo" {
provider = "aws.aws-assume"
# ...
}