全部產品
Search
文件中心

Object Storage Service:0003-00000301

更新時間:Aug 22, 2026

問題描述

請求被STS Token Policy所拒絕。

問題原因

該報錯是擷取STS Token代碼中的Policy參數的授權問題導致。

問題樣本

比如下面Java擷取Token的Demo代碼所示,其中的Policy設定代表Token的Policy使用權限設定,最終的Token許可權是使用者角色的授權和代碼中Policy許可權的交集:

String roleSessionName = "<session-name>";
String policy = "{\n" +
        "    \"Version\": \"1\", \n" +
        "    \"Statement\": [\n" +
        "        {\n" +
        "            \"Action\": [\n" +
        "                \"oss:*\"\n" +
        "            ], \n" +
        "            \"Resource\": [\n" +
        "                \"acs:oss:*:*:*\" \n" +
        "            ], \n" +
        "            \"Effect\": \"Allow\"\n" +
        "        }\n" +
        "    ]\n" +
        "}";
try {
    // 添加endpoint (直接使用STS endpoint, 前兩個參數留空, 無需添加region ID)
    DefaultProfile.addEndpoint("", "", "Sts", endpoint);
    // 構造default profile (參數留空, 無需添加region ID)
    IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
    // 用profile構造client
    DefaultAcsClient client = new DefaultAcsClient(profile);
    final AssumeRoleRequest request = new AssumeRoleRequest();
    request.setMethod(MethodType.POST);
    request.setRoleArn(roleArn);
    request.setRoleSessionName(roleSessionName);
    request.setPolicy(policy); // 若policy為空白,則使用者將獲得該角色下所有許可權
    request.setDurationSeconds(1000L); // 設定憑證有效時間

解決方案

請結合您調用的OSS介面,檢查您代碼中Policy參數的授權策略,排查Policy中的授權是否正確。更多資訊,請參見使用STS臨時訪問憑證訪問OSS。其中臨時訪問憑證最終擷取的許可權是步驟四:為角色授予上傳檔案的許可權設定的角色許可權和步驟五:擷取臨時訪問憑證中Policy設定許可權的交集。請通過以下樣本檢查您在這兩個步驟中設定的許可權交集。

  • 樣本一

    步驟四設定的角色許可權為AliyunOSSFullAccess系統許可權,步驟五Policy中設定了oss:PutObject許可權,則臨時訪問憑證最終擷取的許可權為oss:PutObject,即僅支援執行向指定Bucket上傳檔案的操作。

  • 樣本二

    步驟四設定的角色許可權為oss:PutObject系統許可權,步驟五Policy中設定了oss:GetObject許可權,則臨時訪問憑證最終未擷取任何許可權,即無法向指定Bucket執行任何操作。