若您在使用 Terraform 管理云资源时,需要使用某账号对另一账号的资源进行操作的相关场景,可以参考这篇文章进行 AssumeRole 跨账号操作,实现对所有云资源的统一管理。
Terraform 支持使用账号 A 的 AK/SK,通过 AssumeRole 管理账号 B 的相关资源。下面以创建一个 vpc 资源为例,描述具体操作步骤。
确保账号 A 拥有扮演账号 B 某个角色 RoleB 的相关权限,该操作可以通过控制台完成,也可以使用 TF 中 iam 相关资源来进行新角色创建和策略绑定操作。iam 相关资源如下:volcengine_iam_role
、volcengine_iam_policy
、volcengine_iam_role_policy_attachment
在 main.tf
中新增一个带有 assume_role
参数的 provider
声明。
说明
如果需要在一个 main.tf 文件中同时声明账号 A 和账号 B 的 provider,可以使用别名参数 alias
来进行区分。
provider "volcengine" { access_key = "AK-AccountA" secret_key = "SK-AccountA" endpoint = "YourEndpoint" region = "YourRegion" assume_role { assume_role_trn = "trn:iam::ID-AccountB:role/RoleName-AccountB" assume_role_session_name = "tf-test-assume-role" } alias = "volcengine-B" }
使用新增的 provider
管理账号 B 的相关资源,如 vpc。
resource "volcengine_vpc" "foo" { vpc_name = "tf-test" cidr_block = "**.**.**.**/**" // 有多个 provider 声明时,显示指定该资源使用的 provider 别名 provider = volcengine.volcengine-B }
assume_role_trn: 必填,角色扮演的 TRN,格式为 trn:iam::AccountID:role/RoleName
。
assume_role_session_name:必填,角色扮演的临时 Session 名称。
duration_seconds: 选填,角色扮演的持续时间,取值范围在 900~43200 seconds,默认为 3600 s。
policy: 选填,角色扮演时的一些额外策略。
和 AK/SK 一样,AssumeRole 的相关参数也支持以下两种方式来设置角色扮演的访问凭证信息。
方式一:静态凭证(Static credentials) ,即在 Terraform 配置文件的 provider 声明中添加 assume_role
信息,完整的凭证内容如下:
provider "volcengine" { ... ... assume_role { assume_role_trn = "trn:iam::AccountID:role/RoleName" assume_role_session_name = "tf-test-assume-role" duration_seconds = 3600 } }
方式二:环境变量(Environment variables) 。您可以将如下信息添加到环境变量中进行认证鉴权:
export VOLCENGINE_ASSUME_ROLE_TRN=trn:iam::AccountID:role/RoleName export VOLCENGINE_ASSUME_ROLE_SESSION_NAME=tf-test-assume-role export VOLCENGINE_ASSUME_ROLE_DURATION_SECONDS=7200
说明
policy
参数只能通过方式一静态指定,无法通过环境变量导入。