全部產品
Search
文件中心

Intelligent Media Services:建立RAM角色並進行STS授權

更新時間:Dec 03, 2025

在移動端或Web端訪問服務時,您可以使用STS臨時授權,可以有效避免RAM使用者密碼泄露導致的安全風險。通過閱讀本文,您可以瞭解STS授權的方法。

背景資訊

由於RAM使用者的許可權啟用後一直有效,一旦AccessKey泄露,可能會導致安全風險。建議您使用STS臨時授權,通過自訂到期時間,並指定相對複雜的策略對不同的RAM角色進行限制,採取許可權最小化原則,提高服務訪問的安全性。

步驟一:建立RAM使用者並授予AssumeRole介面的調用許可權

  1. 使用阿里雲帳號(主帳號)或Resource Access Management員登入RAM控制台

  2. 在左側導覽列,選擇身份管理 > 使用者

  3. 使用者頁面,單擊建立使用者。 

    image

  4. 建立使用者頁面的使用者帳號資訊地區,設定使用者基本資料。

    • 登入名稱稱:可包含英文字母、數字、半形句號(.)、短劃線(-)和底線(_),最多64個字元。

    • 顯示名稱:最多包含128個字元或漢字。

    • 標籤:單擊edit,然後輸入標籤鍵和標籤值。為RAM使用者綁定標籤,便於後續基於標籤的使用者管理。

    說明

    單擊添加使用者,可以大量建立多個RAM使用者。

  5. 訪問方式地區,選擇訪問方式,然後設定對應參數。

  6. 單擊確定並完成手機驗證,系統會自動產生RAM使用者的AccessKey。

    001

  7. 單擊操作列的複製,儲存使用者登入名稱稱、登入密碼、AccessKey等使用者資訊。

    重要

    請務必儲存好登入密碼和AccessKey資訊(AccessKey ID和AccessKey Secret),否則後續無法查詢。

  8. 返回使用者列表頁面,單擊已建立RAM使用者操作列的添加許可權

  9. 新增授權面板,為RAM使用者添加許可權。

    1. 選擇授權應用範圍。

      資源範圍選擇帳號層級,智能媒體服務暫不支援指定資源群組授權。關於資源群組詳情,請參見資來源目錄、資源群組與標籤的區別和聯絡

    2. 指定授權主體。

      授權主體即需要添加許可權的RAM使用者。

    3. 選擇權限原則。

      系統策略下輸入框中輸入AliyunSTS,選擇權限原則為AliyunSTSAssumeRoleAccess

    4. 單擊確認新增授權,完成使用者授權。

步驟二:建立RAM角色並授予IMS操作許可權

  1. 使用Resource Access Management員登入RAM控制台

  2. 在左側導覽列,選擇身份管理 > 角色

  3. 角色頁面,單擊建立角色

    image

  4. 建立角色頁面,選擇信任主體類型雲帳號,然後設定具體的阿里雲帳號,最後單擊確定

    image

    • 當前雲帳號:當您允許當前阿里雲帳號下的所有RAM使用者和RAM角色扮演當前正在建立的RAM角色時,您可以選擇當前雲帳號

    • 其他雲帳號:當您允許其他阿里雲帳號下的所有RAM使用者和RAM角色扮演當前正在建立的RAM角色時,您可以選擇其他雲帳號,然後輸入其他阿里雲帳號(主帳號)ID。該項主要針對跨阿里雲帳號的資源授權訪問情境,相關教程,請參見跨阿里雲帳號訪問資源您可以在安全設定頁面查看阿里雲帳號(主帳號)ID。

  5. (可選)如果您想設定RAM角色只能被可信阿里雲帳號下的指定RAM使用者或RAM角色扮演,您可以單擊切換編輯器,在編輯器中修改RAM角色的信任策略。

    編輯器支援可視化編輯和指令碼編輯兩種模式,您可以任選其一。以下樣本表示當前建立的RAM角色只能被當前阿里雲帳號(AccountID=100******0719)下的RAM使用者Alice扮演。

    • 可視化編輯

      主體中指定具體的RAM使用者名稱稱。

      image

      image

    • 指令碼編輯

      PrincipalRAM欄位中指定具體的RAM使用者。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "RAM": "acs:ram::100******0719:user/Alice"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }

  6. 新增授權面板,為RAM角色授權。

    1. 選擇授權範圍。

      授權範圍選擇帳號層級,智能媒體服務暫不支援指定資源群組授權。關於資源群組詳情,請參見資來源目錄、資源群組與標籤的區別和聯絡

    2. 指定授權主體。

      授權主體即需要授權的RAM角色,系統會自動填入當前的RAM角色,您也可以添加其他RAM角色。

    3. 選擇權限原則。

      • 使用系統策略

        系統策略下輸入框中輸入AliyunICE,根據實際需求選擇篩選出的權限原則。

        權限原則描述OpenAPI調用許可權
        AliyunICEFullAccess管理和操作IMS所有資源的許可權。可以調用智能媒體服務所有的OpenAPI。
        AliyunICEReadOnlyAccess唯讀訪問IMS所有資源的許可權。可以調用智能媒體服務所有讀取類的OpenAPI,例如Get、Describe、Search、List開頭的介面。
      • 使用自訂策略

        自訂策略下根據實際需求選擇權限原則。如果沒有可用的自訂權限原則, 您可以建立權限原則,詳情請參見建立自訂權限原則自訂策略樣本

      說明
      • 每次最多綁定5條策略,如需綁定更多策略,請分次操作。

      • 為控制風險,建議採用最小許可權原則。

      • 如果需要使用智能媒體服務端側(iOS或Android)SDK,由於需要將檔案上傳到OSS上,因此需要增加OSS的許可權,即AliyunOSSFullAccess,或者您可以根據實際情況自訂OSS的權限原則。

    4. 單擊確認新增授權,完成角色授權。

步驟三:使用建立的RAM使用者調用AssumeRole介面擷取臨時AccessKey

  1. 下載並整合STS SDK。下載地址,請參見STS SDK概覽

  2. 調用AssumeRole擷取扮演角色的臨時身份憑證。

    本文以Java範例程式碼舉例說明,其他端代碼請參見SDK範例程式碼

    Java

    import com.aliyun.tea.*;
    
    public class Sample {
    
        /**
         * <b>description</b> :
         * <p>使用憑據初始化帳號Client</p>
         * @return Client
         * 
         * @throws Exception
         */
        public static com.aliyun.sts20150401.Client createClient() throws Exception {
            // 工程代碼建議使用更安全的無AK方式,憑據配置方式請參見:https://www.alibabacloud.com/help/document_detail/378657.html。
            com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
            com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                    .setCredential(credential);
            // Endpoint 請參考 https://api.aliyun.com/product/Sts
            config.endpoint = "sts.us-west-1.aliyuncs.com";
            return new com.aliyun.sts20150401.Client(config);
        }
    
        public static void main(String[] args_) throws Exception {
    
            com.aliyun.sts20150401.Client client = Sample.createClient();
            // AssumeRole API 請求參數:RoleArn, RoleSessionName, Policy, and DurationSeconds
            // RoleArn 需要在 RAM 控制台上擷取
            com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
                    .setDurationSeconds(3600L)
                    // 定製你的policy
                    .setPolicy("{\n" +
                            "  \"Version\": \"1\",\n" +
                            "  \"Statement\": [\n" +
                            "    {\n" +
                            "      \"Action\": \"ice:*\",\n" +
                            "      \"Resource\": \"*\",\n" +
                            "      \"Effect\": \"Allow\"\n" +
                            "    }\n" +
                            "  ]\n" +
                            "}")
                    // RoleArn 需要在 RAM 控制台上擷取
                    .setRoleArn("<role-arn>")
                    // RoleSessionName 是臨時Token的會話名稱,自己指定用於標識你的使用者,主要用於審計,或者用於區分Token頒發給誰
                    // 但是注意RoleSessionName的長度和規則,不要有空格,只能有'-' '_' 字母和數字等字元
                    // 具體規則請參考API文檔中的格式要求
                    .setRoleSessionName("session-name");// 自訂即可
            com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
            try {
                com.aliyun.sts20150401.models.AssumeRoleResponse resp = client.assumeRoleWithOptions(assumeRoleRequest, runtime);
                com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
            } catch (TeaException error) {
                // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                // 錯誤 message
                System.out.println(error.getMessage());
                // 診斷地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            } catch (Exception _error) {
                TeaException error = new TeaException(_error.getMessage(), _error);
                // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
                // 錯誤 message
                System.out.println(error.getMessage());
                // 診斷地址
                System.out.println(error.getData().get("Recommend"));
                com.aliyun.teautil.Common.assertAsString(error.message);
            }
        }
    }

相關參考

AssumeRole - 擷取扮演角色的臨時身份憑證