すべてのプロダクト
Search
ドキュメントセンター

Tablestore:STS から取得した一時的なアクセス認証情報を使用してリクエストを開始する

最終更新日:Dec 28, 2024

Security Token Service (STS) を使用して、他のユーザーに一時的なアクセス認証情報を付与できます。その後、他のユーザーは、一時的なアクセス認証情報の有効期間内に、Tablestore リソースにアクセスするために一時的なアクセス認証情報を使用できます。有効期間が終了すると、一時的なアクセス認証情報は失効し、他のユーザーは Tablestore リソースへのアクセスに一時的なアクセス認証情報を使用できなくなります。これにより、柔軟で時間制限のあるアクセス制御が保証されます。

ステップ 1: RAM ユーザーを作成する

  1. 管理者権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーを使用して、RAM コンソールにログオンします。

  2. 左側のナビゲーションペインで、ID > ユーザー を選択します。

  3. ユーザーページで、ユーザーの作成をクリックします。image

  4. ユーザーアカウント情報ユーザーの作成ページのセクションで、次のパラメータを設定します。

    • ログオン名: ログオン名は最大 64 文字で、文字、数字、ピリオド(.)、ハイフン(-)、アンダースコア(_) を使用できます。

    • 表示名: 表示名は最大 128 文字です。

    • タグ: edit アイコンをクリックし、タグキーとタグ値を入力します。RAM ユーザーに 1 つ以上のタグを追加できます。このようにして、タグに基づいて RAM ユーザーを管理できます。

    説明

    ユーザーを追加をクリックして、複数の RAM ユーザーを一度に作成できます。

  5. アクセスモードセクションで、Openapi アクセスを選択し、OK をクリックします。

  6. 画面の指示に従ってセキュリティ検証を完了します。

  7. コピーをクリックして、RAM ユーザーの AccessKey ペアを保存します。

    重要

    RAM ユーザーの AccessKey シークレットは、RAM ユーザーの作成時にのみ取得できます。後続の操作で AccessKey シークレットを照会することはできません。AccessKey シークレットを記録し、機密性を保持してください。

ステップ 2: RAM ユーザーに AssumeRole 操作を呼び出す権限を付与する

RAM ユーザーを作成したら、STS の AssumeRole 操作を呼び出す権限を RAM ユーザーに付与します。

  1. [ユーザー] ページで、作成した RAM ユーザーを見つけ、[アクション] 列の [権限の追加] をクリックします。

  2. 権限の付与パネルで、AliyunSTSAssumeRoleAccess システムポリシーを選択します。

    説明

    AliyunSTSAssumeRoleAccess ポリシーは、RAM ユーザーに AssumeRole 操作を呼び出す権限を付与します。AssumeRole 操作の呼び出しに必要な権限は、STS から一時的なアクセス認証情報を取得するために必要な権限、および一時的なアクセス認証情報を使用して Tablestore にリクエストを開始するために必要な権限とは無関係です。

    image.png

  3. 権限の付与をクリックします。

ステップ 3: RAM ロールを作成する

RAM ロールがアシュームされたときに RAM ロールの Tablestore アクセス権限を指定するために、RAM ロールを作成します。

  1. 左側のナビゲーションペインで、アイデンティティ > ロール を選択します。

  2. ロールの作成をクリックします。ロールの作成ウィザードのロールタイプの選択ステップで、信頼できるエンティティの選択を Alibaba Cloud アカウント に設定し、次へをクリックします。

  3. ロールの作成ウィザードの ロールの作成 ステップで、RAM ロール名RamTablestoreTest に設定し、信頼できる Alibaba Cloud アカウントを選択現在の Alibaba Cloud アカウント を選択します。

  4. OK をクリックします。RAM ロールの作成後、閉じるをクリックします。

  5. ロールページで、検索ボックスにロール名 RamTablestoreTest を入力し、検索アイコンをクリックします。次に、RamTablestoreTest をクリックします。

  6. RamTablestoreTest ページの Alibaba Cloud Resource Name (ARN) の右側にある コピーをクリックして、RAM ロールの ARN を保存します。

    image

ステップ 4: RAM ロールに Tablestore 読み取り専用アクセス権を付与する

RAM ロールがアシュームされたときに RAM ロールの Tablestore アクセス権限を指定するために、1 つ以上のポリシーを RAM ロールにアタッチします。たとえば、RAM ユーザーが RAM ロールをアシュームしたときに、RAM ロールに Tablestore 読み取り専用アクセス権を付与するために、ポリシーを RAM ロールにアタッチできます。

  1. カスタムポリシーを作成します。

    1. 左側のナビゲーションペインで、権限管理 > ポリシー を選択します。

    2. ポリシーページで、ポリシーの作成をクリックします。

    3. ポリシーの作成ページで、JSON タブをクリックします。コードエディターに次のスクリプトを入力して、RAM ロールに Tablestore 読み取り専用アクセス権を付与します。

      警告

      次の例は参照用です。RAM ロールに過剰な権限が付与されないように、ビジネス要件に基づいてきめ細かい RAM ポリシーを設定する必要があります。きめ細かいポリシーの設定方法については、カスタムポリシーの作成を参照してください。

      {
        "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*" // Tablestore インスタンス
            ],
            "Condition": {}
          }
        ]
      }     
    4. ポリシー情報を編集するために次へをクリックします。

    5. 基本情報セクションで、名前RamTestPolicy に設定し、OK をクリックします。

  2. カスタムポリシーを RamTablestoreTest RAM ロールにアタッチします。

    1. 左側のナビゲーションペインで、ID > ロール を選択します。

    2. ロールページで、RamTablestoreTest RAM ロールを見つけます。

    3. [アクション] 列の 権限の付与RamTablestoreテスト RAM ロールの右側にある をクリックします。

    4. 権限の付与パネルで、[ポリシー] セクションのドロップダウンリストから カスタムポリシーを選択し、RamTestPolicy ポリシーを選択します。

    5. 権限の付与をクリックします。

ステップ 5: RAM ユーザーを使用して RAM ロールをアシュームして一時的なアクセス認証情報を取得する

RAM ロールに Tablestore 読み取り専用アクセス権を付与したら、RAM ユーザーは RAM ロールをアシュームして一時的なアクセス認証情報を取得する必要があります。一時的なアクセス認証情報には、セキュリティトークン (SecurityToken)、一時的な AccessKey ペア (AccessKey ID と AccessKey シークレット)、および有効期間 (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>説明</b> :
     * <p>AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。</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"));
        // エンドポイントを指定します。詳細については、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 秒です。最大有効期間は、現在のロールに指定された最大セッション期間と同じです。現在のロールの最大セッション期間は 3,600 秒から 43,200 秒です。現在のロールのデフォルトの最大セッション期間は 3,600 秒です。
                .setDurationSeconds(3600L)
                // ロールの外部 ID を指定します。このパラメータは外部パーティによって提供され、混乱したデピュティ問題を防ぐために使用されます。
                //.setExternalId(null)
                // STS トークンの権限を指定するポリシーを設定します。このパラメータを使用して、RAM ロールに付与された権限よりも少ない権限を STS トークンに付与できます。
                //.setPolicy(null)
                // 必須。TABLESTORE_STS_ROLE_ARN 環境変数が設定されていることを確認してください。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) {
            // 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
            // エラーメッセージを表示します。
            System.out.println(error.getMessage());
            // トラブルシューティング用の URL を提供します。
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
            // エラーメッセージを表示します。
            System.out.println(error.getMessage());
            // トラブルシューティング用の URL を提供します。
            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"
	"fmt"
	"os"
	"strings"

	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"
)

// 説明:
//
// AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
//
// @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")),
	}
	// エンドポイントを指定します。詳細については、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 環境変数が設定されていることを確認してください。ARN は、ステップ 3 で作成された RAM ロールの RamRoleArn です。
		RoleArn:        tea.String(os.Getenv("TABLESTORE_STS_ROLE_ARN")),
		// 一時的なアクセス認証情報の有効期間を指定します。単位: 秒。最小有効期間は 900 秒です。最大有効期間は、現在のロールに指定された最大セッション期間と同じです。現在のロールの最大セッション期間は 3,600 秒から 43,200 秒です。現在のロールのデフォルトの最大セッション期間は 3,600 秒です。
		DurationSeconds: tea.Int64(3600),
		// STS トークンの権限を指定するポリシーを設定します。このパラメータを使用して、RAM ロールに付与された権限よりも少ない権限を STS トークンに付与できます。
		//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())
		}
		// 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
		// エラーメッセージを表示します。
		fmt.Println(tea.StringValue(error.Message))
		// トラブルシューティング用の URL を提供します。
		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:
        """
        AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
        @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']
        )
        # エンドポイントを指定します。詳細については、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 秒です。最大有効期間は、現在のロールに指定された最大セッション期間と同じです。現在のロールの最大セッション期間は 3,600 秒から 43,200 秒です。現在のロールのデフォルトの最大セッション期間は 3,600 秒です。
            duration_seconds=3600,
            # ロールの外部 ID を指定します。このパラメータは外部パーティによって提供され、混乱したデピュティ問題を防ぐために使用されます。
            # external_id=None,
            # STS トークンの権限を指定するポリシーを設定します。このパラメータを使用して、RAM ロールに付与された権限よりも少ない権限を STS トークンに付与できます。
            # policy=None,
            # 必須。TABLESTORE_STS_ROLE_ARN 環境変数が設定されていることを確認してください。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:
            # 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
            # エラーメッセージを表示します。
            print(error.message)
            # トラブルシューティング用の URL を提供します。
            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:
            # 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
            # エラーメッセージを表示します。
            print(error.message)
            # トラブルシューティング用の URL を提供します。
            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 {

  /**
   * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
   * @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'],
    });
    // エンドポイントを指定します。詳細については、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 秒です。最大有効期間は、現在のロールに指定された最大セッション期間と同じです。現在のロールの最大セッション期間は 3,600 秒から 43,200 秒です。現在のロールのデフォルトの最大セッション期間は 3,600 秒です。
        durationSeconds: 3600,
        // ロールの外部 ID を指定します。このパラメータは外部パーティによって提供され、混乱したデピュティ問題を防ぐために使用されます。
        //externalId: null,
        // STS トークンの権限を指定するポリシーを設定します。このパラメータを使用して、RAM ロールに付与された権限よりも少ない権限を STS トークンに付与できます。
        //policy: null,
        // 必須。TABLESTORE_STS_ROLE_ARN 環境変数が設定されていることを確認してください。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) {
      // 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
      // エラーメッセージを表示します。
      console.log(error.message);
      // トラブルシューティング用の URL を提供します。
      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 {

    /**
     * AccessKey ID と AccessKey シークレットを使用してクライアントを初期化します。
     * @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")
        ]);
        // エンドポイントを指定します。詳細については、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 秒です。最大有効期間は、現在のロールに指定された最大セッション期間と同じです。現在のロールの最大セッション期間は 3,600 秒から 43,200 秒です。現在のロールのデフォルトの最大セッション期間は 3,600 秒です。
            "durationSeconds" => 3600,
            // 異なるトークンを区別するために、ロールのセッション名を指定します。
            "roleSessionName" => "yourRoleSessionName",
            // 必須。TABLESTORE_STS_ROLE_ARN 環境変数が設定されていることを確認してください。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);
            }
            // 実際のビジネスシナリオに基づいて例外を慎重に処理し、プロジェクトで例外を無視しないでください。この例に表示されるエラーメッセージは参照用です。
            // エラーメッセージを表示します。
            var_dump($error->message);
            // トラブルシューティング用の URL を提供します。
            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 エンドポイントについては、エンドポイントを参照してください。

RESTful API を使用する

AssumeRole 操作を呼び出して、一時的なアクセス認証情報を取得できます。

ステップ 6: STS から取得した一時的なアクセス認証情報を使用して Tablestore テーブルの名前を照会する

次の Java サンプルコードは、一時的なアクセス認証情報の有効期限が切れる前に、一時的なアクセス認証情報を使用して Tablestore テーブルの名前を照会する方法の例を示しています。

説明
  • 一時的なアクセス認証情報の有効期限は UTC で、UTC+8 よりも 8 時間遅れています。たとえば、一時的なアクセス認証情報の有効期限が 2024-04-18T11:33:40Z の場合、一時的なアクセス認証情報は 2024 年 4 月 18 日 19:33:40 (UTC+8) に有効期限が切れます。

  • 有効期限が切れるまで、一時的なアクセス認証情報を複数回使用できます。

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) {
        // Tablestore インスタンスの名前を指定します。
        String instanceName = "yourInstance";
        // Tablestore インスタンスのエンドポイントを指定します。例: 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();
    }
}

FAQ

このアクションを実行する権限がありません。RAM によって承認される必要があります。 というエラーメッセージが返された場合はどうすればよいですか?

ステップ 5 では、RAM ユーザーは Alibaba Cloud アカウントの AccessKey ペアではなく、自身の AccessKey ペア (AccessKey ID と AccessKey シークレット) を使用して RAM ロールをアシュームし、一時的なアクセス認証情報を取得する必要があります。

DurationSeconds の最小値/最大値は 15 分/1 時間です。 というエラーメッセージが返された場合はどうすればよいですか?

このエラーは、一時的なアクセス認証情報の有効期間が有効な範囲内にない場合に返されます。次のルールに基づいて有効期間を指定してください。

  • ロールのデフォルトの最大セッション期間 (3,600 秒) を使用する場合は、一時的なアクセス認証情報の最小有効期間は 900 秒、最大有効期間は 3,600 秒です。

  • ロールにカスタムの最大セッション期間が指定されている場合は、一時的なアクセス認証情報の最小有効期間は 900 秒、最大有効期間は指定された最大セッション期間と同じです。ロールの最大セッション期間は 3,600 ~ 43,200 秒です。

RAM コンソールでロールの最大セッション期間を確認できます。詳細については、RAM ロールの情報を表示するを参照してください。

指定されたセキュリティトークンは無効です。 というエラーメッセージが返された場合はどうすればよいですか?

ステップ 5 で取得したセキュリティトークンを指定していることを確認してください。

複数セットの一時的なアクセス認証情報を同時に取得できますか?

はい、複数セットの一時的なアクセス認証情報を同時に取得できます。STS にリクエストを送信することで、一時的なアクセス認証情報のセットを取得できます。STS から複数セットの一時的なアクセス認証情報を取得する場合は、STS に複数回リクエストを送信します。一時的なアクセス認証情報の有効期間内であれば、複数セットの一時的なアクセス認証情報を同時に使用できます。