You need to enable JavaScript to run this app.
导航

使用AssumeRole管理资源

最近更新时间2024.03.08 12:27:16

首次发布时间2024.03.08 12:05:43

操作场景

若您在使用 Terraform 管理云资源时,需要使用某账号对另一账号的资源进行操作的相关场景,可以参考这篇文章进行 AssumeRole 跨账号操作,实现对所有云资源的统一管理。

使用方法

Terraform 支持使用账号 A 的 AK/SK,通过 AssumeRole 管理账号 B 的相关资源。下面以创建一个 vpc 资源为例,描述具体操作步骤。

  1. 确保账号 A 拥有扮演账号 B 某个角色 RoleB 的相关权限,该操作可以通过控制台完成,也可以使用 TF 中 iam 相关资源来进行新角色创建和策略绑定操作。iam 相关资源如下:
    volcengine_iam_rolevolcengine_iam_policyvolcengine_iam_role_policy_attachment

  2. 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"
    }
    
  3. 使用新增的 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 的相关参数也支持以下两种方式来设置角色扮演的访问凭证信息。

  1. 方式一:静态凭证(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
      }
    }
    
  2. 方式二:环境变量(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 参数只能通过方式一静态指定,无法通过环境变量导入。