通過調用AssumeRole接口,獲取一個扮演RAM角色的臨時身份憑證(STS Token)。
接口說明
前提條件
該接口不能使用阿里云賬號(主賬號)調用,只能使用 RAM 用戶或 RAM 角色調用,請確保已為調用者(RAM 用戶或 RAM 角色)授予 STS 的管理權限(AliyunSTSAssumeRoleAccess)。
否則,會報如下錯誤:
You are not authorized to do this action. You should be authorized by RAM.
問題原因和解決方法如下:
- 該調用者缺少允許 STS 扮演角色的權限策略:請為該調用者添加系統策略(AliyunSTSAssumeRoleAccess)或自定義策略。具體操作,請參見能否指定 RAM 用戶具體可以扮演哪個 RAM 角色、為 RAM 用戶授權。
- RAM 角色的信任策略不包含調用者,即 RAM 角色不允許該調用者扮演:請為 RAM 角色添加允許該調用者扮演的信任策略。具體操作,請參見修改 RAM 角色的信任策略。
最佳實踐
STS Token 自頒發后將在一段時間內有效,建議您設置合理的 Token 有效期,并在有效期內重復使用,以避免業務請求速率上升后,STS Token 頒發的速率限制影響到業務。具體速率限制,請參見 STS 服務調用次數是否有上限。您可以通過請求參數DurationSeconds
設置 Token 有效期。
在移動端上傳或下載 OSS 文件等場景下,其訪問量較大,即使重復使用 STS Token 也可能無法滿足限流要求。為避免 STS 的限流成為 OSS 訪問量的瓶頸,您可以嘗試 OSS 的在 URL 中包含簽名的方案。更多信息,請參見在 URL 中包含簽名和服務端簽名后直傳。
調試
您可以在OpenAPI Explorer中直接運行該接口,免去您計算簽名的困擾。運行成功后,OpenAPI Explorer可以自動生成SDK代碼示例。
授權信息
下表是API對應的授權信息,可以在RAM權限策略語句的Action
元素中使用,用來給RAM用戶或RAM角色授予調用此API的權限。具體說明如下:
- 操作:是指具體的權限點。
- 訪問級別:是指每個操作的訪問級別,取值為寫入(Write)、讀取(Read)或列出(List)。
- 資源類型:是指操作中支持授權的資源類型。具體說明如下:
- 對于必選的資源類型,用背景高亮的方式表示。
- 對于不支持資源級授權的操作,用
全部資源
表示。
- 條件關鍵字:是指云產品自身定義的條件關鍵字。
- 關聯操作:是指成功執行操作所需要的其他權限。操作者必須同時具備關聯操作的權限,操作才能成功。
操作 | 訪問級別 | 資源類型 | 條件關鍵字 | 關聯操作 |
---|---|---|---|---|
sts:AssumeRole | get | *Role acs:ram::{#accountId}:role/{#RoleName} |
| 無 |
請求參數
名稱 | 類型 | 必填 | 描述 | 示例值 |
---|---|---|---|---|
DurationSeconds | long | 否 | Token 有效期。單位:秒。 Token 有效期最小值為 900 秒,最大值為要扮演角色的 您可以通過 CreateRole 或 UpdateRole 設置角色最大會話時間 | 3600 |
Policy | string | 否 | {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"} | |
RoleArn | string | 是 | 要扮演的 RAM 角色 ARN。 該角色是可信實體為阿里云賬號類型的 RAM 角色。更多信息,請參見創建可信實體為阿里云賬號的 RAM 角色或 CreateRole 。 格式: 您可以通過 RAM 控制臺或 API 查看角色 ARN。具體如下:
| acs:ram::123456789012****:role/adminrole |
RoleSessionName | string | 是 | 角色會話名稱。 該參數為用戶自定義參數。通常設置為調用該 API 的用戶身份,例如:用戶名。在操作審計日志中,即使是同一個 RAM 角色執行的操作,也可以根據不同的 長度為 2~64 個字符,可包含英文字母、數字和特殊字符 | alice |
ExternalId | string | 否 | 角色外部 ID。 該參數為外部提供的用于表示角色的參數信息,主要功能是防止混淆代理人問題。更多信息,請參見使用 ExternalId 防止混淆代理人問題。 長度為 2~1224 個字符,可包含英文字母、數字和特殊字符 | abcd1234 |
關于公共請求參數的詳情,請參見公共請求參數。
返回參數
示例
正常返回示例
JSON
格式
{
"RequestId": "6894B13B-6D71-4EF5-88FA-F32781734A7F",
"AssumedRoleUser": {
"AssumedRoleId": "34458433936495****:alice",
"Arn": "acs:ram::123456789012****:role/adminrole/alice"
},
"Credentials": {
"SecurityToken": "********",
"Expiration": "2015-04-09T11:52:19Z",
"AccessKeySecret": "wyLTSmsyPGP1ohvvw8xYgB29dlGI8KMiH2pK****",
"AccessKeyId": "STS.L4aBSCSJVMuKg5U1****"
}
}
錯誤碼
HTTP status code | 錯誤碼 | 錯誤信息 | 描述 |
---|---|---|---|
400 | InvalidParameter.DurationSeconds | The Min/Max value of DurationSeconds is 15min/1hr. | DurationSeconds參數不合法,DurationSeconds最小值為15分鐘,最大值為1小時 |
400 | InvalidParameter.ExternalId | The parameter ExternalId is wrongly formed. | 參數ExternalId不合法 |
400 | InvalidParameter.RoleArn | The parameter RoleArn is wrongly formed. | 參數RoleArn的格式錯誤 |
400 | InvalidParameter.RoleSessionName | The parameter RoleSessionName is wrongly formed. | 參數RoleSessionName格式錯誤。 |
400 | InvalidParameter.SerialNumber | The parameter SerialNumber is wrongly formed. | - |
400 | InvalidParameter.TokenCode | The parameter TokenCode is wrongly formed. | - |
400 | InvalidParameter.PolicyGrammar | The parameter Policy has not passed grammar check. | 參數Policy語法格式檢查未通過。 |
400 | InvalidParameter.PolicySize | The size of Policy must be smaller than 2048 bytes. | Policy參數不合法,Policy長度必須小于2048字節。 |
400 | InvalidParameter.ContentType | The ContentType request header must be either "application/json" or "application/x-www-form-urlencoded". | - |
403 | NoPermission | You are not authorized to do this action. You should be authorized by RAM. | - |
403 | AuthenticationFail.ApiUsername | The specified api username is not legal. | - |
403 | AuthenticationFail.ApiPassword | The specified api password is not legal. | - |
403 | NoPermission | No permission perform sts:AssumeRole on this Role. Maybe you are not authorized to perform sts:AssumeRole or the specified role does not trust you | - |
403 | NoPermission | Roles may not be assumed by root accounts. | - |
404 | EntityNotExist.Role | The specified Role not exists . | - |
500 | InternalError | STS Server Internal Error happened, please send the RequestId to us. | - |
訪問錯誤中心查看更多錯誤碼。
變更歷史
變更時間 | 變更內容概要 | 操作 |
---|---|---|
2022-09-27 | OpenAPI 錯誤碼發生變更 | 查看變更詳情 |