Terraform 从账户 A 获取 AWS 数据并在账户 B 中使用它

Terraform to get AWS data from Account A and use it in Account B

我正在使用两组 terraform 脚本,它们在账户 A 的 AWS 中创建应用程序基础设施,在账户 B 中创建代码管道,在账户 B 中创建代码管道的 TF 脚本将需要一些配置参数(ALB、ECS 等)来自已经设置的帐户 A,如果所有内容都托管在同一个 AWS 帐户上,我很熟悉获取数据,是否可以使用 Terraform 从另一个帐户检索一个帐户的数据?这种情况有任何文档吗?

是的,这是可能的。由于问题相当笼统,我只能提供一般信息。

一般来说,对于 cross-account 访问,使用 cross-account IAM 角色 。这是一个很好的做法,而不是必需的。有关角色的 AWS 文档信息:

基于这些,在 Account A 中,您必须设置一个 可承担的角色 具有允许账户 B 承担该角色的信任关系。在账户 B 中,用于 terraform 的 IAM 用户需要具有 IAM 权限才能承担该角色。

设置角色后,在 terraform 中,您将使用 aws 提供程序,该提供程序将 assume_role,例如来自 docs:

provider "aws" {

  alias  = "assumed_role_provider"

  assume_role {
    role_arn     = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
    session_name = "SESSION_NAME"
    external_id  = "EXTERNAL_ID"
  }
}

然后要使用提供程序,您可以使用它的 别名 作为资源或数据源,例如来自 docs:

resource "aws_instance" "foo" {
  provider = aws.assumed_role_provider

  # ...
}