使用STS临时访问凭证发起请求

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

您可以通过STS服务为其他用户颁发一个临时访问凭证,用户通过临时访问凭证可以在限定的有效期内,以符合策略规定的权限访问Tablestore资源。超过有效期后,该凭证自动失效,无法继续通过该凭证访问Tablestore资源,确保了访问控制的灵活性和时效性。

步骤一:创建RAM用户

  1. 使用阿里云账号(主账号)或RAM管理员登录RAM控制台

  2. 在左侧导航栏,选择身份管理 > 用户

  3. 用户页面,单击创建用户

  4. 创建用户页面的用户账号信息区域,设置用户基本信息。

    • 登录名称:可包含英文字母、数字、半角句号(.)、短划线(-)和下划线(_),最多64个字符。

    • 显示名称:最多包含128个字符或汉字。

    • 标签:单击edit,然后输入标签键和标签值。为RAM用户绑定标签,便于后续基于标签的用户管理。

    说明

    单击添加用户,可以批量创建多个RAM用户。

  5. 访问方式区域,选择OpenAPI调用访问,然后单击确定

  6. 根据界面提示,完成安全验证。

  7. 单击复制,保存访问密钥(AccessKey IDAccessKey Secret)。

    重要

    RAM用户的AccessKey Secret只在创建时显示,不支持查看,请妥善保管。

步骤二:为RAM用户授予请求AssumeRole的权限

创建RAM用户后,您需要授予RAM用户通过扮演角色来调用STS服务的权限。

  1. 单击已创建RAM用户右侧对应的添加权限

  2. 新增授权页面,选择AliyunSTSAssumeRoleAccess系统策略。

    说明

    授予RAM用户调用STS服务AssumeRole接口的固定权限是AliyunSTSAssumeRoleAccess,与后续获取临时访问凭证以及通过临时访问凭证发起Tablestore请求所需权限无关。

    image.png

  3. 单击确认新增授权

步骤三:创建RAM角色

您需要创建RAM角色,用于定义RAM角色被扮演时,可以获得Tablestore服务的哪些访问权限。

  1. 在左侧导航栏,选择身份管理>角色

  2. 单击创建角色,选择可信实体类型为阿里云账号,单击下一步

  3. 创建角色对话框,角色名称填写为RamTablestoreTest选择信任的云账号当前云账号

  4. 单击完成。角色创建完成后,单击关闭

  5. 角色页面,搜索框输入角色名称RamTablestoreTest,然后单击RamTablestoreTest

  6. 单击ARN右侧的复制,保存角色的ARN。

    image

步骤四:为RAM角色授予表格存储的只读权限

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. 策略配置完成后,单击继续编辑基本信息

    5. 基本信息区域,填写策略名称RamTestPolicy,然后单击确定

  2. RAM角色RamTablestoreTest授予自定义权限策略。

    1. 在左侧导航栏,选择身份管理 > 角色

    2. 角色页面,找到目标RAM角色RamTablestoreTest

    3. 单击RAM角色RamTablestoreTest右侧的新增授权

    4. 添加权限页面下的自定义策略页签,选择已创建的自定义权限策略RamTestPolicy

    5. 单击确定

步骤五:使用RAM用户扮演RAM角色获取临时访问凭证

为角色授予只读的权限后,RAM用户需要通过扮演角色来获取临时访问凭证。临时访问凭证包括安全令牌(SecurityToken)、临时访问密钥(AccessKeyIdAccessKeySecret)以及过期时间(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,说明临时访问凭证将在北京时间2024418193340秒之前过期。

  • 临时访问凭证没有明确的使用次数限制。

列出表名称的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 填写表格存储实例名称。
        String instanceName = "yourInstance";
        // yourEndpoint 填写表格存储实例的访问地址。例如 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 IDAccessKey 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。

是否支持同时获取多个临时访问凭证?

支持。发起一次请求仅返回一个临时访问凭证。如果您希望获取多个临时访问凭证,您需要发起多次请求。在有效期内,您可以同时使用获取到的多个临时访问凭证。