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

Object Storage Service:STS が提供する一時的な認証情報を使用した OSS へのアクセス

最終更新日:Dec 17, 2025

セキュリティトークンサービス (STS) を使用すると、一時的な認証情報を使用して Object Storage Service (OSS) に保存されているデータへの時間制限付きアクセスを許可できます。一時的な認証情報の有効期限が切れると、その認証情報を使用してデータにアクセスすることはできなくなります。これにより、柔軟で時間制限のあるアクセス制御が可能になります。

利用シーン

ある E コマース企業が、大量の商品データを OSS に保存しています。この企業のサプライヤーは、自社の業務システムから企業の OSS バケットに定期的にデータをアップロードする必要があります。

この企業には、以下の情報セキュリティおよびコンプライアンス要件があります:

  • データセキュリティ:コアビジネスデータへの不正アクセスを防ぐため、企業は自社の OSS の AccessKey ペアをサプライヤーに公開したくありません。

  • 権限制御:企業は、きめ細かな権限制御を必要としています。具体的には、サプライヤーにデータアップロードの権限を付与し、要件の変更に応じてこれらの権限を動的に調整できるようにしたいと考えています。

  • 権限管理:企業は、長期的な認証情報を管理することなく、サプライヤーや将来のパートナーのためにアクセス認証情報を柔軟に生成したいと考えています。

  • 時間制限付きアクセス:企業は、サプライヤーに時間制限付きアクセスを許可したいと考えています。指定された期間が経過すると、サプライヤーはデータへのアクセスを拒否されます。

仕組み

企業は、サプライヤーが OSS バケットに一時的にファイルをアップロードすることを許可します。

image

企業はまず、Resource Access Management (RAM) ユーザーと RAM ロールを作成し、必要な権限を付与します。サプライヤーは企業に一時的な認証情報をリクエストし、企業は AssumeRole 操作を呼び出して一時的な認証情報を生成し、サプライヤーに返します。サプライヤーは、その一時的な認証情報を使用して、企業が所有する OSS バケットにデータをアップロードします。

前提条件

企業は既存の OSS バケットを所有している必要があります。詳細については、「バケットの作成」をご参照ください。

ステップ 1:企業による一時的な認証情報の生成

1. RAM ユーザーの作成

Alibaba Cloud アカウントのオーナーまたは管理権限を持つ RAM ユーザーが RAM ユーザーを作成できます。

  1. RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、アイデンティティ > [ユーザー] を選択します。

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

  4. ログイン名[表示名] を指定します。

  5. アクセスモード セクションで、[永続的な AccessKey を使用したアクセス] を選択し、[OK] をクリックします。

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

  7. AccessKey ペア (AccessKey ID と AccessKey Secret) をコピーし、安全に保管されたローカルファイルに貼り付けます。

    重要

    RAM ユーザーの AccessKey Secret は、RAM ユーザーの作成時にのみ取得できます。AccessKey ペアを含む CSV ファイルをデバイスの安全な場所にダウンロードしてください。

    image

2. AssumeRole 操作を呼び出すための RAM ユーザーへの権限付与

次に、企業は Alibaba Cloud アカウントまたは RAM の管理権限を持つ RAM ユーザーを使用して、作成した RAM ユーザーに AssumeRole 操作を呼び出す権限を付与します。

  1. RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、アイデンティティ > [ユーザー] を選択します。先ほど作成した RAM ユーザーを見つけ、[操作] 列の 権限の追加 をクリックします。

  3. [権限の付与] パネルの [ポリシー] セクションで、AliyunSTSAssumeRoleAccess ポリシーを選択します。

    説明

    AliyunSTSAssumeRoleAccess ポリシーは、RAM ユーザーが AssumeRole 操作を呼び出すことを許可します。このポリシーは、RAM ユーザーが STS から一時的な認証情報を取得し、OSS へのリクエストを開始するために必要な権限を付与するものではありません。

    image

  4. [権限を付与] をクリックします。

3. RAM ロールの作成

企業は、Alibaba Cloud アカウントまたは RAM の管理権限を持つ RAM ユーザーを使用して、以下の手順で RAM ロールを作成します:

  1. RAM コンソールにログインします。

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

  3. [ロール] ページで、[ロールの作成] をクリックします。

  4. [ロールの作成] ページで、[プリンシパルタイプ][クラウドアカウント] を選択し、[プリンシパル名][現在のアカウント] を選択して、[OK] をクリックします。

    image

  5. [ロールの作成] ダイアログボックスで、ロール名を指定し、[OK] をクリックします。

  6. 表示されるロール詳細ページで、[基本情報] セクションの ARN フィールドの横にある [コピー] をクリックします。

    image

4. OSS にオブジェクトをアップロードする権限の RAM ロールへの付与

RAM ロールに OSS へのアクセスを許可するには、企業は Alibaba Cloud アカウントを使用するか、RAM の管理権限を持つ RAM ユーザーとして、1 つ以上のポリシーを RAM ロールにアタッチする必要があります。たとえば、RAM ロールには、指定されたバケットにデータをアップロードするための OSS 書き込み権限が必要です。

  1. オブジェクトをアップロードする権限をロールに付与するカスタムポリシーを作成します。

    1. RAM コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、権限管理 > ポリシー を選択します。

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

    4. ポリシーの作成 ページで、[JSON] をクリックします。コードエディタで、指定されたバケットにデータをアップロードする権限を入力します。以下のスクリプトはポリシーの例です:

      警告

      以下の例は参考用です。過剰な権限を付与しないように、要件に基づいてきめ細かな RAM ポリシーを設定する必要があります。きめ細かな RAM ポリシーの設定方法の詳細については、「例 9:RAM または STS を使用した OSS リソースへのユーザーアクセスの権限付与」をご参照ください。

      {
          "Version": "1",
          "Statement": [
           {
                 "Effect": "Allow",
                 "Action": [
                   "oss:PutObject"
                 ],
                 "Resource": [
                   "acs:oss:*:*:examplebucket/*"             
                 ]
           }
          ]
      }
      説明

      Action 要素は、RAM ロールに付与する権限を指定します。たとえば、oss:PutObject を指定すると、RAM ロールを偽装した RAM ユーザーは、シンプルアップロード、フォームアップロード、追加アップロード、マルチパートアップロード、再開可能なアップロードなど、さまざまなアップロード方法を使用して、指定されたバケットにオブジェクトをアップロードできます。詳細については、「OSS の RAM ポリシーにおける Action 要素」をご参照ください。

    5. [OK] をクリックします。[ポリシーの作成] ダイアログボックスで、[ポリシー名] フィールドにポリシー名 (この例では RamTestPolicy) を指定し、[OK] をクリックします。

  2. カスタムポリシーを RamOssTest ロールにアタッチして権限を付与します。

    1. RAM コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

    3. [ロール] ページで、RamOssTest ロールを見つけます。

    4. [操作] 列の [権限の付与] をクリックします。

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

    6. [権限を付与] をクリックします。

5. RAM ユーザーを使用した RAM ロールの偽装と一時的な認証情報の生成

重要

Alibaba Cloud アカウントの AccessKey ペアを使用して STS API を呼び出すと失敗します。RAM ユーザーの AccessKey ペアを使用する必要があります。以下のサンプルコードでは、RAM ユーザーの AccessKey ペアを使用して一時的な認証情報をリクエストします。

  • 先ほど作成した RAM ユーザーが RAM ロールを偽装して、一時的な認証情報を取得します。一時的な認証情報には、STS トークン (SecurityToken)、一時的な AccessKey ペア (AccessKey ID と AccessKey Secret)、および有効期間 (Expiration) が含まれます。以下のサンプルコードは、シンプルアップロードに必要な oss:PutObject 権限を提供する一時的な認証情報を生成します。他のプログラミング言語の STS SDK を使用して一時的な認証情報を生成する方法の詳細については、「STS SDK の概要」をご参照ください。

  • サンプルコードのエンドポイントは、STS エンドポイントを指定します。アプリケーションサーバーと同じリージョンまたはその近くにある STS エンドポイントを使用すると、STS の応答速度が向上します。STS エンドポイントの詳細については、「エンドポイント」をご参照ください。

Java

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.auth.sts.AssumeRoleRequest;
import com.aliyuncs.auth.sts.AssumeRoleResponse;
public class StsServiceSample {
    public static void main(String[] args) { 
        // STS エンドポイントを指定します。例:sts.cn-hangzhou.aliyuncs.com。STS には、インターネットまたは VPC 経由でアクセスできます。        
        String endpoint = "sts.cn-hangzhou.aliyuncs.com";
        // ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey Secret を環境変数から取得します。 
        String accessKeyId = System.getenv("ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ACCESS_KEY_SECRET");
        // ステップ 1.3 で生成された RAM ロールの ARN を環境変数から取得します。 
        String roleArn = System.getenv("RAM_ROLE_ARN");
        // 異なるトークンを区別するために、カスタムのロールセッション名を指定します。例:SessionTest。         
        String roleSessionName = "yourRoleSessionName";   
        // 一時的な認証情報が RAM ロールのすべての権限を持つことを指定します。       
        String policy = null;
        // 一時的な認証情報の有効期間を指定します。単位:秒。最小有効期間は 900 秒です。最大有効期間は、現在のロールに指定された最大セッション期間と同じです。現在のロールの最大セッション期間は 3,600 秒から 43,200 秒の範囲です。現在のロールのデフォルトの最大セッション期間は 3,600 秒です。 
        // ラージオブジェクトのアップロードやその他の時間のかかるユースケースでは、タスクが完了する前に STS API 操作を繰り返し呼び出して一時的な認証情報を取得する必要がないように、適切な有効期間を設定します。 
        Long durationSeconds = 3600L;
        try {
            // STS のリージョンを指定します。デフォルト値を維持します。デフォルト値は空の文字列 ("") です。 
            String regionId = "";
            // エンドポイントを指定します。次の行は、STS SDK for Java V3.12.0 以降に適用されます。 
            DefaultProfile.addEndpoint(regionId, "Sts", endpoint);
            // エンドポイントを指定します。次の行は、V3.12.0 より前の STS SDK for Java バージョンに適用されます。 
            // DefaultProfile.addEndpoint("",regionId, "Sts", endpoint);
            // デフォルトのプロファイルを作成します。 
            IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            // プロファイルを使用してクライアントを作成します。 
            DefaultAcsClient client = new DefaultAcsClient(profile);
            final AssumeRoleRequest request = new AssumeRoleRequest();
            // 次の行は、STS SDK for Java V3.12.0 以降に適用されます。 
            request.setSysMethod(MethodType.POST);
            // 次の行は、V3.12.0 より前の STS SDK for Java バージョンに適用されます。 
            // request.setMethod(MethodType.POST);
            request.setRoleArn(roleArn);
            request.setRoleSessionName(roleSessionName);
            request.setPolicy(policy); 
            request.setDurationSeconds(durationSeconds); 
            final AssumeRoleResponse response = client.getAcsResponse(request);
            System.out.println("Expiration: " + response.getCredentials().getExpiration());
            System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
            System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
            System.out.println("RequestId: " + response.getRequestId());
        } catch (ClientException e) {
            System.out.println("Failed: ");
            System.out.println("Error code: " + e.getErrCode());
            System.out.println("Error message: " + e.getErrMsg());
            System.out.println("RequestId: " + e.getRequestId());
        }
    }
}

Python

# -*- coding: utf-8 -*-

from aliyunsdkcore import client
from aliyunsdkcore.request import CommonRequest
import json
import oss2
import os

# ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey Secret を環境変数から取得します。 
access_key_id = os.getenv("ACCESS_KEY_ID")
access_key_secret = os.getenv("ACCESS_KEY_SECRET")
# ステップ 1.3 で生成された RAM ロールの ARN を環境変数から取得します。 
role_arn = os.getenv("RAM_ROLE_ARN")

# ポリシーを作成します。 
clt = client.AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
request = CommonRequest(product="Sts", version='2015-04-01', action_name='AssumeRole')
request.set_method('POST')
request.set_protocol_type('https')
request.add_query_param('RoleArn', role_arn)
# 異なるトークンを区別するために、カスタムのロールセッション名を指定します。例:sessiontest。 
request.add_query_param('RoleSessionName', 'sessiontest')
# 一時的な認証情報の有効期間を 3,600 秒に設定します。 
request.add_query_param('DurationSeconds', '3600')
request.set_accept_format('JSON')

body = clt.do_action_with_exception(request)

# RAM ユーザーの AccessKey ペアを使用して、STS に一時的な認証情報を申請します。 
token = json.loads(oss2.to_unicode(body))
# STS から返された一時的な認証情報の AccessKey ID、AccessKey Secret、セキュリティトークン、および有効期限を表示します。 
print('AccessKeyId: ' + token['Credentials']['AccessKeyId'])
print('AccessKeySecret: ' + token['Credentials']['AccessKeySecret'])
print('SecurityToken: ' + token['Credentials']['SecurityToken'])
print('Expiration: ' + token['Credentials']['Expiration'])

Node.js

const { STS } = require('ali-oss');
const express = require("express");
const app = express();

app.get('/sts', (req, res) => {
 let sts = new STS({
  // ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey Secret を環境変数から取得します。 
   accessKeyId : process.env.ACCESS_KEY_ID,
   accessKeySecret : process.env.ACCESS_KEY_SECRET
});
  // 環境変数から RAM ロールの ARN を取得します (ステップ 1.3 で作成)。 
  // カスタムポリシーを指定して、一時的な認証情報の権限を制限します。カスタムポリシーを指定しない場合、一時的な認証情報は指定された RAM ロールのすべての権限を持ちます。 
  // 一時的な認証情報によって取得される権限は、ステップ 4 で設定されたロール権限と、カスタム RAM ポリシーで指定された権限の共通部分です。 
  // 一時的な認証情報の有効期間を指定します。単位:秒。一時的な認証情報の最小有効期間は 900 秒です。一時的な認証情報の最大有効期間は、現在のロールに指定された最大セッション期間です。この例では、有効期間は 3,600 秒に設定されています。 
  // 異なるトークンを区別するために、カスタムのロールセッション名を指定します。例:sessiontest。 
  sts.assumeRole('process.env.RAM_ROLE_ARN', ``, '3600', 'sessiontest').then((result) => {
    console.log(result);
    res.set('Access-Control-Allow-Origin', '*');
    res.set('Access-Control-Allow-METHOD', 'GET');
    res.json({
      AccessKeyId: result.credentials.AccessKeyId,
      AccessKeySecret: result.credentials.AccessKeySecret,
      SecurityToken: result.credentials.SecurityToken,
      Expiration: result.credentials.Expiration
    });
  }).catch((err) => {
    console.log(err);
    res.status(400).json(err.message);
  });
});
app.listen(8000,()=>{
   console.log("server listen on:8000")
})

Go

package main

import (
    "fmt"
    "os"

    openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
    sts20150401 "github.com/alibabacloud-go/sts-20150401/v2/client"
    util "github.com/alibabacloud-go/tea-utils/v2/service"
    "github.com/alibabacloud-go/tea/tea"
)

func main() {
    // ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey Secret を環境変数から取得します。 
    accessKeyId := os.Getenv("ACCESS_KEY_ID")
    accessKeySecret := os.Getenv("ACCESS_KEY_SECRET")
    // ステップ 1.3 で生成された RAM ロールの ARN を環境変数から取得します。 
    roleArn := os.Getenv("RAM_ROLE_ARN")

    // クライアントを作成します。 
    config := &openapi.Config{
        // ステップ 1.1 で取得した AccessKey ID を指定します。 
        AccessKeyId: tea.String(accessKeyId),
        // ステップ 1.1 で取得した AccessKey Secret を指定します。 
        AccessKeySecret: tea.String(accessKeySecret),
    }
    // バケットが配置されているリージョンのエンドポイントを指定します。詳細については、https://api.alibabacloud.com/product/Sts をご参照ください。
    config.Endpoint = tea.String("sts.cn-hangzhou.aliyuncs.com")
    client, err := sts20150401.NewClient(config)
    if err != nil {
        fmt.Printf("Failed to create client: %v\n", err)
        return
    }

    // RAM ユーザーの AccessKey ペアを使用して、STS に一時的な認証情報を申請します。 
    request := &sts20150401.AssumeRoleRequest{
        // 一時的な認証情報の有効期間を 3,600 秒に設定します。 
        DurationSeconds: tea.Int64(3600),
        // ステップ 1.3 で生成された RAM ロールの ARN を環境変数から取得します。 
        RoleArn: tea.String(roleArn),
        // カスタムセッション名を指定します。
        RoleSessionName: tea.String("examplename"),
    }
    response, err := client.AssumeRoleWithOptions(request, &util.RuntimeOptions{})
    if err != nil {
        fmt.Printf("Failed to assume role: %v\n", err)
        return
    }

    // STS から返された一時的な認証情報の AccessKey ID、AccessKey Secret、セキュリティトークン、および有効期限を表示します。 
    credentials := response.Body.Credentials
    fmt.Println("AccessKeyId: " + tea.StringValue(credentials.AccessKeyId))
    fmt.Println("AccessKeySecret: " + tea.StringValue(credentials.AccessKeySecret))
    fmt.Println("SecurityToken: " + tea.StringValue(credentials.SecurityToken))
    fmt.Println("Expiration: " + tea.StringValue(credentials.Expiration))
}

php

<?php
require __DIR__ . '/vendor/autoload.php';

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use AlibabaCloud\Sts\Sts;

// ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey Secret を環境変数から取得します。 
$accessKeyId = getenv("ACCESS_KEY_ID");
$accessKeySecret = getenv("ACCESS_KEY_SECRET");
// ステップ 1.3 で生成された RAM ロールの ARN を環境変数から取得します。 
$roleArn = getenv("RAM_ROLE_ARN");

// Alibaba Cloud クライアントを初期化します。 
AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
    ->regionId('cn-hangzhou')
    ->asDefaultClient();

try {
    // STS から一時的な認証情報を取得するリクエストを作成します。 
    $result = Sts::v20150401()
        ->assumeRole()
        // ロールの ARN を指定します。 
        ->withRoleArn($roleArn)
        // 異なるトークンを区別するために、ロールのカスタムセッション名を指定します。 
        ->withRoleSessionName('sessiontest')
        // 一時的な認証情報の有効期間を 3,600 秒に設定します。 
        ->withDurationSeconds(3600)
        ->request();

    // 応答の認証情報を表示します。 
    $credentials = $result['Credentials'];

    // STS から返された一時的な認証情報の AccessKey ID、AccessKey Secret、セキュリティトークン、および有効期限を表示します。 
    echo 'AccessKeyId: ' . $credentials['AccessKeyId'] . PHP_EOL;
    echo 'AccessKeySecret: ' . $credentials['AccessKeySecret'] . PHP_EOL;
    echo 'SecurityToken: ' . $credentials['SecurityToken'] . PHP_EOL;
    echo 'Expiration: ' . $credentials['Expiration'] . PHP_EOL;
} catch (ClientException $e) {
    // クライアント例外を処理します。 
    echo $e->getErrorMessage() . PHP_EOL;
} catch (ServerException $e) {
    // サーバー例外を処理します。 
    echo $e->getErrorMessage() . PHP_EOL;
}

Ruby

require 'sinatra'
require 'base64'
require 'open-uri'
require 'cgi'
require 'openssl'
require 'json'
require 'sinatra/reloader'
require 'sinatra/content_for'
require 'aliyunsdkcore'

# public-folder フォルダのパスを、現在のフォルダ内の templates サブフォルダに設定します。 
set :public_folder, File.dirname(__FILE__) + '/templates'

def get_sts_token_for_oss_upload()
  client = RPCClient.new(
    # ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey Secret を環境変数から取得します。 
    access_key_id: ENV['ACCESS_KEY_ID'],
    access_key_secret: ENV['ACCESS_KEY_SECRET'],
    endpoint: 'https://sts.cn-hangzhou.aliyuncs.com',
    api_version: '2015-04-01'
  )
  response = client.request(
    action: 'AssumeRole',
    params: {
      # ステップ 1.3 で生成された RAM ロールの ARN を環境変数から取得します。 
      "RoleArn": ENV['RAM_ROLE_ARN'],
      # 一時的な認証情報の有効期間を 3,600 秒に設定します。 
      "DurationSeconds": 3600,
      # 異なるトークンを区別するために使用されるカスタムのロールセッション名を指定します。例:sessiontest。 
      "RoleSessionName": "sessiontest"
    },
    opts: {
      method: 'POST',
      format_params: true
    }
  )
end

if ARGV.length == 1 
  $server_port = ARGV[0]
elsif ARGV.length == 2
  $server_ip = ARGV[0]
  $server_port = ARGV[1]
end

$server_ip = "127.0.0.1"  # 0.0.0.0 などの別の IP アドレスをリッスンするには、サーバー側で認証メカニズムを実装します。
$server_port = 8000

puts "App server is running on: http://#{$server_ip}:#{$server_port}"

set :bind, $server_ip
set :port, $server_port

get '/get_sts_token_for_oss_upload' do
  token = get_sts_token_for_oss_upload()
  response = {
    "AccessKeyId" => token["Credentials"]["AccessKeyId"],
    "AccessKeySecret" => token["Credentials"]["AccessKeySecret"],
    "SecurityToken" => token["Credentials"]["SecurityToken"],
    "Expiration" => token["Credentials"]["Expiration"]
  }
  response.to_json
end

get '/*' do
  puts "********************* GET "
  send_file File.join(settings.public_folder, 'index.html')
end
  • 一時的な認証情報の例

    説明
    • Alibaba Cloud アカウント、およびその RAM ユーザーと RAM ロールは、一時的な認証情報をリクエストするために STS に 1 秒あたり最大 100 件のリクエスト (RPS) を送信できます。高い同時実行性が求められるユースケースでは、一時的な認証情報を再利用してください。

    • 一時的な認証情報の有効期限は UTC 形式です。たとえば、有効期限が 2024-04-18T11:33:40Z の場合、一時的な認証情報は 2024 年 4 月 18 日 19:33:40 (UTC+8) に失効します。

    {
      "AccessKeyId": "STS.****************",
      "AccessKeySecret": "3dZn*******************************************",
      "SecurityToken": "CAIS*****************************************************************************************************************************************",
      "Expiration": "2024-**-*****:**:50Z"
    }
  • 一時的な認証情報のきめ細かな権限

    一時的な認証情報が RAM ロールから権限を取得した後、一時的な認証情報の権限をさらに制限できます。たとえば、一時的な認証情報が examplebucket バケットにオブジェクトをアップロードする権限を持っている場合、アクセス認証情報がバケット内の特定のディレクトリにのみデータをアップロードするために使用できるように指定します。以下のサンプルコードは、一時的な認証情報の権限を制限します。

    // 以下のポリシーは、一時的な認証情報が examplebucket バケットの src ディレクトリにのみオブジェクトをアップロードできることを指定します。 
    // 一時的な認証情報に最終的に付与される権限は、ステップ 4 で指定されたロール権限と、ポリシーで指定された権限の共通部分です。これにより、examplebucket バケットの src ディレクトリへのデータアップロードのみが許可されます。       
    String policy = "{\n" +
                    "    \"Version\": \"1\", \n" +
                    "    \"Statement\": [\n" +
                    "        {\n" +
                    "            \"Action\": [\n" +
                    "                \"oss:PutObject\"\n" +
                    "            ], \n" +
                    "            \"Resource\": [\n" +
                    "                \"acs:oss:*:*:examplebucket/src/*\" \n" +
                    "            ], \n" +
                    "            \"Effect\": \"Allow\"\n" +
                    "        }\n" +
                    "    ]\n" +
                    "}";

ステップ 2:サプライヤーによる一時的な認証情報を使用したデータアップロード

重要

コンプライアンスとセキュリティを向上させるためのポリシー変更により、2025 年 3 月 20 日より、新規 OSS ユーザーは、中国本土リージョンにある OSS バケットでデータ API 操作を実行する場合、カスタムドメイン名を使用する必要があります (CNAME)。これらの操作では、デフォルトのパブリックエンドポイントは制限されます。影響を受ける操作の完全なリストについては、公式発表をご参照ください。HTTPS 経由でデータにアクセスする場合、カスタムドメインに有効な SSL 証明書をバインドする必要があります。コンソールでは HTTPS が適用されるため、これはOSS コンソールへのアクセスには必須です

以下のサンプルコードは、一時的な認証情報を使用してデータをアップロードする方法を示しています。他のプログラミング言語の OSS SDK を使用して一時的な認証情報に基づいて OSS にデータをアップロードする方法の詳細については、「概要」をご参照ください。

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;

import java.io.File;

public class Demo {

    public static void main(String[] args) throws Exception {
        // ステップ 1.5 で生成された一時的な AccessKey ID、AccessKey Secret、および STS トークンを指定します。RAM ユーザーの認証情報は使用しないでください。
        // STS が提供する AccessKey ID は STS で始まることに注意してください。
        String accessKeyId = "yourSTSAccessKeyID";
        String accessKeySecret = "yourSTSAccessKeySecret";
        // STS から取得したセキュリティトークンを指定します。
        String stsToken= "yourSecurityToken";

        // AccessKey ID と Secret を DefaultCredentialProvider に渡して、認証情報プロバイダーを初期化します。
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret, stsToken);
        // credentialsProvider を使用してクライアントを初期化します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // V4 署名アルゴリズムの使用を明示的に宣言します。
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        OSS ossClient = OSSClientBuilder.create()
                 // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。  
                .endpoint("endpoint")
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                // リージョン ID を指定します。例:cn-hangzhou。
                .region("region")
                .build();

        try {

            // PutObjectRequest オブジェクトを作成します。ローカルファイル exampletest.txt を examplebucket にアップロードします。
            PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampletest.txt", new File("D:\\localpath\\exampletest.txt"));

            // オプション。オブジェクトのストレージクラスと ACL を指定します。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // オブジェクトをアップロードします。 
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

OSS SDK for Python には、2.0 と 1.0 の 2 つのバージョンがあります。OSS SDK for Python 2.0 は 1.0 を完全にリファクタリングしたもので、認証、リクエストの再試行、エラー処理などのコア操作を合理化しています。より柔軟なパラメーター構成を提供し、新しい高度な機能を導入しています。以下の例は、実際の要件に基づいて OSS SDK for Python を実装するのに役立ちます。

OSS SDK for Python 2.0

import alibabacloud_oss_v2 as oss

def main():
    # ステップ 1.5 で生成された一時的な AccessKey ID、AccessKey Secret、および STS トークンを指定します。RAM ユーザーの認証情報は使用しないでください。
    # STS が提供する AccessKey ID は STS で始まることに注意してください。
    sts_access_key_id = 'yourSTSAccessKeyID'
    sts_access_key_secret = 'yourSTSAccessKeySecret'
    # STS から取得した STS トークンを指定します。
    sts_security_token = 'yourSecurityToken'
    
    # 静的な認証情報プロバイダーを作成し、STS が提供する AccessKey ID、AccessKey Secret、および STS トークンを明示的に指定します。
    credentials_provider = oss.credentials.StaticCredentialsProvider(
        access_key_id=sts_access_key_id,
        access_key_secret=sts_access_key_secret,
        security_token=sts_security_token,
    )

    # SDK のデフォルト構成をロードし、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
    cfg.region = 'cn-hangzhou'

    # 上記の構成を使用して OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # アップロードするローカルオブジェクトの完全なパスを指定します。例:D:\\localpath\\exampletest.txt。
    local_file_path = 'D:\\localpath\\exampletest.txt'
    with open(local_file_path, 'rb') as file:
        data = file.read()

    # exampletest.txt を examplebucket にアップロードするリクエストを実行します。 
    result = client.put_object(oss.PutObjectRequest(
        # バケットの名前。
        bucket='examplebucket',
        # アップロードするオブジェクトの名前。 
        key='exampletest.txt',
        body=data,
    ))

     # HTTP ステータスコード、リクエスト ID、MD5 ハッシュ、ETag、CRC-64 値、およびオブジェクトバージョン ID を表示して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )


# スクリプトが直接実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。スクリプトが直接実行されると、main 関数が呼び出されます。

OSS SDK for Python 1.0

# -*- coding: utf-8 -*-
import oss2

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# ステップ 1.5 で生成された一時的な AccessKey ID と AccessKey Secret を指定します。Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret は使用しないでください。 
sts_access_key_id = 'yourAccessKeyId'
sts_access_key_secret = 'yourAccessKeySecret'
# バケットの名前を指定します。 
bucket_name = 'examplebucket'
# 文字列を使用してオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。  
object_name = 'examplebt.txt'
# ステップ 1.5 で生成された STS トークンを入力します。 
security_token = 'yourSecurityToken'
# 一時的な認証情報を使用して StsAuth インスタンスを初期化します。 
auth = oss2.StsAuth(sts_access_key_id,
                    sts_access_key_secret,
                    security_token)
# StsAuth インスタンスを使用してバケットを初期化します。 
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# オブジェクトをアップロードします。 
result = bucket.put_object(object_name, "hello world")
print(result.status)

Go

OSS SDK for Go には、2.0 と 1.0 の 2 つのバージョンがあります。OSS SDK for Go 2.0 は 1.0 を完全にリファクタリングしたもので、認証、リクエストの再試行、エラー処理などのコア操作を合理化しています。より柔軟なパラメーター構成を提供し、新しい高度な機能を導入しています。以下の例は、実際の要件に基づいて OSS SDK for Go を実装するのに役立ちます。

OSS SDK for Go 2.0

package main

import (
	"context"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func main() {
	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
	region := "cn-hangzhou"

	// ステップ 1.5 で生成された一時的な AccessKey ID、AccessKey Secret、および STS トークンを指定します。RAM ユーザーの認証情報は使用しないでください。
        // STS が提供する AccessKey ID は STS で始まることに注意してください。
	accessKeyID := "yourSTSAccessKeyID"
	accessKeySecret := "yourSTSAccessKeySecret"
	// STS から取得した STS トークンを指定します。
	stsToken := "yourSecurityToken"

	// NewStaticCredentialsProvider メソッドを使用して、AccessKey ID、AccessKey Secret、および STS トークンを指定します。
	provider := credentials.NewStaticCredentialsProvider(accessKeyID, accessKeySecret, stsToken)

	// SDK のデフォルト構成をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// アップロードするローカルファイルのパスを指定します。例:D:\\localpath\\exampletest.txt。
	localFile := "D:\\localpath\\exampletest.txt"

	// オブジェクトをアップロードするリクエストを作成します。
	putRequest := &oss.PutObjectRequest{
		Bucket:       oss.Ptr("examplebucket"),      // バケットの名前。
		Key:          oss.Ptr("exampletest.txt"),    // アップロードするオブジェクトの名前。
		StorageClass: oss.StorageClassStandard, // オブジェクトのストレージクラスを標準に設定します。
		Acl:          oss.ObjectACLPrivate,     // オブジェクトの ACL を非公開に設定します。
		Metadata: map[string]string{
			"yourMetadataKey1": "yourMetadataValue1", // オブジェクトのメタデータを構成します。
		},
	}

	// exampletest.txt を examplebucket にアップロードするリクエストを実行します。
	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
	if err != nil {
		log.Fatalf("failed to put object from file %v", err)
	}

	// オブジェクトアップロードの結果を表示します。
	log.Printf("put object from file result:%#v\n", result)
	
}

OSS SDK for Go 1.0

package main

import (
    "fmt""github.com/aliyun/aliyun-oss-go-sdk/oss""os"
)

func main() {
    // 環境変数から一時的な認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID、OSS_ACCESS_KEY_SECRET、および OSS_SESSION_TOKEN 環境変数が構成されていることを確認してください。
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // OSSClient インスタンスを作成します。// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // バケットの名前を指定します。例:examplebucket。
    bucketName := "examplebucket"// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampledir/exampleobject.txt。
    objectName := "exampledir/exampleobject.txt"// ローカルオブジェクトの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。
    filepath := "D:\\localpath\\examplefile.txt"
    bucket,err := client.Bucket(bucketName)
    // 一時的な認証情報を使用してローカルファイルをアップロードします。
    err = bucket.PutObjectFromFile(objectName,filepath)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println("upload success")
}

Node.js

説明

このサンプルコードには Axios が必要です。

const axios = require("axios");
const OSS = require("ali-oss");

// 一時的な認証情報を使用して OSSClient インスタンスを初期化します。このインスタンスは、OSS リソースへの一時的なアクセスを許可するために使用されます。
const getToken = async () => {
  // クライアントが一時的な認証情報を取得するために使用するアドレスを指定します。
  await axios.get("http://localhost:8000/sts").then((token) => {
    const client = new OSS({
       // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
      region: 'oss-cn-hangzhou',
      // ステップ 1.5 で生成された一時的な AccessKey ID、AccessKey Secret、および STS トークンを指定します。RAM ユーザーの認証情報は使用しないでください。
      accessKeyId: token.data.AccessKeyId,
      accessKeySecret: token.data.AccessKeySecret,
      // ステップ 1.5 で生成された STS トークンを入力します。
      stsToken: token.data.SecurityToken,
      authorizationV4: true,
      // バケットの名前を指定します。
      bucket: "examplebucket",
      // 一時的な認証情報をリフレッシュします。
      refreshSTSToken: async () => {
        const refreshToken = await axios.get("http://localhost:8000/sts");
        return {
          accessKeyId: refreshToken.data.AccessKeyId,
          accessKeySecret: refreshToken.data.AccessKeySecret,
          stsToken: refreshToken.data.SecurityToken,
        };
      },
    });
    // 一時的な認証情報を使用してオブジェクトをアップロードします。
    // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampleobject.jpg。
    // ローカルオブジェクトの完全なパスを指定します。例:D:\\example.jpg。
    client.put('exampleobject.jpg', 'D:\\example.jpg').then((res)=>{console.log(res)}).catch(e=>console.log(e))
  });
};
getToken()

php

<?php
if (is_file(__DIR__ . 'autoload.php')) {
    require_once __DIR__ . 'autoload.php';
}
if (is_file(__DIR__ . '/vendor/autoload.php')) {
    require_once __DIR__ . '/vendor/autoload.php';
}

use OSS\Credentials\StaticCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

try {
    // ステップ 1.5 で生成された一時的な AccessKey ID、AccessKey Secret、および STS トークンを指定します。RAM ユーザーの認証情報は使用しないでください。
    // STS が提供する AccessKey ID は STS で始まることに注意してください。
    $accessKeyId = 'yourSTSAccessKeyID';
    $accessKeySecret = 'yourSTSAccessKeySecret';
    // STS から取得した STS トークンを指定します。
    $securityToken = 'yourSecurityToken';

    // StaticCredentialsProvider を使用して認証情報プロバイダーを作成します。
    $provider = new StaticCredentialsProvider($accessKeyId, $accessKeySecret, $securityToken);

    // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

    // バケットの名前を指定します。例:examplebucket。
    $bucket= "examplebucket";
    // アップロードするオブジェクトの名前を指定します。
    $object = "exampletest.txt";
    // アップロードするローカルオブジェクトの完全なパスを指定します。例:D:\\localpath\\exampletest.txt。
    $localFilePath = "D:\\localpath\\exampletest.txt";

    // アップロードリクエストのヘッダーを構成して、アップロードされた文字列に関する情報を指定します。たとえば、オブジェクトの ACL を非公開に設定し、オブジェクトのユーザーメタデータを構成します。
    $options = array(
        OssClient::OSS_HEADERS => array(
            'x-oss-object-acl' => 'private',
            'x-oss-meta-info' => 'yourinfo'
        ),
    );

    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        "region" => "cn-hangzhou"
    );
    
    // 上記の構成を使用して OSSClient インスタンスを作成します。
    $ossClient = new OssClient($config);
    
     // exampletest.txt という名前のローカルファイルを examplebucket にアップロードするリクエストを送信します。
    $ossClient->putObject($bucket, $object, $localFilePath, $options);
} catch (OssException $e) {
    printf($e->getMessage() . "\n");
    return;
}

Ruby

require 'aliyun/sts'
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # この例では、中国 (杭州) リージョンのエンドポイントが使用されています。実際のエンドポイントを指定してください。 
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # ステップ 1.5 で生成された一時的な AccessKey ID と AccessKey Secret を指定します。Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret は使用しないでください。  
  access_key_id: 'token.access_key_id',
  access_key_secret: 'token.access_key_secret',
  # ステップ 1.5 で生成された STS トークンを入力します。 
  sts_token: 'token.security_token'
  )
# バケットの名前を指定します。例:examplebucket。 
bucket = client.get_bucket('examplebucket')
# オブジェクトをアップロードします。 
bucket.put_object('exampleobject.txt', :file => 'D:\test.txt')

よくある質問

エラーYou are not authorized to do this action. You should be authorized by RAM」を解決するにはどうすればよいですか?

ステップ 1.5 で、RAM ロールを偽装して一時的な認証情報を取得する際には、Alibaba Cloud アカウントの AccessKey ペアではなく、RAM ユーザーの AccessKey ペア (AccessKey ID と AccessKey Secret) を使用していることを確認してください。

エラーThe Min/Max value of DurationSeconds is 15min/1hr」を解決するにはどうすればよいですか?

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

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

  • ロールにカスタムの最大セッション期間を指定した場合、最小有効期間は 900 秒、最大有効期間は指定された最大セッション期間と同じです。ロールの最大セッション期間は 3,600 秒から 43,200 秒の範囲です。

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

エラー「The security token you provided is invalid」を解決するにはどうすればよいですか?

ステップ 1.5 で取得した STS トークンを指定していることを確認してください。

エラー「The OSS Access Key Id you provided does not exist in our records」を解決するにはどうすればよいですか?

アプリケーションサーバーから新しい一時的な認証情報を申請するために、RAM ユーザーの一時的な AccessKey ペアを使用してください。このエラーは、一時的な認証情報の有効期限が切れているために発生します。詳細については、「ステップ 1.5」をご参照ください。

エラー「AccessDenied: Anonymous access is forbidden for this operation」を解決するにはどうすればよいですか?

このエラーメッセージは、ステップ 1.5 で一時的な認証情報をリクエストした際に、Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret を指定したために返されます。ステップ 1.1 で RAM ユーザー用に生成された AccessKey ID と AccessKey Secret を指定する必要があります。

エラー NoSuchBucket を解決するにはどうすればよいですか?

このエラーコードは、指定されたバケットが存在しないために返されます。既存のバケットを指定していることを確認してください。

一時的な認証情報を使用して OSS リソースにアクセスしようとするとエラー「You have no right to access this object because of bucket acl」が発生する場合、どうすれば解決できますか?

RAM ポリシーが正しく構成されているか確認してください。RAM ポリシーの要素の詳細については、「RAM ポリシー」をご参照ください。マルチパートアップロードや追加アップロードなど、特定の操作を実行するために使用できる一時的な認証情報を取得したい場合は、ポリシーの Action 要素に対応する権限を指定してください。OSS の操作の詳細については、「OSS の RAM ポリシーにおける Action 要素」をご参照ください。

STS から取得した一時的な認証情報を使用して OSS リソースに対する操作を実行する際に、エラー「Access denied by authorizer's policy」が発生する場合、どうすれば解決できますか?

このエラーメッセージは、操作を実行する権限がないために返されます。一時的な認証情報を申請する前に、RAM ロールを作成し、必要な権限を RAM ロールに付与する必要があります。詳細については、「ステップ 1.4」をご参照ください。STS サーバーにこの RAM ロールを偽装して一時的な認証情報を取得するリクエストを開始する際に、policy パラメーターを使用して一時的な認証情報の権限をさらに制限します。詳細については、「ステップ 1.5」をご参照ください。

  • policy パラメーターを指定した場合、一時的な認証情報の最終的な権限は、RAM ロールの権限と policy パラメーターで指定された権限の共通部分になります。

    • 例 1

      以下の図では、A は RAM ロールの権限、B は policy パラメーターで指定された権限、C は一時的な認証情報の最終的な権限を示しています。

      1.jpg

    • 例 2

      以下の図では、A は RAM ロールの権限、B は policy パラメーターで指定された権限を示しています。policy パラメーターで指定された権限は、RAM ロールの権限のサブセットです。したがって、B が一時的な認証情報の最終的な権限になります。

      2.jpg

  • policy を設定しない場合、一時的な認証情報は RAM ロールと同じ権限を持ちます。

エラー「The bucket you are attempting to access must be addressed using the specified endpoint」を解決するにはどうすればよいですか?

このエラーメッセージは、ステップ 2 で無効なエンドポイントを指定したために返されます。バケットが配置されているリージョンに基づいて有効なエンドポイントを指定してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

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

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

時刻形式のエラーを解決するにはどうすればよいですか?

時刻形式のエラーが返された場合、考えられる原因は Timestamp パラメーターの値の文字間に不要なスペースがあることです。

時刻は ISO 8601 標準の yyyy-MM-ddTHH:mm:ssZ 形式で指定してください。たとえば、2014 年 5 月 26 日 20:00:00 (UTC+8) を指定するには、2014-05-26T12:00:00Z を使用します。

0003-0000301 エラーを解決するにはどうすればよいですか?

0003-0000301 エラーコードは、一時的な認証情報に指定された操作を実行する権限がないために返されます。0003-00000301 トピックの指示に従ってエラーを修正してください。

関連ドキュメント