You need to enable JavaScript to run this app.
导航
跨账号临时授权
最近更新时间:2023.10.25 10:44:15首次发布时间:2023.09.14 14:58:17

火山引擎提供角色扮演机制,通过获取角色所属账号的临时安全令牌,从而实现跨账号临时授权,允许其他账号以角色所属账号主体的身份来访问云资源。
本文介绍如何实现跨账号授权,使得账号 B 的 IAM 子用户能够以角色所属账号主体 A 的身份去访问 CFS 资源。

前提条件

主账号无法直接扮演角色,需要创建 IAM 子用户并赋予AssumeRoleAccess策略,通过 IAM 子用户来扮演角色以获取临时安全令牌进行云资源的访问。
主账号如何创建 IAM 用户并授予AssumeRoleAccess 策略,请参见新建用户

跨账号授权流程

  1. 在账号主体 A 中创建一个角色,并预设角色权限。

    1. 使用账号主体 A 或管理员账户登录访问控制平台
    2. 在左侧导航栏选择身份管理 > 角色,然后单击新建角色
    3. 选择信任身份向导页,选择信任身份类型为账号,然后选择其他账号并填写账号 ID,再单击下一步
      图片
    4. 配置角色信息向导页,填写角色名称(假设为RoleForTest),然后单击下一步
    5. 添加权限向导页,筛选并勾选目标权限,然后单击提交
      您可以通过关键字筛选策略。本文以为新增角色添加CFSFullAccess权限为例。
      图片
  2. 账号 B 的子账号发起角色扮演请求,获取临时安全令牌。

    GET http://sts.volcengineapi.com?Action=AssumeRole&Version=2018-01-01&RoleTrn=trn:iam::200000****:role/RoleForTest&RoleSessionName=assume_test&DurationSeconds=43200
    Content-Type: application/x-www-form-urlencoded
    ServiceName: sts
    X-Date: 20230913T131357Z
    Authorization: HMAC-SHA256 Credential=AKLT4MQ/20230913/cn-beijing/sts/request, SignedHeaders=accept;content-type;host;x-date, Signature=83671ac2**8a5581f
    

    支持您通过调用 AssumeRole 接口来获取临时安全令牌。在调用接口前,请先了解以下信息:

    参数

    类型

    是否必须

    描述

    Action

    String

    AssumeRole 接口。

    Version

    String

    接口版本为2018-01-01

    RoleTrn

    String

    需要扮演的角色 Trn,Trn 的书写格式为trn:iam::{account}:role/{RoleName}

    说明

    请替换为账号 A 的用户 ID,以及需要扮演的角色名称(本文为 RoleForTest)。

    RoleSessionName

    String

    自定义临时安全令牌名称。

    DurationSeconds

    String

    申请的临时安全令牌的有效时长,默认为 3600s。
    可按需设置有效时长,范围为 900~3600*12s。

    Policy

    String

    InlinePolicy,内嵌权限策略,可用于限制临时安全令牌的权限范围。最终权限将取内嵌策略与角色策略的权限交集。
    如需设置自定义内嵌权限,请参考本文中的细粒度权限设置

    ServiceName

    String

    AssumeRole 接口的 Service 为sts,接入地址为sts.volcengineapi.com

    Authorization

    String

    AssumeRole 接口无法使用主账号 AK/SK 访问,请使用账号 B 的 IAM 子用户的 AK/SK 申请 STS 颁发的临时安全令牌。相关信息,请参见签名方法

  3. 查看返回的临时安全令牌信息。
    调用 AssumeRole 接口将返回如下类似信息。请注意收集返回信息中的AccessKeyIdSecretAccessKeySessionToken信息。

    {
        "ResponseMetadata": {
            "RequestId": "202309131**5725CDEDD9BF0",
            "Action": "AssumeRole",
            "Version": "2018-01-01",
            "Service": "sts",
            "Region": "cn-beijing"
        },
        "Result": {
            "AssumedRoleUser": {
                "Trn": "trn:sts::210*****:assumed-role/RoleForTest/assume_test",
                "AssumedRoleId": "26***89:assume_test"
            },
            "Credentials": {
                "ExpiredTime": "2023-09-14T05:35:49+08:00",
                "CurrentTime": "2023-09-13T17:35:49+08:00",
                "AccessKeyId": "AKTPYTNiMzI******E4ZjVmYWUyMmUwMWY",
                "SecretAccessKey": "N2Y5ZDc*****jMzIyYzVhMDg0YzM",
                "SessionToken": "STSeyJBY2NvdW50SWQiOjIxMDAwMDEzNzcsIklkZW50aXR5VHlwZSI6NCwiSWRlbnRpdH******9yaWdpbmFsSWRlbnRpdHlUeXBlIjoyfQ=="
            }
        }
    }
    

使用临时安全令牌

当您成功获取临时安全令牌后,请在有效期内使用令牌访问 CFS 云资源。

  • 当您需要访问 HDFS 模式实例时,您需要在core-site.xml配置文件中填写临时令牌中的AccessKeyIdSecretAccessKeySessionToken信息。具体操作,请参见挂载 HDFS 模式实例
  • 当您需要访问 ACC 模式实例时,您需要在cloudfs-fuse.conf配置文件中填写临时令牌中的AccessKeyIdSecretAccessKeySessionToken信息。具体操作,请参见挂载 ACC 模式实例
  • 如果需要通过调用 API 接口访问 CFS 资源,此时您需要将临时令牌中的AccessKeyIdSecretAccessKeySessionToken信息添加到请求 Header 中,从而通过身份认证。相关文档,请参见公共参数

(可选)细粒度权限设置

内嵌权限策略(InlinePolicy)用于限制临时安全令牌的权限范围,最终权限将取内联策略与角色策略的权限交集。当您想进一步细化临时安全令牌的权限时,可以按需设置 InlinePolicy。

是否设置 InlinePolicy

描述

不设置

发起角色扮演请求中没有设置 InlinePolicy,则权限与角色权限保持一致。

设置

发起角色扮演请求中设置 InlinePolicy,则取权限交集。

  • 内嵌权限与角色权限声明相同资源,取交集生效。
    比如角色权限声明cfs:*访问*资源,而内嵌权限声明cfs:*可访问fs1/test资源,则仅能访问fs1/test资源。
  • 内嵌权限声明角色权限不包含的权限,则不包含的权限不会生效。
    比如角色权限声明cfs:*,内嵌权限声明vpc:*,则只对 CFS 有权限,对 VPC 无权限。

策略样式如下,请按需设置内嵌权限。如需了解更多信息,请参见PolicyDocument

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cfs:*"
            ],
            "Resource": [
                "fs1/test"
            ]
        }
    ]
}

在策略中的 Effect 字段用来标识是否允许指定资源的操作权限,支持AllowDeny两个取值。

  • 对资源仅声明Allow,无Deny,则表示允许访问。
  • 对资源同时声明AllowDeny,则表示禁止访问。
  • 对资源没有申明AllowDeny,则表示禁止访问。
  • 在内嵌策略(InlinePolicy)和角色策略中,针对相同资源任意一方声明为Deny,则表示禁止访问。