获取临时安全凭证
您可以通过调用STS服务来获取临时安全凭证。在调用STS服务之前,需要执行如下前置操作:
- 创建委托或者信任委托,并配置哪些华为云账号可以切换到此委托执行操作。要了解信任委托的更多信息,请参见信任委托概述。
- 创建用户,同时授予用户调用STS服务AssumeAgency API切换委托或信任委托的权限。要了解调用AssumeAgency API所需的权限,请参见授予获取临时安全凭证的权限。
- 创建该用户的永久访问密钥用于调用AssumeAgency API获取临时安全凭证,或者使用已经获取到的临时安全凭证再次调用AssumeAgency API获取新的临时安全凭证。要了解如何调用AssumeAgency API,请参见通过委托或者信任委托获取临时安全凭证。
要调用STS AssumeAgency API ,您可以使用华为SDK,此工具包适用于各种不同的编程语言和环境,包括Java、Python、Go、NodeJS、.NET和PHP,并负责处理各种任务,如对您的API请求进行签名、在必要时重试请求以及处理错误响应。您也可直接调用STS API,详情请参阅《统一身份认证API参考》。
STS AssumeAgency API请求使用永久访问密钥或者临时安全凭证(包括临时AK/SK和会话令牌)签名调用成功后,会返回新的临时安全凭证,随后用户 (或用户所运行的应用程序) 可使用新的临时安全凭证访问您的华为云资源。您可以在调用STS AssumeAgency API时传递会话策略及会话标签,生成的临时安全凭证的权限是信任委托的身份策略与会话策略的权限交集。

STS AssumeAgency API操作返回的会话令牌长度不固定,建议不要限制其最大大小。典型的令牌大小小于4096字节,但后续版本可能会发生变化。
STS API终端节点
STS API支持在任意区域终端节点进行调用,但是建议选择更靠近您的终端节点,以减少延迟,提升API调用的性能。如果您无法与原终端节点进行通信,也可选择将调用重定向到其他区域的终端节点实现容灾。如果您使用某种语言的华为云SDK,请先使用工具包的方法指定一个区域,然后再进行API调用。如果您正在手动构建HTTP API请求,则必须自行将请求发送到正确的终端节点。有关更多终端节点的信息,您可以从地区和终端节点获取。
通过委托或者信任委托获取临时安全凭证
AssumeAgency API适用于现有IAM用户没有对应资源的访问权限,但是仍然需要访问的业务场景。例如,用户需要操作其他华为云账号中资源。此外,也可使用它来暂时获得特权访问权限,安全方面可以要求调用者提供多重身份验证(MFA)。调用此API时,必须使用永久访问密钥或者临时安全凭证进行签名。调用时可以传递以下信息:
- duration_seconds(可选):获得的临时安全凭证的有效时间(单位秒)。duration_seconds参数取值范围为[900秒, 43200秒],默认值为3600秒,同时该时间需要小于信任委托本身设置的最大会话持续时间。请注意,在委托链调用时(即携带X-Security-Token的Header头)时该时间不能超过3600秒。
- external_id(可选):外部ID。用于解决混淆代理人问题,比如您将自己的华为云资源交给专业的第三方服务商协助管理,第三方服务商会为您分配一个唯一的external_id值,您将此值配置到信任委托的信任策略中,这样可以避免第三方服务商服务的其他客户通过切换同名委托操作您的华为云资源。
- policy(可选):会话策略。会话策略用于限制信任委托的身份策略中分配的权限,最终生成的临时安全凭证的权限是信任委托的身份策略与会话策略的权限交集。
- policy_ids(可选):身份策略ID列表。可以填写系统身份策略ID或者同账号下的自定义身份策略ID,同样用于限制信任委托的身份策略中分配的权限,最终生成的临时安全凭证的权限是信任委托的身份策略与该列表中策略的权限交集。
- agency_urn(必选):要切换的委托或者信任委托的统一资源名称URN。
- agency_session_name(必选):委托会话名称,此参数可在不同主体切换委托或者信任委托时标识会话。管理员可能会要求您在切换委托或者信任委托时指定IAM用户名作为会话名称。
- serial_number(可选):发起调用的IAM用户绑定的MFA设备的序列号。
- token_code(可选):发起调用的IAM用户绑定的MFA设备上的6位数字码。
- source_identity(可选):源身份信息。在切换委托或者信任委托并且首次设置了源身份,此值会随着security_token传递下去,后续无法删除或者修改。您可以通过源身份检索CTS日志记录来确定谁使用委托或者信任委托执行了操作。
- tags(可选):会话标签。会话标签会保存在临时安全凭证的security_token中,用于后续鉴权。会话标签默认不会继承,即使用第一调用生成的临时安全凭证二次调用此接口生成临时安全凭证,第二次生成的临时安全凭证不包含第一次调用传递的会话标签,除非使用transitive_tag_keys参数设置可传递的标签列表。
- transitive_tag_keys(可选):随着临时安全凭证调用链持续传递的标签键列表。
以下示例显示了调用AssumeAgency API时的请求和响应。此示例中,会切换demo委托,其中包含会话策略、会话标签、外部ID和源身份,生成的会话命名为zhangsan-session,生成的临时密钥有效期为1800s。
请求示例
示例中的Authorization Header头是对请求进行签名后的占位符,签名用于身份验证。建议使用签名SDK与demo创建API请求,这样做的一个好处是开发工具包将为您处理请求签名。如果您手动创建并签署API请求,请参阅AK/SK签名认证流程,以了解如何签署请求。
POST https: //sts-cn-north-4.myhuaweicloud.com/v5/agencies/assume Content - Type: application / json Authorization: XXX { "duration_seconds": "1800", "external_id": "123ABC", "policy": "{\"Version\":\"5.0\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":\"obs:bucket:listBucket\",\"Resource\":\"obs:*:*:bucket:productionapp\"}]}", "agency_urn": "iam::123456789:agency:demo", "agency_session_name": "zhangsan-session", "source_identity": "DevUser123", "tags": [{ "key": "project", "value": "demo_project" }, { "key": "cost_center", "value": "12345" } ] }
响应示例
除了临时安全凭证之外,该响应还包括了源身份、委托会话的URN和临时安全凭证的到期时间。
{ "source_identity": "DevUser123", "assumed_agency": { "urn": "sts::123456789:assumed-agency:demo/zhangsan-session", "id": "demo_agency_id:zhangsan-session" }, "credentials": { "access_key_id": "HSTANOXZU2UXBS55JLJ3", "secret_access_key": "EoWCQrr...SCcw4Whkt2aXKWAr", "security_token": "hQpjbi1XXXXXX...XXXXXbhBbA0TQ==", "expiration": "2024-03-01T12:00:00.000Z" } }