全部產品
Search
文件中心

Tablestore:使用STS臨時訪問憑證訪問Table Store

更新時間:Feb 12, 2025

您可以通過STS服務為其他使用者頒發一個臨時訪問憑證,該使用者可使用臨時訪問憑證在有效時間內訪問Tablestore資源。臨時訪問憑證無需透露您的長期密鑰,且超過有效期間後,該憑證自動失效,使您的Tablestore資源訪問更加靈活和安全。

背景資訊

RAM角色是一種虛擬使用者,可以被授予訪問特定資源的許可權。與RAM使用者不同,RAM角色沒有永久身份憑證(登入密碼或存取金鑰),需要被一個可信實體(如RAM使用者)扮演。扮演成功後,可信實體將獲得RAM角色的臨時身份憑證,即安全性權杖(STS Token),使用該安全性權杖就能以RAM角色身份訪問Tablestore。更多資訊,請參見RAM角色概覽

可信實體為阿里雲帳號的RAM角色主要用於解決跨帳號訪問和臨時授權問題。本文以同帳號的RAM使用者扮演RAM角色為例向您介紹如何使用STS臨時訪問憑證發起請求訪問Tablestore資源。

操作步驟

使用STS臨時訪問憑證訪問Tablestore,首先您需要建立一個RAM角色用於被扮演,該角色需要被授予訪問Tablestore的許可權。其次您需要建立一個RAM使用者用來扮演RAM角色,擷取STS臨時訪問憑證。最後您需要使用擷取到的STS臨時訪問憑證發起請求,訪問Tablestore資源。

步驟一:建立RAM角色

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

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

  3. 單擊建立角色,選擇可信實體類型為阿里雲帳號,單擊下一步

  4. 在建立角色對話方塊,填寫角色名稱RamTablestore,設定選擇信任的雲帳號當前雲帳號

  5. 單擊完成。角色建立完成後,單擊關閉

使用STS服務擷取臨時訪問憑證時需要指定RAM角色的ARN,您可以在角色列表中單擊角色名稱進入角色詳情頁,在基本資料地區內找到ARN並複製。

image

步驟二:為RAM角色授予訪問Tablestore許可權

使用預設策略

AliyunOTSFullAccess 為例授予RAM角色訪問Tablestore的許可權。

說明

AliyunOTSFullAccess 擁有Tablestore的完整存取,您也可以選擇以下方式進行授權。

  • 如果需要唯讀許可權,請授予RAM角色 AliyunOTSReadOnlyAccess 許可權。

  • 如果需要唯寫許可權,請授予RAM角色 AliyunOTSWriteOnlyAccess 許可權。

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

  2. 角色頁面,找到目標RAM角色。

  3. 單擊RAM角色右側的新增授權或單擊角色名稱進入角色詳情頁,在許可權管理地區單擊新增授權

  4. 新增授權面板的權限原則地區,搜尋 AliyunOTSFullAccess 並選中。

  5. 單擊確認新增授權

使用自訂策略

  1. 建立自訂權限原則。

    1. 在左側導覽列,選擇許可權管理 > 權限原則

    2. 權限原則頁面,單擊建立權限原則

    3. 建立權限原則頁面,單擊指令碼編輯,並在輸入框中編寫指令碼,單擊確定

      以下樣本指令碼授予訪問單個執行個體的許可權,您可以根據需要自訂策略指令碼,例如表和API層級的許可權控制或基於情境(IP、訪問時間限制等)的許可權控制。關於RAM Policy的更多資訊,請參見自訂RAM Policy
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:instance/your_instance_name*"
          }
        ]
      }
    4. 建立權限原則對話方塊,填寫策略名稱稱,例如 TestRAMPolicy,單擊確定

  1. 為RAM角色授予自訂權限原則。

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

    2. 角色頁面,找到目標RAM角色。

    3. 單擊RAM角色右側的新增授權或單擊角色名稱進入角色詳情頁,在許可權管理地區單擊新增授權

    4. 新增授權面板的權限原則地區,搜尋並選中已建立的自訂權限原則。

    5. 單擊確認新增授權

您可以在角色列表單擊角色名稱進入角色詳情頁,在許可權管理頁簽下查看被授權的權限原則。

image

步驟三:建立RAM使用者

建立一個RAM使用者用於扮演RAM角色。

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

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

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

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

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

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

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

    說明

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

  5. 訪問方式地區,選中使用永久AccessKey訪問,單擊確定

    說明

    如果需要使用RAM使用者登入和訪問阿里雲控制台,請選中控制台訪問

  6. 單擊操作列的複製,儲存RAM使用者資訊。您也可以單獨複製AccessKey ID和AccessKey Secret。

    重要

    RAM使用者的AccessKey Secret只在建立時顯示,頁面關閉後將無法查看,請及時儲存並妥善保管。

步驟四:為RAM使用者授予請求AssumeRole的許可權

扮演RAM角色需要授予RAM使用者請求AssumeRole的許可權

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

  2. 使用者頁面,找到目標RAM使用者。

  3. 單擊RAM使用者右側的新增授權或單擊使用者名稱稱進入使用者詳情頁,在許可權管理頁簽單擊新增授權

  4. 新增授權面板的權限原則地區,搜尋 AliyunSTSAssumeRoleAccess 並選中。

  5. 單擊確認新增授權

步驟五:使用RAM使用者扮演RAM角色擷取臨時訪問憑證

在訪問資源之前,您需要使用RAM使用者扮演RAM角色擷取臨時訪問憑證,臨時訪問憑證只能在憑證有效期間內使用。

如果您想在OpenAPI門戶直接調用AssumeRole介面擷取臨時訪問憑證,請參見調用AssumeRole介面

準備工作

您需要在Maven專案中引用以下依賴。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>sts20150401</artifactId>
    <version>1.1.6</version>
</dependency>

範例程式碼

以下範例程式碼使用RAM使用者扮演RAM角色擷取STS臨時訪問憑證並列印到控制台,憑證有效期間是1個小時。

運行代碼前請將RAM使用者的AccessKey以及RAM角色的ARN配置到系統內容變數,配置方法請參見配置環境變數
STS服務存取點(Endpoint)列表請參見服務存取點
import com.aliyun.sts20150401.models.AssumeRoleResponse;
import com.aliyun.tea.*;

public class AssumeRoleSample {
    public static com.aliyun.sts20150401.Client createClient() throws Exception {
        // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint,STS 服務存取點
        config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.sts20150401.Client(config);
    }

    public static void main(String[] args) throws Exception {
        com.aliyun.sts20150401.Client client = AssumeRoleSample.createClient();
        com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
                // 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
                .setDurationSeconds(3600L)
                // 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN,即 RAM 角色的 ARN。
                .setRoleArn(System.getenv("TABLESTORE_STS_ROLE_ARN"))
                // 必填,自訂角色會話名稱,用來區分不同的令牌。
                .setRoleSessionName("RAMTablestore");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 擷取 STS 臨時訪問憑證並列印,請妥善保管臨時訪問憑證。
            AssumeRoleResponse response = client.assumeRoleWithOptions(assumeRoleRequest, runtime);
            System.out.println("Expiration: " + response.getBody().getCredentials().getExpiration());
            System.out.println("Access Key Id: " + response.getBody().getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getBody().getCredentials().getAccessKeySecret());
            System.out.println("Security Token: " + response.getBody().getCredentials().getSecurityToken());
        } 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);
        }
    }
}

如果您想瞭解更多語言的STS SDK及程式碼範例,請參見STS SDK概覽

步驟六:使用臨時訪問憑證訪問Tablestore

準備工作

  1. Table Store控制台建立執行個體和資料表。

  2. 擷取執行個體名稱、執行個體訪問地址、地區ID。地區列表請參見地區

  3. 在Maven專案中添加以下依賴。

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>tablestore</artifactId>
        <version>5.17.2</version>
    </dependency>     

寬表模型

使用寬表模型時,您需要使用STS臨時訪問憑證初始化Tablestore Client並發起請求。

運行代碼前請替換代碼內的執行個體資訊,並將STS臨時訪問憑證配置到系統內容變數,配置方法請參見配置環境變數

V4簽名(推薦)

以下Java範例程式碼使用V4簽名初始化Tablestore Client,並擷取執行個體下的所有資料表名稱。

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.*;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

public class InitClientV4 {
    public static void main(String[] args) {
        // yourRegion 填寫您的執行個體所在地區,如 cn-hangzhou
        final String region = "yourRegion";
        // yourInstanceName 填寫您的執行個體名稱
        final String instanceName = "yourInstanceName";
        // yourEndpoint 填寫您的執行個體訪問地址
        final String endpoint = "yourEndpoint";
        // 擷取系統變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String secretAccessKey = System.getenv("TABLESTORE_SESSION_TOKEN");

        // 構造 V4 簽名
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, secretAccessKey);
        V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
        CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

        // 初始化 Tablestore Client
        SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

        /*
        // 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
        SyncClient client = new SyncClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */

        // 列出執行個體下的資料表列表並列印到控制台
        ListTableResponse listTableResponse = client.listTable();
        listTableResponse.getTableNames().forEach(System.out::println);

        // 關閉 Tablestore Client
        client.shutdown();
    }
}

V2簽名

以下Java範例程式碼使用V2簽名初始化Tablestore Client,並擷取執行個體下的所有資料表名稱。

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

public class InitClientV2 {
    public static void main(String[] args) {
        // yourInstanceName 填寫您的執行個體名稱
        final String instanceName = "yourInstanceName";
        // yourEndpoint 填寫您的執行個體訪問地址
        final String endpoint = "yourEndpoint";
        // 擷取系統變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String secretAccessKey = System.getenv("TABLESTORE_SESSION_TOKEN");

        // 構造 V2 簽名
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, secretAccessKey);
        CredentialsProvider provider = new DefaultCredentialProvider(credentials);

        // 初始化 Tablestore Client
        SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

        /*
        // 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
        SyncClient client = new SyncClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */

        // 列出執行個體下的資料表列表並列印到控制台
        ListTableResponse listTableResponse = client.listTable();
        listTableResponse.getTableNames().forEach(System.out::println);

        // 關閉 Tablestore Client
        client.shutdown();
    }
}

時序模型

使用時序模型時,您需要使用STS臨時訪問憑證初始化Timeseries Client並發起請求。

運行代碼前請替換代碼內的執行個體資訊,並將STS臨時訪問憑證配置到系統內容變數,配置方法請參見配置環境變數

V4簽名(推薦)

以下Java範例程式碼使用V4簽名初始化Timeseries Client,並擷取執行個體下的所有時序表名稱。

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;

public class InitTimeseriesClientV4 {
    public static void main(String[] args) {
        // yourRegion 填寫您的執行個體所在地區,如 cn-hangzhou
        final String region = "yourRegion";
        // yourInstanceName 填寫您的執行個體名稱
        final String instanceName = "yourInstanceName";
        // yourEndpoint 填寫您的執行個體訪問地址
        final String endpoint = "yourEndpoint";
        // 擷取系統變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String secretAccessKey = System.getenv("TABLESTORE_SESSION_TOKEN");

        // 構造 V4 簽名
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, secretAccessKey);
        V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
        CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);

        // 初始化 Tablestore TimeSeries Client
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

        /*
        // 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */

        // 列出執行個體下的時序表列表並列印到控制台
        ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
        listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);

        // 關閉 Tablestore Client
        client.shutdown();
    }
}

V2簽名

以下Java範例程式碼使用V2簽名初始化Timeseries Client,並擷取執行個體下的所有時序表名稱。

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;

public class InitTimeseriesClientV2 {
    public static void main(String[] args) {
        // yourInstanceName 填寫您的執行個體名稱
        final String instanceName = "yourInstanceName";
        // yourEndpoint 填寫您的執行個體訪問地址
        final String endpoint = "yourEndpoint";
        // 擷取系統變數裡的 STS AccessKey ID、STS AccessKey Secret 和 STS Token
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String secretAccessKey = System.getenv("TABLESTORE_SESSION_TOKEN");

        // 構造 V2 簽名
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, secretAccessKey);
        CredentialsProvider provider = new DefaultCredentialProvider(credentials);

        // 初始化 Tablestore TimeSeries Client
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));

        /*
        // 您可以通過指定 ClientConfiguration 修改預設配置項,以下樣本為部分自訂配置項。
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // 設定建立串連的逾時時間,單位為毫秒。
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // 設定 socket 逾時時間,單位為毫秒。
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // 設定重試策略,如果不設定,則採用預設的重試策略。
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */

        // 列出執行個體下的時序表列表並列印到控制台
        ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
        listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);

        // 關閉 Tablestore Client
        client.shutdown();
    }
}

配置環境變數

直接在代碼中儲存訪問憑證容易導致資訊泄露,請按以下操作將訪問憑證儲存在系統內容變數中。

Windows

# 配置 RAM 使用者的 AccessKey ID
setx ALIBABA_CLOUD_ACCESS_KEY_ID your_access_key_id /m
# 配置 RAM 使用者的 AccessKey Secret
setx ALIBABA_CLOUD_ACCESS_KEY_SECRET your_access_key_secret /m
# 配置 RAM 角色的 ARN
setx TABLESTORE_STS_ROLE_ARN your_ram_role_arn /m
# 配置臨時訪問憑證 STS AccessKey ID
setx TABLESTORE_ACCESS_KEY_ID your_sts_access_key_id /m
# 配置臨時訪問憑證 STS AccessKey Secret
setx TABLESTORE_ACCESS_KEY_SECRET your_sts_access_key_secret /m
# 配置臨時訪問憑證 STS Token
setx TABLESTORE_SESSION_TOKEN your_sts_token /m

macOS/Linux/Unix

# 配置 RAM 使用者的 AccessKey ID
export ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id
# 配置 RAM 使用者的 AccessKey Secret
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret
# 配置 RAM 角色的 ARN
export TABLESTORE_STS_ROLE_ARN=your_ram_role_arn
# 配置臨時訪問憑證 STS AccessKey ID
export TABLESTORE_ACCESS_KEY_ID=your_sts_access_key_id
# 配置臨時訪問憑證 STS AccessKey Secret
export TABLESTORE_ACCESS_KEY_SECRET=your_sts_access_key_secret
# 配置臨時訪問憑證 STS Token
export TABLESTORE_SESSION_TOKEN=your_sts_token

常見問題

問:報錯 You are not authorized to do this action. You should be authorized by RAM. 如何處理?

使用RAM使用者扮演RAM角色擷取臨時訪問憑證時,必須使用RAM使用者的存取金鑰(AccessKey ID和AccessKey Secret),不能使用阿里雲帳號的存取金鑰。

問:報錯 The Min/Max value of DurationSeconds is 15min/1hr. 如何處理?

報錯原因是設定的臨時訪問憑證有效期間超出允許的時間範圍。請遵循以下原則設定有效期間:

  • 如果沒有自訂角色最大會話時間,則當前角色會話時間預設值為3600秒。此時,通過durationSeconds設定的臨時訪問憑證有效時間允許的最小值為900秒,最大值為3600秒。

  • 如果自訂了角色最大會話時間,則通過durationSeconds設定的臨時訪問憑證有效時間的最小值為900秒,最大值以角色最大會話時間為準。角色會話時間允許設定的取值範圍為3600秒~43200秒。

您可以在RAM控制台查看角色的最大會話時間。

問:報錯 The security token you provided is invalid. 如何處理?

請確保完整填寫擷取到的SecurityToken,並檢查環境變數是否正確配置。

問:是否支援同時擷取多個臨時訪問憑證?

支援。發起一次請求僅返回一個臨時訪問憑證。如果您希望擷取多個臨時訪問憑證,您需要發起多次請求。在有效期間內,您可以同時使用擷取到的多個臨時訪問憑證。

問:使用SDK訪問Table Store時出現 Request denied by instance ACL policies 異常該怎麼辦?

用戶端所用的網路類型不符合執行個體的網路訪問要求。您需要在Table Store控制台的執行個體管理頁面的網路管理頁簽設定允許網路類型。更多資訊,請參見使用SDK訪問Table Store時出現Request denied by instance ACL policies異常