文档首页> 统一身份认证服务 IAM> API参考> API> 访问密钥管理> 通过委托获取临时访问密钥和securitytoken
更新时间:2023-11-29 GMT+08:00

通过委托获取临时访问密钥和securitytoken

功能介绍

该接口可以用于通过委托来获取临时访问密钥(临时AK/SK)和securitytoken。

临时AK/SK和securitytoken是系统颁发给IAM用户的临时访问令牌,有效期可在15分钟至24小时范围内设置,过期后需要重新获取。临时AK/SK和securitytoken遵循权限最小化原则。鉴权时,临时AK/SK和securitytoken必须同时使用,请求头中需要添加“x-security-token”字段,使用方法详情请参考:使用临时AK/SK做签名

该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见:地区和终端节点

URI

POST /v3.0/OS-CREDENTIAL/securitytokens

请求参数

表1 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

String

该字段填为“application/json;charset=utf8”。

X-Auth-Token

String

拥有Agent Operator权限的token。

表2 请求Body参数

参数

是否必选

参数类型

描述

auth

Object

认证信息。

表3 auth

参数

是否必选

参数类型

描述

identity

Object

认证参数。

表4 auth.identity

参数

是否必选

参数类型

描述

methods

Array of strings

认证方法,该字段内容为["assume_role"]。

assume_role

Object

assume_role的具体信息。

policy

Object

用户自定义策略的信息,用于限制获取到的临时访问密钥和securitytoken的权限(当前仅适用限制OBS服务的权限)。

如果填写此参数,则临时访问密钥和securitytoken的权限为:委托具有的权限和policy参数限制的权限交集。

关于IAM策略的格式和语法,请参考:策略

表5 auth.identity.assume_role

参数

是否必选

参数类型

描述

agency_name

String

委托名称,获取方式请参见:获取帐号、IAM用户、项目、用户组、区域、委托的名称和ID

domain_id

String

委托方的帐号ID。“domain_id”与“domain_name”至少填写一个,建议选择“domain_id”。

domain_name

String

委托方的帐号名。“domain_id”与“domain_name”至少填写一个,建议选择“domain_id”。

duration_seconds

Integer

AK/SK和securitytoken的有效期,时间单位为秒。取值范围:15分钟 ~ 24小时 ,默认为15分钟。

session_user

Object

委托方对应的企业用户信息。

表6 auth.identity.assume_role.session_user

参数

是否必选

参数类型

描述

name

String

委托方对应的企业用户名。

用户名需满足如下规则:长度5~64之间,只能包含如下字符:大小写字母、空格、数字或特殊字符(-_.)且只能以字母开头。

表7 auth.identity.policy

参数

是否必选

参数类型

描述

Version

String

权限版本号,创建自定义策略时,该字段值填为“1.1”。

说明:

1.1:策略。IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。

Statement

Array of objects

授权语句,描述自定义策略的具体内容,不超过8个。

表8 auth.identity.policy.Statement

参数

是否必选

参数类型

描述

Action

Array of strings

授权项,指对资源的具体操作权限。支持的授权项请参考各云服务《API参考》中“权限和授权项”章节。

说明:
  • 格式为:服务名:资源类型:操作,例:vpc:ports:create。
  • 服务名为产品名称,例如ecs、evs和vpc等,服务名仅支持小写。 资源类型和操作没有大小写,要求支持通配符号*,无需罗列全部授权项。

Effect

String

作用。包含两种:允许(Allow)和拒绝(Deny),既有Allow又有Deny的授权语句时,遵循Deny优先的原则。

取值范围:

  • Allow
  • Deny

Condition

Map<String,Map<String,Array<String>>>

限制条件。了解更多相关参数,请参考:配置自定义策略

说明:

以请求示例中的Condition为例:条件键(obs:prefix)和字符串(public)需相等(StringEquals)。

 "Condition": {
              "StringEquals": {
                "obs:prefix": [
                  "public"
                ]
              }
            }

Resource

Array of strings

资源。规则如下:

说明:
  • 格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号*表示所有。如"obs:*:*:bucket:*": 表示所有的OBS桶。
  • region字段为*或用户可访问的region。service必须存在且resource属于对应service。

响应参数

表9 响应Body参数

参数

参数类型

描述

credential

Object

认证结果信息。

表10 credential

参数

参数类型

描述

expires_at

String

AK/SK和securitytoken的过期时间。响应参数为UTC时间格式。

access

String

获取的AK。

secret

String

获取的SK。

securitytoken

String

securitytoken是将所获的AK、SK等信息进行加密后的字符串。

请求示例

  • 填写"session_user"参数,即委托方对应的企业用户信息,包含委托方对应的企业用户名。
    POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
    {
        "auth": {
            "identity": {
                "methods": [
                    "assume_role"
                ],
                "assume_role": {
                    "domain_name": "IAMDomainA",
                    "agency_name": "IAMAgency",
                    "duration_seconds": 3600,
                    "session_user": {
                        "name": "SessionUserName"
                    }
                }
            }
        }
    }
  • 填写"policy"参数,即用户自定义策略的信息,用于限制获取到的临时访问密钥和securitytoken的权限(当前仅适用限制OBS服务的权限)。如果填写此参数,则临时访问密钥和securitytoken的权限为:委托具有的权限和policy参数限制的权限交集。
    POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
    {
        "auth": {
            "identity": {
                "methods": [
                    "assume_role"
                ],
                "policy": {
                          "Version": "1.1",
    		       "Statement": [{
    			 "Effect": "allow",
    			 "Action": [
                             "obs:object:*"
                             ],
    			 "Resource": ["obs:*:*:object:*"],
    			 "Condition": {
    			    "StringEquals": {
    				"obs:prefix": ["public"]
    				}
    			}
    		}]
                 },
                "assume_role": {
                    "domain_name": "IAMDomainA",
                    "agency_name": "IAMAgency",
                    "duration_seconds": 3600
    
                }
            }
        }
    }
  • 不填写"session_user"和policy参数。
    POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
    {
        "auth": {
            "identity": {
                "methods": [
                    "assume_role"
                ],
                "assume_role": {
                    "domain_name": "IAMDomainA",
                    "agency_name": "IAMAgency",
                    "duration_seconds": 3600
                }
            }
        }
    }

响应示例

状态码为 201 时:

创建成功。

无论session_user填写与否,返回都是相同的。若填写了session_user,则在securitytoken中包含了所填写的session_user信息。

{
    "credential": {
        "access": "E6DX0TF2ZREQ4Z...",
        "expires_at": "2020-01-08T02:56:19.587000Z",
        "secret": "w9ePum0qdfac39ErLD0UdjofYkqort6Iw....",
        "securitytoken": "gQpjbi1ub3J0aC0..."
    }
}

返回值

返回值

描述

201

创建成功。

400

参数无效。

401

认证失败。

403

没有操作权限。

500

内部服务错误。

错误码