全部產品
Search
文件中心

Tablestore:使用STS臨時訪問憑證發起請求

更新時間:Dec 27, 2024

您可以通過STS服務為其他使用者頒發一個臨時訪問憑證,使用者通過臨時訪問憑證可以在限定的有效期間內,以符合策略規定的許可權訪問Tablestore資源。超過有效期間後,該憑證自動失效,無法繼續通過該憑證訪問Tablestore資源,確保了存取控制的靈活性和時效性。

步驟一:建立RAM使用者

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

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

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

    image

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

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

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

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

    說明

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

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

  6. 儲存AccessKey資訊對話方塊,單擊確定

  7. 單擊操作列的複製,儲存存取金鑰(AccessKey ID和AccessKey Secret)。

    重要

    RAM使用者的AccessKey Secret只在建立時顯示,不支援查看,請妥善保管。

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

建立RAM使用者後,您需要授予RAM使用者通過扮演角色來調用STS服務的許可權。

  1. 單擊已建立RAM使用者右側對應的添加权限

  2. 新增授權面板的權限原則地區,選擇AliyunSTSAssumeRoleAccess系統策略。

    說明

    授予RAM使用者調用STS服務AssumeRole介面的固定許可權是AliyunSTSAssumeRoleAccess,與後續擷取臨時訪問憑證以及通過臨時訪問憑證發起Tablestore請求要求的權限無關。

    image

  3. 單擊確認新增授權

  4. 單擊關閉

步驟三:建立RAM角色

您需要建立RAM角色,用於定義RAM角色被扮演時,可以獲得Tablestore服務的哪些存取權限。

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

  2. 單擊创建角色,選擇可信實體類型為阿里云账号,單擊下一步

  3. 创建角色對話方塊,填寫角色名称RamTablestoreTest,設定选择信任的云账号当前云账号

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

  5. 角色頁面,搜尋方塊輸入角色名稱RamTablestoreTest,然後單擊RamTablestoreTest

  6. 單擊ARN右側的複製,儲存角色的ARN。

    image

步驟四:為RAM角色授予Table Store的唯讀許可權

為RAM角色附加一個或多個權限原則,明確RAM角色在被扮演時所能擁有的Tablestore資源存取權限。例如,如果希望RAM使用者在扮演該角色後只能從Tablestore讀取資料,則需要為角色添加唯讀許可權的策略。

  1. 建立自訂權限原則。

    1. 在左側導覽列,選擇权限管理>权限策略

    2. 权限策略頁面,單擊创建权限策略

    3. 创建权限策略頁面,單擊指令碼編輯,填寫策略配置,然後單擊確定

      警告

      以下樣本僅供參考。您需要根據實際需求配置更細粒度的授權策略,防止出現許可權過大的風險。更細粒度的授權策略配置,請參見自訂RAM Policy

      具體配置樣本如下:

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "ots:BatchGet*",
              "ots:Describe*",
              "ots:Get*",
              "ots:List*",
              "ots:Consume*",
              "ots:Search",
              "ots:ComputeSplitPointsBySize"
            ],
            "Resource": [
              "acs:ots:*:*:instance/ram-test-app*"
            ],
            "Condition": {}
          }
        ]
      }     
    4. 建立權限原則對話方塊,填寫策略名稱RamTestPolicy,然後單擊確定

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

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

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

    3. 單擊RAM角色RamTablestoreTest右側的新增授權

    4. 新增授權面板的權限原則地區,選擇已建立的自訂權限原則RamTestPolicy

    5. 單擊確認新增授權

    6. 單擊關閉

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

為角色授予唯讀許可權後,RAM使用者需要通過扮演角色來擷取臨時訪問憑證。臨時訪問憑證包括安全性權杖(SecurityToken)、臨時存取金鑰(AccessKeyId和AccessKeySecret)以及到期時間(Expiration)。

使用STS SDK

您可以使用STS SDK來擷取臨時訪問憑證。

Java

本文以Java為例,說明如何使用STS SDK擷取臨時訪問憑證。

說明

SDK 安裝資訊

  • SDK 包名稱:com.aliyun/sts20150401

  • SDK包版本:1.1.4

  • SDK 包管理平台:maven

  • SDK 安裝命令:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>sts20150401</artifactId>
      <version>1.1.4</version>
    </dependency>
import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化帳號Client</p>
     *
     * @return Client
     * @throws Exception
     */
    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 請參考 https://api.aliyun.com/product/Sts
        config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.sts20150401.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.sts20150401.Client client = Sample.createClient();
        com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
                // 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
                .setDurationSeconds(3600L)
                // 角色外部 ID。該參數為外部提供的用於表示角色的參數資訊,主要功能是防止混淆代理人問題。
                //.setExternalId(null)
                // 為STS Token額外添加的一個權限原則,進一步限制STS Token的許可權。
                //.setPolicy(null)
                // 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN。即步驟3產生的RAM角色的RamRoleArn。
                .setRoleArn(System.getenv("TABLESTORE_STS_ROLE_ARN"))
                // 自訂角色會話名稱,用來區分不同的令牌。
                .setRoleSessionName("yourRoleSessionName");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 複製代碼運行請自行列印 API 的傳回值
            client.assumeRoleWithOptions(assumeRoleRequest, runtime);
        } 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);
        }
    }
}

Go

本文以Go為例,說明如何使用STS SDK擷取臨時訪問憑證。

說明

SDK 安裝資訊

  • SDK 包名稱:github.com/alibabacloud-go/sts-20150401/v2

  • SDK包版本:v2.0.2

  • SDK 包管理平台:github

  • SDK 安裝命令:

    go get github.com/alibabacloud-go/sts-20150401/v2
package main

import (
  "encoding/json"
  "strings"
  "fmt"
  "os"
  sts20150401  "github.com/alibabacloud-go/sts-20150401/v2/client"
  openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  util  "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)


// Description:
// 
// 使用AK&SK初始化帳號Client
// 
// @return Client
// 
// @throws Exception
func CreateClient () (_result *sts20150401.Client, _err error) {
  // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
  config := &openapi.Config{
    // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  // Endpoint 請參考 https://api.aliyun.com/product/Sts
  config.Endpoint = tea.String("sts.cn-hangzhou.aliyuncs.com")
  _result = &sts20150401.Client{}
  _result, _err = sts20150401.NewClient(config)
  return _result, _err
}

func _main (args []*string) (_err error) {
  client, _err := CreateClient()
  if _err != nil {
    return _err
  }

	assumeRoleRequest := &sts20150401.AssumeRoleRequest{
    // 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN。即步驟3產生的RAM角色的RamRoleArn。
    RoleArn: tea.String(os.Getenv("TABLESTORE_STS_ROLE_ARN")),
    // 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
    DurationSeconds: tea.Int64(3600),
    // 為STS Token額外添加的一個權限原則,進一步限制STS Token的許可權。
    //Policy: ,
    // 自訂角色會話名稱,用來區分不同的令牌。
    RoleSessionName: tea.String("yourRoleSessionName"),
    // 角色外部 ID。該參數為外部提供的用於表示角色的參數資訊,主要功能是防止混淆代理人問題
    //ExternalId: ,
}
  runtime := &util.RuntimeOptions{}
  tryErr := func()(_e error) {
    defer func() {
      if r := tea.Recover(recover()); r != nil {
        _e = r
      }
    }()
    // 複製代碼運行請自行列印 API 的傳回值
    _, _err = client.AssumeRoleWithOptions(assumeRoleRequest, runtime)
    if _err != nil {
      return _err
    }

    return nil
  }()

  if tryErr != nil {
    var error = &tea.SDKError{}
    if _t, ok := tryErr.(*tea.SDKError); ok {
      error = _t
    } else {
      error.Message = tea.String(tryErr.Error())
    }
    // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
    // 錯誤 message
    fmt.Println(tea.StringValue(error.Message))
    // 診斷地址
    var data interface{}
    d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
    d.Decode(&data)
    if m, ok := data.(map[string]interface{}); ok {
      recommend, _ := m["Recommend"]
      fmt.Println(recommend)
    }
    _, _err = util.AssertAsString(error.Message)
    if _err != nil {
      return _err
    }
  }
  return _err
}


func main() {
  err := _main(tea.StringSlice(os.Args[1:]))
  if err != nil {
    panic(err)
  }
}

Python

本文以Python為例,說明如何使用STS SDK擷取臨時訪問憑證。

說明

SDK 安裝資訊

  • SDK 包名稱:alibabacloud_sts20150401

  • SDK包版本:1.1.4

  • SDK 包管理平台:pypi

  • SDK 安裝命令:

    pip install alibabacloud_sts20150401==1.1.4
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_sts20150401.client import Client as Sts20150401Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_sts20150401 import models as sts_20150401_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Sts20150401Client:
        """
        使用AK&SK初始化帳號Client
        @return: Client
        @throws Exception
        """
        # 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        config = open_api_models.Config(
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。,
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。,
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # Endpoint 請參考 https://api.aliyun.com/product/Sts
        config.endpoint = f'sts.cn-hangzhou.aliyuncs.com'
        return Sts20150401Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        assume_role_request = sts_20150401_models.AssumeRoleRequest(
            # 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
            duration_seconds=3600,
            # 角色外部ID。該參數為外部提供的用於表示角色的參數資訊,主要功能是防止混淆代理人問題。
            # external_id=None,
            # 為STS Token額外添加的一個權限原則,進一步限制STS Token的許可權。
            # policy=None,
            # 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN。即步驟3產生的RAM角色的RamRoleArn。
            role_arn=os.environ['TABLESTORE_STS_ROLE_ARN'],
            # 自訂角色會話名稱,用來區分不同的令牌。
            role_session_name="yourRoleSessionName"
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            client.assume_role_with_options(assume_role_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        assume_role_request = sts_20150401_models.AssumeRoleRequest()
        runtime = util_models.RuntimeOptions()
        try:
            # 複製代碼運行請自行列印 API 的傳回值
            await client.assume_role_with_options_async(assume_role_request, runtime)
        except Exception as error:
            # 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            # 錯誤 message
            print(error.message)
            # 診斷地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

Node.js

本文以Node.js為例,說明如何使用STS SDK擷取臨時訪問憑證。

說明

SDK 安裝資訊

  • SDK 包名稱:@alicloud/sts20150401

  • SDK包版本:1.1.4

  • SDK 包管理平台:npm

  • SDK 安裝命令:

    npm install @alicloud/sts20150401@1.1.4
'use strict';
const Sts20150401 = require('@alicloud/sts20150401');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');

class Client {

  /**
   * 使用AK&SK初始化帳號Client
   * @return Client
   * @throws Exception
   */
  static createClient() {
    // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
    let config = new OpenApi.Config({
      // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
      accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
      accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
    });
    // Endpoint 請參考 https://api.aliyun.com/product/Sts
    config.endpoint = `sts.cn-hangzhou.aliyuncs.com`;
    return new Sts20150401.default(config);
  }

  static async main(args) {
    let client = Client.createClient();
    let assumeRoleRequest = new Sts20150401.AssumeRoleRequest({
        // 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
        durationSeconds: 3600,
        // 角色外部ID。該參數為外部提供的用於表示角色的參數資訊,主要功能是防止混淆代理人問題。
        //externalId: null,
        // 為STS Token額外添加的一個權限原則,進一步限制STS Token的許可權。
        //policy: null,
        // 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN。即步驟3產生的RAM角色的RamRoleArn。
        roleArn: process.env.TABLESTORE_STS_ROLE_ARN,
        //自訂角色會話名稱,用來區分不同的令牌。
        roleSessionName: 'yourRoleSessionName'
     });
    let runtime = new Util.RuntimeOptions({ });
    try {
      // 複製代碼運行請自行列印 API 的傳回值
      await client.assumeRoleWithOptions(assumeRoleRequest, runtime);
    } catch (error) {
      // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
      // 錯誤 message
      console.log(error.message);
      // 診斷地址
      console.log(error.data["Recommend"]);
      Util.default.assertAsString(error.message);
    }    
  }

}

exports.Client = Client;
Client.main(process.argv.slice(2));

PHP

本文以PHP為例,說明如何使用STS SDK擷取臨時訪問憑證。

說明

SDK 安裝資訊

  • SDK 包名稱:alibabacloud/sts-20150401

  • SDK包版本:1.1.4

  • SDK 包管理平台:packagist

  • SDK 安裝命令:

    composer require alibabacloud/sts-20150401 1.1.4
<?php

namespace AlibabaCloud\SDK\Sample;

use AlibabaCloud\SDK\Sts\V20150401\Sts;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Sts\V20150401\Models\AssumeRoleRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;

class Sample {

    /**
     * 使用AK&SK初始化帳號Client
     * @return Sts Client
     */
    public static function createClient(){
        // 工程代碼泄露可能會導致 AccessKey 泄露,並威脅帳號下所有資源的安全性。以下程式碼範例僅供參考。
        $config = new Config([
            // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID。
            "accessKeyId" => getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
            // 必填,請確保代碼運行環境設定了環境變數 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
            "accessKeySecret" => getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
        ]);
        // Endpoint 請參考 https://api.aliyun.com/product/Sts
        $config->endpoint = "sts.cn-hangzhou.aliyuncs.com";
        return new Sts($config);
    }

    /**
     * @param string[] $args
     * @return void
     */
    public static function main($args){
        $client = self::createClient();
        $assumeRoleRequest = new AssumeRoleRequest([
            // 臨時訪問憑證的有效時間,單位為秒。最小值為900,最大值以當前角色設定的最大會話時間為準。當前角色最大會話時間取值範圍為3600秒~43200秒,預設值為3600秒。
            "durationSeconds" => 3600,
            // 自訂角色會話名稱,用來區分不同的令牌。
            "roleSessionName" => "yourRoleSessionName",
            // 必填,請確保代碼運行環境設定了環境變數 TABLESTORE_STS_ROLE_ARN。即步驟3產生的RAM角色的RamRoleArn。
            "roleArn" =>  getenv("TABLESTORE_STS_ROLE_ARN"),
        ]);
        $runtime = new RuntimeOptions([]);
        try {
            // 複製代碼運行請自行列印 API 的傳回值
            $client->assumeRoleWithOptions($assumeRoleRequest, $runtime);
        }
        catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            // 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
            // 錯誤 message
            var_dump($error->message);
            // 診斷地址
            var_dump($error->data["Recommend"]);
            Utils::assertAsString($error->message);
        }
    }
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
    require_once $path;
}
Sample::main(array_slice($argv, 1));

關於更多語言的STS SDK樣本,請參見STS SDK概覽。關於STS服務存取點的更多資訊,請參見服務存取點

使用REST API

您可以通過調用STS服務的AssumeRole - 擷取扮演角色的臨時身份憑證介面來擷取臨時訪問憑證。

步驟六:使用STS臨時訪問憑證請求Tablestore列出表名稱

臨時訪問憑證有效期間(Expiration)到期之前,列出表名稱的Java範例程式碼如下:

說明
  • 臨時訪問憑證到期時間格式是UTC,比北京時間晚8小時。例如,臨時訪問憑證到期時間是2024-04-18T11:33:40Z,說明臨時訪問憑證將在北京時間2024年4月18日19時33分40秒之前到期。

  • 臨時訪問憑證沒有明確的使用次數限制。

列出表名稱的Java範例程式碼如下:

import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProviderFactory;
import com.alicloud.openservices.tablestore.core.auth.EnvironmentVariableCredentialsProvider;
import com.alicloud.openservices.tablestore.model.ListTableResponse;

public class StsAccessKeySample {
    public static void main(String[] args) {
        // yourInstance 填寫Table Store執行個體名稱。
        String instanceName = "yourInstance";
        // yourEndpoint 填寫Table Store執行個體的訪問地址。例如 https://yourInstance.cn-hangzhou.ots.aliyuncs.com。
        String endPoint = "yourEndpoint";

        // 強烈建議不要把訪問憑證儲存到工程代碼裡,否則可能導致訪問憑證泄露,威脅您帳號下所有資源的安全。
        // 本程式碼範例以從環境變數中擷取訪問憑證為例。運行本程式碼範例之前,請先配置環境變數:TABLESTORE_ACCESS_KEY_ID、TABLESTORE_ACCESS_KEY_SECRET和TABLESTORE_SESSION_TOKEN。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

        // 建立OTSClient執行個體
        SyncClient client = new SyncClient(endPoint, credentialsProvider, instanceName, null, new ResourceManager(null, null));

        //查詢表名稱
        ListTableResponse listTableResponse = client.listTable();
        listTableResponse.getTableNames().forEach(System.out::println);

        // 關閉OTSClient
        client.shutdown();
    }
}

常見問題

報錯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控制台查看角色最大會話時間。具體步驟,請參見查看RAM角色

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

請確保完整填寫步驟五擷取到的SecurityToken。

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

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