
# 获取委托的临时访问密钥和securitytoken - CreateTemporaryAccessKeyByAgency
#### 功能介绍
该接口可以用于通过委托来获取临时访问密钥（临时AK/SK）和securitytoken。
临时AK/SK和securitytoken是系统颁发给IAM用户的临时访问令牌，有效期可在15分钟至24小时范围内设置，过期后需要重新获取。临时AK/SK和securitytoken遵循权限最小化原则。鉴权时，临时AK/SK和securitytoken必须同时使用，请求头中需要添加"x-security-token"字段，使用方法详情请参考：[使用临时AK/SK做签名](https://support.huaweicloud.com/devg-apisign/api-sign-securetoken.html)
该接口可以使用全局区域的Endpoint和其他区域的Endpoint调用。IAM的Endpoint请参见：[地区和终端节点](https://developer.huaweicloud.com/endpoint?IAM)。
#### 调试
您可以在[API Explorer](https://console.huaweicloud.com/apiexplorer/#/openapi/IAM/doc?api=CreateTemporaryAccessKeyByAgency)中调试该接口。
#### 授权信息
账号具备所有API的调用权限，如果使用账号下的IAM用户调用当前API，该IAM用户需具备调用API所需的权限，具体权限要求请参见[权限和授权项](https://support.huaweicloud.com/api-iam/iam_19_0001.html)。
#### URI
POST /v3.0/OS-CREDENTIAL/securitytokens
#### 请求参数
表1请求Header参数 
| 参数            | 是否必选 | 参数类型   | 描述                                                                                                                                                                                |
|:---|:---|:---|:---|
| Content-Type  | 是    | String | 该字段填为"application/json;charset=utf8"。                                                                                                                                             |
| Authorization | 否    | String | X-Auth-Token和Authorization二选一，推荐使用Authorization方式，AK/SK签名认证后会生成Authorization Header。更多信息请参考[AK/SK签名认证算法详解](https://support.huaweicloud.com/devg-apisign/api-sign-algorithm.html)。 |
| X-Auth-Token  | 否    | String | X-Auth-Token和Authorization二选一，拥有Agent Operator权限的token。                                                                                                                           |
   
表2请求Body参数 
| 参数                                                            | 是否必选 | 参数类型   | 描述    |
|:---|:---|:---|:---|
| [auth] | 是    | Object | 认证信息。 |
   
 表3auth 
| 参数                                                                        | 是否必选 | 参数类型   | 描述    |
|:---|:---|:---|:---|
| [identity] | 是    | Object | 认证参数。 |
   
 表4auth.identity 
| 参数                                                                                     | 是否必选 | 参数类型             | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|:---|
| methods                                                                                | 是    | Array of strings | 认证方法，该字段内容为\["assume_role"\]。                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| [assume_role] | 是    | Object           | assume_role的具体信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| [policy]                 | 否    | Object           | 用户自定义策略的信息，用于限制获取到的临时访问密钥和securitytoken的权限（当前仅OBS服务支持该限制）。 如果填写此参数，则临时访问密钥和securitytoken的权限为：用户或委托具有的权限和policy参数限制的权限交集。policy参数的字符个数不大于2048。 关于IAM策略的格式和语法，请参考：[策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0017.html)。 说明： 仅OBS服务识别临时访问密钥中的policy限制。如果您获取临时访问密钥时设置了policy参数，访问非OBS服务时policy不生效，比如访问ECS服务时，临时访问密钥仅代表用户或委托的权限，不与policy限制取交集。 |
   
 表5auth.identity.assume_role 
| 参数                                                                                                 | 是否必选 | 参数类型    | 描述                                                                                                      |
|:---|:---|:---|:---|
| agency_name                                                                                        | 是    | String  | 委托名称，获取方式请参见：[获取账号、IAM用户、项目、用户组、区域、委托的名称和ID](https://support.huaweicloud.com/api-iam/iam_17_0002.html)。 |
| 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  | 委托方对应的企业用户信息。                                                                                           |
   
 表6auth.identity.assume_role.session_user 
| 参数   | 是否必选 | 参数类型   | 描述                                                                                                       |
|:---|:---|:---|:---|
| name | 否    | String | 委托方对应的企业用户名。 用户名需满足如下规则：长度5\~64之间，只能包含如下字符：大小写字母、空格、数字或特殊字符（-_.）且只能以字母开头。 |
   
 表7auth.identity.policy 
| 参数                                                                                        | 是否必选 | 参数类型             | 描述                                                                                                                                                                                                                                                               |
|:---|:---|:---|:---|
| Version                                                                                   | 是    | String           | 权限版本号，创建自定义策略时，该字段值填为"1.1"。 说明： 1.1：策略。IAM提供的一种细粒度授权的能力，可以精确到具体服务的操作、资源以及请求条件等。                                                                                                  |
| [Statement] | 是    | Array of objects | 授权语句，描述自定义策略的具体内容，不超过8个。 说明： 仅OBS服务识别临时访问密钥中的policy限制，此处Statement的参数定义请参考OBS服务《权限配置指南》中的["策略结构\&语法"](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0053.html#section2)。 |
   
#### 响应参数
表8响应Body参数 
| 参数                                                                         | 参数类型   | 描述      |
|:---|:---|:---|
| [credential] | Object | 认证结果信息。 |
   
 表9credential 
| 参数            | 参数类型   | 描述                                                                                                                                                                                                                        |
|:---|:---|:---|
| expires_at    | String | AK/SK和securitytoken的过期时间。响应参数为UTC时间格式，北京时间为UTC+8小时。 如返回： ``` "expires_at": "2020-01-08T02:56:19.587000Z" ``` 北京时间：2020-01-08 10:56:19.587 |
| 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 | 内部服务错误。 |
   
#### 错误码
无
