跳到主要内容

链式 RAM 角色 ARN

ChainableRamRoleArn 从一个源 profile 扮演 RAM 角色,而不是从内联凭证扮演。源 profile 会先按它自身使用的任意凭证模式完成解析,其凭证随后成为 AssumeRole 的源凭证。

这就是构建角色链的方式:一次 OAuth 登录扮演共享账号中的角色,该角色再扮演工作负载账号中的角色。它同时把单一源凭证保存在一处,而不必把 AccessKey 复制到每个下游 profile。

使用阿里云 CLI 配置​

aliyun configure --mode ChainableRamRoleArn --profile workload

不支持 ecctl configure --mode ChainableRamRoleArn。--mode 只接受 OAuth。请把该 profile 写入兼容 aliyun 的配置文件。

profile 字段​

字段必填说明
mode实践中必需ChainableRamRoleArn。不会从其他字段推断
source_profile是同一个兼容 aliyun 的配置文件中另一个 profile 的名称
ram_role_arn是完整 ARN:acs:ram::<16位账号ID>:role/<角色名>
ram_session_name否未设置时回退到 ALIBABA_CLOUD_ROLE_SESSION_NAME
expired_seconds否请求的会话有效期(秒)
policy否进一步收窄所扮演会话的内联策略
external_id否未设置时回退到 ALIBABA_CLOUD_EXTERNAL_ID
sts_endpoint否自定义 STS 端点。必须使用 HTTPS
sts_region否地域 STS 端点选择
enable_vpc否使用 VPC STS 端点

该凭证模式没有环境变量形式。source_profile 指向一个 profile,而 profile 只存在于配置文件中。

从浏览器登录到工作负载账号的两跳角色链:

{
"current": "workload",
"profiles": [
{
"name": "shared",
"mode": "RamRoleArn",
"access_key_id": "LTAI5t...",
"access_key_secret": "...",
"ram_role_arn": "acs:ram::1111111111111111:role/shared-admin",
"region_id": "cn-hangzhou"
},
{
"name": "workload",
"mode": "ChainableRamRoleArn",
"source_profile": "shared",
"ram_role_arn": "acs:ram::2222222222222222:role/workload-deploy",
"ram_session_name": "ecctl-session",
"region_id": "cn-hangzhou"
}
]
}

source_profile 必须指向同一个兼容 aliyun 的配置文件中的 profile。源缺失时以 source profile <name> not found 失败;source_profile 为空时以 source_profile is required for ChainableRamRoleArn 失败。

循环检测​

回到自身已经访问过的 profile 的角色链会在本地被拒绝:

{
"error": {
"kind": "client",
"code": "InvalidCredentials",
"message": "credential profile chain contains a cycle at workload"
}
}

检测覆盖整条解析路径,因此把自身作为间接源的 profile 会立即失败,而不会持续递归。

ARN 校验与身份验证​

与 RAM 角色 ARN 相同,ram_role_arn 必须是完整的 acs:ram::<16位账号ID>:role/<角色名> ARN。ecctl 从中派生预期账号,并在第一条业务请求前通过官方 STS GetCallerIdentity 端点验证初始凭证。自定义 sts_endpoint 可以签发凭证,但永远不会被信任去验证自己签发的结果。

角色链中的每一跳都是可续期的,第一个可续期凭证会固定规范化身份。返回不同角色的刷新会在其签名请求前被拒绝。

验证​

ecctl --profile workload configure get
ecctl --profile workload --region cn-hangzhou ecs region list

源跳失败时报告源 profile 自身的错误。扮演跳失败时报告 refresh session token failed,并附带 STS 响应体和一个 Request ID。

相关文档​