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

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

最終更新日:Jul 15, 2025

Security Token Service (STS) を使用すると、一時的なアクセス認証情報を使用して、Object Storage Service (OSS) に保存されているデータへの時間制限付きアクセスを許可できます。一時的なアクセス認証情報の有効期限が切れると、それらを使用してデータにアクセスすることはできなくなります。これは、アクセス制御の柔軟性と適時性を向上させるのに役立ちます。

シナリオ例

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

E コマース企業には、次の情報セキュリティとコンプライアンスの要件があります。

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

  • 権限管理: E コマース企業は、正確で詳細な権限管理を求めています。具体的には、サプライヤーにデータアップロードの権限を付与し、将来の要件の変化に応じてこれらの権限を動的に調整できるようにしたいと考えています。

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

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

ソリューション概要

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

image

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

前提条件

E コマース企業によってバケットが作成されます。詳細については、「バケットを作成する」をご参照ください。

ステップ 1: E コマース企業による一時的なアクセス認証情報の生成

1. RAM ユーザーを作成する

E コマース企業は、Alibaba Cloud アカウントを使用するか、RAM 管理権限を持つ Resource Access Management (RAM) ユーザーとして RAM ユーザーを作成します。

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

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

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

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

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

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

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

    重要

    RAM ユーザーの AccessKey シークレットは、RAM ユーザーを作成するときにのみ取得できます。 AccessKey ペアを含む CSV ファイルをデバイスの安全な場所にダウンロードすることを強くお勧めします。

    image

2. RAM ユーザーに AssumeRole 操作を呼び出す権限を付与する

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

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

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

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

    説明

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

    image

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

3. RAM ロールを作成する

E コマース企業は、以下の手順に従って、Alibaba Cloud アカウントまたは RAM 管理権限を持つ RAM ユーザーを使用して RAM ロールを作成します。

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

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

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

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

    image

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

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

    image

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

RAM ロールが持つ OSS アクセス権限を定義するために、E コマース企業は、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 を呼び出すと、エラーで失敗します。次のサンプルコードでは、RAM ユーザーの AccessKey ペアを使用して一時的なアクセス認証情報を要求します。

  • 以前に作成した RAM ユーザーは、RAM ロールを引き受けて一時的なアクセス認証情報を取得します。一時的なアクセス認証情報には、STS トークン (SecurityToken)、一時的な AccessKey ペア (AccessKey ID と AccessKey シークレット)、および有効期間 (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。インターネットまたは VPC 経由で STS にアクセスできます。
        String endpoint = "sts.cn-hangzhou.aliyuncs.com";
        // ステップ 1.1 で生成された RAM ユーザーの AccessKey ID と AccessKey シークレットを環境変数から取得します。
        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 = "";
            // エンドポイントを指定します。次の行は、Java V3.12.0 以降の STS SDK に適用されます。
            DefaultProfile.addEndpoint(regionId, "Sts", endpoint);
            // エンドポイントを指定します。次の行は、V3.12.0 より前のバージョンの Java 用 STS SDK に適用されます。
            // DefaultProfile.addEndpoint("",regionId, "Sts", endpoint);
            // デフォルトプロファイルを作成します。
            IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            // プロファイルを使用してクライアントを作成します。
            DefaultAcsClient client = new DefaultAcsClient(profile);
            final AssumeRoleRequest request = new AssumeRoleRequest();
            // 次の行は、Java V3.12.0 以降の STS SDK に適用されます。
            request.setSysMethod(MethodType.POST);
            // 次の行は、V3.12.0 より前のバージョンの Java 用 STS SDK に適用されます。
            // 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 シークレットを環境変数から取得します。
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 シークレット、セキュリティトークン、および有効期限を表示します。
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 シークレットを環境変数から取得します。
   accessKeyId : process.env.ACCESS_KEY_ID,
   accessKeySecret : process.env.ACCESS_KEY_SECRET
});
  // process.env.RAM_ROLE_ARN は、ステップ 1.3 で作成された RAM ロールの ARN を取得します。
  // カスタムポリシーを指定して、一時的なアクセス認証情報の権限を制限します。カスタムポリシーを指定しない場合、一時的なアクセス認証情報は、指定された 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 シークレットを環境変数から取得します。
    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 シークレットを提供します。
        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("クライアントの作成に失敗しました: %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("ロールの引き受けに失敗しました: %v\n", err)
        return
    }

    // STS によって返された一時的なアクセス認証情報の AccessKey ID、AccessKey シークレット、セキュリティトークン、および有効期限を表示します    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 シークレットを環境変数から取得します。
$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 シークレット、セキュリティトークン、および有効期限を表示します。
    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 シークレットを環境変数から取得します。
    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"  # 別の IP アドレス (0.0.0.0 など) をリッスンするには、サーバー側で認証メカニズムを実装します。
$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 件の呼び出しを送信して、一時的なアクセス認証情報を要求できます。高い同時実行性のシナリオでは、一時的なアクセス認証情報を再利用することをお勧めします。

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

    {
      "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:一時アクセス認証情報を使用したサプライヤーによるデータアップロード

次のサンプルコードは、取得した一時アクセス認証情報を有効期限内に使用して、指定された 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 シークレット、および STS トークンを指定します。RAM ユーザーの認証情報は使用しないでください。
        // STS によって提供される AccessKey ID は STS で始まることに注意してください。
        String accessKeyId = "yourSTSAccessKeyID";
        String accessKeySecret = "yourSTSAccessKeySecret";
        // STS から取得したセキュリティトークンを指定します。
        String stsToken= "yourSecurityToken";

        // AccessKey ID とシークレットを 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("OSSException がキャッチされました。これは、リクエストが OSS に到達したものの、"
                    + "何らかの理由でエラー応答で拒否されたことを意味します。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエスト ID:" + oe.getRequestId());
            System.out.println("ホスト ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("ClientException がキャッチされました。これは、クライアントが OSS と通信しようとしているときに、"
                    + "ネットワークにアクセスできないなど、重大な内部問題が発生したことを意味します。");
            System.out.println("エラーメッセージ:" + 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 シークレット、および 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 シークレット、および 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 シークレットを指定します。Alibaba Cloud アカウントの AccessKey ID と AccessKey シークレットは使用しないでください。
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 シークレット、および STS トークンを指定します。 RAM ユーザーの認証情報を使用しないでください。
        // STS によって提供される AccessKey ID は STS で始まることに注意してください。
	accessKeyID := "yourSTSAccessKeyID"
	accessKeySecret := "yourSTSAccessKeySecret"
	// STS から取得した STS トークンを指定します。
	stsToken := "yourSecurityToken"

	// NewStaticCredentialsProvider メソッドを使用して、AccessKey ID、AccessKey シークレット、および 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, // オブジェクトのストレージクラスを Standard に設定します。
		Acl:          oss.ObjectACLPrivate,     // オブジェクトの ACL を private に設定します。
		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 シークレット) を使用していることを確認してください。

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 シークレットを指定したために返されます。手順 1.1 で RAM ユーザー用に生成された AccessKey ID と AccessKey シークレットを指定する必要があります。

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」をご参照ください。この RAM ロールを引き受けて一時的なアクセス認証情報を取得するために STS サーバーにリクエストを送信する際に、ポリシーパラメーターを使用して一時的なアクセス認証情報の権限をさらに制限できます。詳細については、「手順 1.5」をご参照ください。

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

    • 例 1

      次の図では、A は RAM ロールの権限、B はポリシーパラメーターで指定された権限、C は一時的なアクセス認証情報の最終的な権限を示しています。

      1.jpg

    • 例 2

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

      2.jpg

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

The bucket you are attempting to access must be addressed using the specified endpoint」というエラーメッセージが返された場合はどうすればよいですか?

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

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

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

時間形式エラーが発生した場合はどうすればよいですか?

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

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

0003-0000301 エラーコードが返された場合はどうすればよいですか?

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

関連トピック