Terraform云/企业-如何使用AWS承担角色



我想使用带有Terraform Cloud/Enterprise的AWS假设角色

在Terraform Open Source中,您通常只需要执行一个假定角色,利用CLI上的.aws/Credential配置文件(这是初始身份验证(,并执行假定角色:

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

问题是,对于Terraform Enterprise或Cloud,您不能引用配置文件,因为不可变的基础设施的目录中不会有该文件

Terraform Cloud/Enterprise需要将访问密钥ID和秘密访问密钥设置为变量,以便其基础设施可以通过其管道执行Terraform RUN,并向您想要在其中提供的任何AWS帐户进行身份验证。

所以问题是:我如何利用AWS帐户的访问密钥ID和秘密访问密钥,通过"操作":"sts:AssumeRole",策略来执行AWS假定角色?

我认为,下面的方法会起作用,但Terraform正在通过AWS凭据配置文件信用对具有sts:AsseumeRole策略的帐户进行初始身份验证

Terraform是否可以查看access_key和secret_key,以确定在尝试担任该角色时使用哪个AWS帐户,而不是使用AWS凭据配置文件

provider "aws" {
region                  = var.aws_region
access_key              = var.access_key_id
secret_key              = var.secret_access_key
assume_role {
role_arn     = "arn:aws:iam::566264069176:role/RemoteAdmin"
#role_arn     = "arn:aws:iam::<awsaccount>:role/<rolename>" # Do a replace in "file_update_automation.ps1"
session_name = "RemoteAdminRole"
}
}

为了允许Terraform Cloud/Enterprise获得新的假定角色会话令牌,它需要使用Access_key和Secret_key来告诉它什么AWS帐户具有sts:assembly角色,链接到要提供的成员AWS帐户,而不是AWS Creds Profile

谢谢

如果您启用了业务计划并在基础设施中实现了自托管地形代理,那么这是可以实现的。请参阅视频。

我使用了完全相同的提供程序配置,但没有显式添加acces键。访问密钥作为环境变量添加到Terraform Cloud工作空间中。

如果您的TFE基础设施也托管在AWS中,并且实例配置文件受到您试图承担的角色的信任,那么Terraform Enterprise(TFE(肯定可以做到这一点。

对于Terraform Cloud(TFC(来说,这是一个不同的故事,今天没有办法在TFC和IAM角色之间建立信任,但我们可以利用AWS SDK从环境变量中获取凭据的能力。您有两个选项:

  1. 在工作区上创建一个AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY环境变量并对它们进行设置(记住将秘密访问密钥标记为敏感(。提供商将在env中提取这些,并与您本地的工作方式相同
  2. 如果所有工作空间都需要使用相同的访问密钥和密钥,则可以在变量集上设置env变量,该变量集将应用于所有工作空间

现在可以通过OpenID Connect提供程序使用动态凭据。这是他们今年早些时候(2023年2月(推出的一项相对较新的功能。

请参阅公告和官方文档:AWS提供商的动态凭据

最新更新