All Products
Search
Document Center

Object Storage Service:Akses OSS menggunakan kredensial sementara STS

Last Updated:Sep 09, 2026

Security Token Service (STS) menghasilkan kredensial sementara yang memberikan pengguna akses terbatas waktu ke resource OSS tertentu sesuai kebijakan yang ditentukan. Kredensial ini kedaluwarsa secara otomatis, sehingga memastikan kontrol akses yang fleksibel dan berbasis durasi.

Kasus penggunaan

Perusahaan e-commerce, Perusahaan A, menyimpan sejumlah besar data produk di Alibaba Cloud OSS. Seorang pemasok, Perusahaan B, perlu secara rutin mengunggah data ke OSS milik Perusahaan A dan mengintegrasikan sistemnya sendiri dengan resource Alibaba Cloud milik Perusahaan A.

Perusahaan A memiliki persyaratan keamanan berikut:

  • Keamanan data: Perusahaan A tidak ingin mengekspos pasangan AccessKey jangka panjangnya kepada Perusahaan B guna mencegah akses tidak sah atau penyalahgunaan data intinya.

  • Kontrol izin: Perusahaan A hanya ingin memberikan izin unggah kepada Perusahaan B pada awalnya dan menyesuaikannya nanti sesuai kebutuhan. Hal ini memberikan kontrol presisi atas hak akses.

  • Manajemen izin: Untuk Perusahaan B dan mitra mendatang, Perusahaan A ingin menghasilkan kredensial untuk setiap mitra atau kebutuhan sementara, sehingga menghilangkan kebutuhan untuk terus-menerus mengelola pasangan AccessKey jangka panjang.

  • Kontrol akses berdurasi terbatas: Perusahaan A ingin membatasi durasi akses data oleh Perusahaan B. Ketika kredensial kedaluwarsa, Perusahaan B secara otomatis kehilangan akses, sehingga memastikan kontrol ketat atas durasi akses.

Cara kerja

Perusahaan A menggunakan kredensial sementara untuk mengotorisasi Perusahaan B agar dapat mengunggah file ke OSS secara aman.

Pertama, Perusahaan A membuat RAM user dan RAM role dengan izin yang diperlukan. Saat Perusahaan B meminta akses, Perusahaan A memanggil operasi AssumeRole untuk memperoleh kredensial sementara STS dan meneruskannya ke Perusahaan B. Dengan kredensial ini, Perusahaan B dapat mengunggah data ke OSS milik Perusahaan A.

Prasyarat

Perusahaan A telah membuat bucket. Untuk informasi selengkapnya, lihat Buat bucket.

Langkah 1: Perusahaan A menerbitkan kredensial sementara

1. Buat RAM user

Gunakan Akun Alibaba Cloud atau RAM user dengan izin administratif RAM untuk membuat RAM user.

  1. Masuk ke Konsol RAM.

  2. Di panel navigasi kiri, pilih Identities > Users.

  3. Klik Create User.

  4. Masukkan Logon Name dan Display Name.

  5. Pada bagian Access Mode, pilih OpenAPI Access lalu klik OK.

  6. Lengkapi verifikasi keamanan sesuai petunjuk.

  7. Salin ID AccessKey dan Rahasia AccessKey.

    Penting

    Rahasia AccessKey RAM user hanya ditampilkan saat pembuatan dan tidak dapat diambil kembali nanti. Unduh file CSV yang berisi pasangan AccessKey tersebut dan simpan dengan aman.

    image

2. Berikan izin AssumeRole kepada RAM user

Setelah membuat RAM user, gunakan Akun Alibaba Cloud atau RAM user dengan izin administratif RAM untuk memberikan izin kepada RAM user tersebut agar dapat memanggil layanan STS dengan mengasumsikan suatu role.

  1. Masuk ke Konsol RAM.

  2. Di panel navigasi kiri, pilih Identities > Users. Di daftar pengguna, temukan RAM user tersebut lalu klik Add Permissions di kolom Actions.

  3. Pada halaman Grant Permission, pilih kebijakan sistem AliyunSTSAssumeRoleAccess.

    Catatan

    Kebijakan AliyunSTSAssumeRoleAccess memberikan izin kepada RAM user untuk memanggil operasi STS AssumeRole. Ini berbeda dari izin yang diberikan oleh role itu sendiri, yang akan diwarisi oleh kredensial sementara.

    image

  4. Klik OK.

3. Buat RAM role

Gunakan Akun Alibaba Cloud atau RAM user dengan izin administratif RAM untuk membuat RAM role. Role ini menentukan izin akses OSS yang diberikan saat diassumsikan.

  1. Masuk ke Konsol RAM.

  2. Di panel navigasi kiri, pilih Identities > Roles.

  3. Pada halaman Roles, klik Create Role.

  4. Pada halaman Create Role, atur Principal Type menjadi Alibaba Cloud Account dan Principal Name menjadi Current Alibaba Cloud Account. Lalu, klik OK.

    image

  5. Pada dialog Create Role, masukkan nama role lalu klik OK.

  6. Klik Copy di samping ARN lalu simpan ARN role tersebut.

    image

4. Berikan izin unggah file kepada RAM role

Setelah membuat RAM role, gunakan Akun Alibaba Cloud atau RAM user dengan izin administratif RAM untuk menyambungkan kebijakan kepadanya. Kebijakan ini menentukan izin akses OSS yang diberikan oleh role tersebut.

  1. Buat kebijakan kustom untuk unggah file.

    1. Masuk ke Konsol RAM.

    2. Di panel navigasi kiri, pilih Permissions > Policies.

    3. Pada halaman Policies, klik Create Policy.

    4. Pada halaman Create Policy, klik tab JSON Editor. Di editor kebijakan, berikan izin kepada role untuk mengunggah file ke examplebucket. Kode berikut merupakan contoh:

      Peringatan

      Contoh berikut hanya untuk referensi. Untuk keamanan optimal, kami menyarankan Anda mengonfigurasi kebijakan otorisasi detail halus untuk menghindari risiko izin berlebihan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kebijakan otorisasi detail halus, lihat Berikan izin kepada pengguna lain menggunakan RAM atau STS.

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

      Izin OSS RAM role ditentukan oleh konfigurasi Action. Misalnya, jika Anda memberikan izin oss:PutObject, RAM user yang mengasumsikan RAM role tersebut dapat melakukan operasi unggah simple, unggah form, unggah append, unggah multi-bagian, dan unggah yang dapat dilanjutkan pada bucket yang ditentukan. Untuk informasi selengkapnya, lihat OSS actions.

    5. Setelah mengonfigurasi kebijakan, klik OK. Pada halaman Edit Basic Information, masukkan nama kebijakan, misalnya RamTestPolicy, lalu klik OK.

  2. Berikan kebijakan kustom kepada RAM role RamOssTest.

    1. Masuk ke Konsol RAM.

    2. Di panel navigasi kiri, pilih Identities > Roles.

    3. Pada halaman Roles, temukan RAM role target RamOssTest.

    4. Klik Add Permissions di kolom Actions untuk RAM role RamOssTest.

    5. Pada halaman Grant Permission, pilih Custom Policy di bagian Select Policy. Lalu, klik kebijakan kustom yang telah dibuat RamTestPolicy di daftar kebijakan.

    6. Klik OK.

5. Asumsikan RAM role dan peroleh kredensial sementara

Penting

Jangan gunakan pasangan AccessKey Akun Alibaba Cloud untuk memanggil operasi API STS guna memperoleh kredensial sementara; hal ini akan menyebabkan error. Contoh berikut menggunakan pasangan AccessKey RAM user.

  • Setelah memberikan izin unggah file kepada role tersebut, RAM user perlu mengasumsikan role tersebut untuk memperoleh kredensial sementara. Kredensial sementara terdiri dari token keamanan, pasangan AccessKey sementara (ID AccessKey dan Rahasia AccessKey), serta waktu kedaluwarsa. Anda dapat menggunakan SDK STS untuk memperoleh kredensial sementara yang memiliki izin unggah simple (oss:PutObject). Untuk contoh SDK STS dalam bahasa pemrograman lainnya, lihat Ikhtisar SDK STS.

  • endpoint dalam kode contoh adalah alamat endpoint STS. Untuk respons STS yang lebih cepat, pilih endpoint STS di wilayah yang sama dengan server Anda, atau yang terdekat. Untuk informasi selengkapnya tentang endpoint STS, lihat Endpoint.

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) { 
        // Endpoint layanan STS. Contoh: sts.cn-hangzhou.aliyuncs.com. Anda dapat mengakses layanan STS melalui internet atau melalui VPC.       
        String endpoint = "sts.cn-hangzhou.aliyuncs.com";
        // Peroleh ID AccessKey dan Rahasia AccessKey RAM user yang Anda buat di Langkah Sub-1 dari variabel lingkungan.
        String accessKeyId = System.getenv("ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ACCESS_KEY_SECRET");
        // Peroleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
        String roleArn = System.getenv("RAM_ROLE_ARN");
        // Tentukan nama sesi role kustom untuk membedakan token yang berbeda. Contoh: SessionTest.        
        String roleSessionName = "yourRoleSessionName";   
        // Secara default, kredensial sementara memiliki semua izin dari role yang diasumsikan.      
        String policy = null;
        // Durasi validitas kredensial sementara dalam detik. Nilai minimum: 900. Nilai maksimum: nilai parameter Maximum Session Duration dari role tersebut. Nilai parameter ini dapat berkisar antara 3.600 hingga 43.200 detik. Nilai default: 3.600 detik.
        // Saat mengunggah file besar atau melakukan operasi lain yang memakan waktu, kami menyarankan Anda menentukan durasi validitas yang cukup untuk menghindari pemanggilan berulang layanan STS guna memperoleh kredensial sementara baru.
        Long durationSeconds = 3600L;
        try {
            // Wilayah tempat permintaan STS diajukan. Kami menyarankan Anda mempertahankan nilai default, yaitu string kosong ("").
            String regionId = "";
            // Tambahkan endpoint. Ini berlaku untuk STS SDK for Java 3.12.0 dan versi lebih baru.
            DefaultProfile.addEndpoint(regionId, "Sts", endpoint);
            // Tambahkan endpoint. Ini berlaku untuk STS SDK for Java versi sebelum 3.12.0.
            // DefaultProfile.addEndpoint("",regionId, "Sts", endpoint);
            // Bangun profil default.
            IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            // Bangun klien.
            DefaultAcsClient client = new DefaultAcsClient(profile);
            final AssumeRoleRequest request = new AssumeRoleRequest();
            // Ini berlaku untuk STS SDK for Java 3.12.0 dan versi lebih baru.
            request.setSysMethod(MethodType.POST);
            // Ini berlaku untuk STS SDK for Java versi sebelum 3.12.0.
            // 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

# Peroleh ID AccessKey dan Rahasia AccessKey RAM user yang Anda buat di Langkah Sub-1 dari variabel lingkungan.
access_key_id = os.getenv("ACCESS_KEY_ID")
access_key_secret = os.getenv("ACCESS_KEY_SECRET")
# Peroleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
role_arn = os.getenv("RAM_ROLE_ARN")

# Buat kebijakan.
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)
# Tentukan nama sesi role kustom untuk membedakan token yang berbeda. Contoh: sessiontest.
request.add_query_param('RoleSessionName', 'sessiontest')
# Tentukan bahwa kredensial sementara STS kedaluwarsa dalam 3.600 detik.
request.add_query_param('DurationSeconds', '3600')
request.set_accept_format('JSON')

body = clt.do_action_with_exception(request)

# Gunakan ID AccessKey dan Rahasia AccessKey RAM user untuk meminta kredensial sementara dari STS.
token = json.loads(oss2.to_unicode(body))
# Cetak pasangan AccessKey sementara (ID AccessKey dan Rahasia AccessKey), token keamanan, dan waktu kedaluwarsa yang dikembalikan oleh STS.
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({
  // Peroleh ID AccessKey dan Rahasia AccessKey RAM user yang Anda buat di Langkah Sub-1 dari variabel lingkungan.
   accessKeyId : process.env.ACCESS_KEY_ID,
   accessKeySecret : process.env.ACCESS_KEY_SECRET
});
  // process.env.RAM_ROLE_ARN digunakan untuk memperoleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
  // Tentukan kebijakan kustom untuk lebih membatasi izin kredensial sementara STS. Jika Anda tidak menentukan kebijakan, kredensial sementara STS yang dikembalikan memiliki semua izin dari role yang ditentukan.
  // Izin akhir kredensial sementara adalah irisan dari izin role yang Anda atur di Langkah 4 dan izin yang Anda atur dalam kebijakan ini.
  // Parameter expiration menentukan periode validitas kredensial sementara dalam detik. Nilai minimum: 900. Nilai maksimum: nilai parameter Maximum Session Duration dari role tersebut. Dalam contoh ini, periode validitas diatur menjadi 3.600 detik.
  // Parameter sessionName menentukan nama sesi role kustom untuk membedakan token yang berbeda. Contoh: 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() {
    // Peroleh ID AccessKey dan Rahasia AccessKey RAM user yang Anda buat di Langkah Sub-1 dari variabel lingkungan.
    accessKeyId := os.Getenv("ACCESS_KEY_ID")
    accessKeySecret := os.Getenv("ACCESS_KEY_SECRET")
    // Peroleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
    roleArn := os.Getenv("RAM_ROLE_ARN")

    // Buat klien kebijakan.
    config := &openapi.Config{
        // Wajib. ID AccessKey yang Anda peroleh di Langkah Sub-1.
        AccessKeyId: tea.String(accessKeyId),
        // Wajib. Rahasia AccessKey yang Anda peroleh di Langkah Sub-1.
        AccessKeySecret: tea.String(accessKeySecret),
    }
    // Untuk informasi selengkapnya tentang endpoint, lihat 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("Gagal membuat klien: %v\n", err)
        return
    }

    // Gunakan ID AccessKey dan Rahasia AccessKey RAM user untuk meminta kredensial sementara dari STS.
    request := &sts20150401.AssumeRoleRequest{
        // Tentukan bahwa kredensial sementara STS kedaluwarsa dalam 3.600 detik.
        DurationSeconds: tea.Int64(3600),
        // Peroleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
        RoleArn: tea.String(roleArn),
        // Tentukan nama sesi role kustom. Dalam contoh ini, gunakan examplename.
        RoleSessionName: tea.String("examplename"),
    }
    response, err := client.AssumeRoleWithOptions(request, &util.RuntimeOptions{})
    if err != nil {
        fmt.Printf("Gagal mengasumsikan role: %v\n", err)
        return
    }

    // Cetak pasangan AccessKey sementara (ID AccessKey dan Rahasia AccessKey), token keamanan, dan waktu kedaluwarsa yang dikembalikan oleh STS.
    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;

// Peroleh ID AccessKey dan Rahasia AccessKey RAM user yang Anda buat di Langkah Sub-1 dari variabel lingkungan.
$accessKeyId = getenv("ACCESS_KEY_ID");
$accessKeySecret = getenv("ACCESS_KEY_SECRET");
// Peroleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
$roleArn = getenv("RAM_ROLE_ARN");

// Inisialisasi klien Alibaba Cloud.
AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
    ->regionId('cn-hangzhou')
    ->asDefaultClient();

try {
    // Buat permintaan STS.
    $result = Sts::v20150401()
        ->assumeRole()
        // Atur ARN role.
        ->withRoleArn($roleArn)
        // Tentukan nama sesi role kustom untuk membedakan token yang berbeda.
        ->withRoleSessionName('sessiontest')
        // Tentukan bahwa kredensial sementara STS kedaluwarsa dalam 3.600 detik.
        ->withDurationSeconds(3600)
        ->request();

    // Peroleh informasi kredensial dari tanggapan.
    $credentials = $result['Credentials'];

    // Cetak pasangan AccessKey sementara (ID AccessKey dan Rahasia AccessKey), token keamanan, dan waktu kedaluwarsa yang dikembalikan oleh STS.
    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) {
    // Tangani exception klien.
    echo $e->getErrorMessage() . PHP_EOL;
} catch (ServerException $e) {
    // Tangani exception server.
    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'

# Atur path folder publik ke subfolder templates di folder saat ini.
set :public_folder, File.dirname(__FILE__) + '/templates'

def get_sts_token_for_oss_upload()
  client = RPCClient.new(
    # Peroleh ID AccessKey dan Rahasia AccessKey RAM user yang Anda buat di Langkah Sub-1 dari variabel lingkungan.
    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: {
      # Peroleh ARN RAM role yang Anda buat di Langkah Sub-3 dari variabel lingkungan.
      "RoleArn": ENV['RAM_ROLE_ARN'],
      # Tentukan bahwa kredensial sementara STS kedaluwarsa dalam 3.600 detik.
      "DurationSeconds": 3600,
      # Parameter sessionName menentukan nama sesi role kustom untuk membedakan token yang berbeda. Contoh: 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"  # Untuk mendengarkan alamat lain seperti 0.0.0.0, Anda harus menambahkan mekanisme autentikasi di server.
$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
  • Kredensial sementara STS adalah sebagai berikut:

    Catatan
    • Akun Alibaba Cloud dan RAM user serta RAM role di bawah akun ini dapat memanggil layanan STS untuk memperoleh kredensial sementara hingga 100 kali per detik. Dalam skenario konkurensi tinggi, kami menyarankan Anda menggunakan kembali kredensial sementara tersebut dalam periode validitasnya.

    • Waktu kedaluwarsa kredensial sementara STS dalam UTC. UTC berada 8 jam di belakang China Standard Time (CST). Misalnya, jika waktu kedaluwarsa kredensial sementara adalah 2024-04-18T11:33:40Z, maka kredensial sementara tersebut kedaluwarsa pada pukul 19:33:40 tanggal 18 April 2024 (UTC+8).

    {
      "AccessKeyId": "STS.****************",
      "AccessKeySecret": "3dZn*******************************************",
      "SecurityToken": "CAIS*****************************************************************************************************************************************",
      "Expiration": "2024-**-*****:**:50Z"
    }
  • Untuk mengonfigurasi izin akses sementara dengan granularitas lebih detail, lihat konten berikut.

    Untuk lebih membatasi izin yang diwarisi dari role, Anda dapat menentukan kebijakan tambahan saat meminta kredensial sementara. Misalnya, jika role diberikan izin untuk mengunggah file ke examplebucket, Anda dapat membatasi kredensial sementara hanya untuk mengunggah file ke direktori tertentu dalam bucket tersebut.

    // Kebijakan berikut membatasi kredensial sementara hanya mengizinkan pengunggahan file ke direktori src di examplebucket.
    // Izin akhir kredensial sementara adalah irisan dari izin role yang diatur di Langkah 4 dan izin yang diatur dalam kebijakan ini, artinya file hanya dapat diunggah ke direktori src di examplebucket.      
    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" +
                    "}";

Langkah 2: Unggah file dengan kredensial sementara

Penting

Karena adanya perubahan kebijakan untuk meningkatkan kepatuhan dan keamanan, mulai 20 Maret 2025, pengguna OSS baru harus menggunakan nama domain kustom (CNAME) untuk melakukan operasi API data pada bucket OSS yang berlokasi di wilayah daratan Tiongkok. Titik akhir publik default dibatasi untuk operasi ini. Lihat pengumuman resmi untuk daftar lengkap operasi yang terdampak. Jika Anda mengakses data melalui HTTPS, Anda harus mengikat Sertifikat SSL yang valid ke domain kustom Anda. Ini wajib untuk akses Konsol OSS, karena konsol menerapkan HTTPS.

Contoh berikut menunjukkan cara menggunakan kredensial sementara untuk mengunggah file ke OSS. Untuk instalasi SDK dan contoh kode lebih lanjut untuk berbagai operasi, seperti unggah dan unduh file, menggunakan kredensial sementara, lihat Referensi SDK.

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 {
        // Tentukan ID AccessKey sementara, Rahasia AccessKey, dan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan kredensial identitas RAM user.
        // Perhatikan bahwa ID AccessKey yang diperoleh dari layanan STS dimulai dengan "STS".
        String accessKeyId = "yourSTSAccessKeyID";
        String accessKeySecret = "yourSTSAccessKeySecret";
        // Tentukan token keamanan yang Anda peroleh dari STS.
        String stsToken= "yourSecurityToken";

        // Gunakan metode DefaultCredentialProvider untuk langsung mengatur ID AccessKey dan Rahasia AccessKey.
        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret, stsToken);
        // Inisialisasi klien menggunakan credentialsProvider.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Secara eksplisit nyatakan bahwa algoritma signature V4 digunakan.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        // Buat instance OSSClient.
        // Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan resource.
        OSS ossClient = OSSClientBuilder.create()
                 // Atur nama domain akses OSS. Contoh untuk wilayah Tiongkok (Hangzhou): https://oss-cn-hangzhou.aliyuncs.com
                .endpoint("endpoint")
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                // Atur wilayah bucket tujuan. Contoh untuk wilayah Tiongkok (Hangzhou): cn-hangzhou
                .region("region")
                .build();

        try {

            // Buat objek PutObjectRequest untuk mengunggah file lokal exampletest.txt ke examplebucket.
            PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampletest.txt", new File("D:\\localpath\\exampletest.txt"));

            // Jika Anda perlu mengatur kelas penyimpanan dan izin akses selama pengunggahan, lihat contoh kode berikut.
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // Unggah file.
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

OSS SDK untuk Python tersedia dalam V2 dan V1. V2 merupakan penyusunan ulang komprehensif dari V1 yang menyederhanakan operasi dasar seperti verifikasi identitas, pengulangan permintaan, dan penanganan error. SDK ini juga menyediakan konfigurasi parameter yang lebih fleksibel dan antarmuka lanjutan baru. Lihat contoh berikut sesuai kebutuhan Anda.

Contoh V2

import alibabacloud_oss_v2 as oss

def main():
    # Tentukan ID AccessKey sementara, Rahasia AccessKey, dan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan kredensial identitas RAM user.
    # Perhatikan bahwa ID AccessKey yang diperoleh dari layanan STS dimulai dengan "STS".
    sts_access_key_id = 'yourSTSAccessKeyID'
    sts_access_key_secret = 'yourSTSAccessKeySecret'
    # Tentukan token keamanan yang Anda peroleh dari STS.
    sts_security_token = 'yourSecurityToken'
    
    # Buat penyedia kredensial statis dan atur secara eksplisit ID AccessKey sementara, Rahasia AccessKey, dan token keamanan.
    credentials_provider = oss.credentials.StaticCredentialsProvider(
        access_key_id=sts_access_key_id,
        access_key_secret=sts_access_key_secret,
        security_token=sts_security_token,
    )

    # Muat konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Tentukan wilayah bucket. Contoh untuk Tiongkok (Hangzhou): cn-hangzhou.
    cfg.region = 'cn-hangzhou'

    # Buat klien OSS menggunakan informasi yang telah dikonfigurasi.
    client = oss.Client(cfg)

    # Path file lokal yang akan diunggah. Contoh: D:\\localpath\\exampletest.txt.
    local_file_path = 'D:\\localpath\\exampletest.txt'
    with open(local_file_path, 'rb') as file:
        data = file.read()

    # Jalankan permintaan unggah objek untuk mengunggah file lokal exampletest.txt ke examplebucket. Tentukan nama bucket, nama objek, dan file yang akan diunggah.
    result = client.put_object(oss.PutObjectRequest(
        # Nama bucket
        bucket='examplebucket',
        # Nama objek yang akan diunggah ke bucket
        key='exampletest.txt',
        body=data,
    ))

     # Keluarkan kode status permintaan, ID permintaan, MD5 konten, ETag, checksum CRC-64, dan ID versi untuk memeriksa apakah permintaan berhasil.
    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},'
    )


# Saat skrip ini dijalankan secara langsung, panggil fungsi main.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Saat file dijalankan secara langsung, fungsi main dipanggil.

Contoh V1

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

# yourEndpoint menentukan endpoint wilayah bucket. Contoh untuk Tiongkok (Hangzhou): https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan ID AccessKey sementara dan Rahasia AccessKey yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan ID AccessKey dan Rahasia AccessKey Akun Alibaba Cloud.
sts_access_key_id = 'yourAccessKeyId'
sts_access_key_secret = 'yourAccessKeySecret'
# Tentukan nama bucket.
bucket_name = 'examplebucket'
# Tentukan path lengkap objek. Path lengkap objek tidak boleh mengandung nama bucket. 
object_name = 'examplebt.txt'
# Tentukan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1.
security_token = 'yourSecurityToken'
# Inisialisasi instance StsAuth menggunakan informasi autentikasi dari kredensial sementara.
auth = oss2.StsAuth(sts_access_key_id,
                    sts_access_key_secret,
                    security_token)
# Inisialisasi bucket menggunakan instance StsAuth.
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# Unggah objek.
result = bucket.put_object(object_name, "hello world")
print(result.status)

Go

OSS SDK untuk Go tersedia dalam V2 dan V1. V2 merupakan penyusunan ulang komprehensif dari V1 yang menyederhanakan operasi dasar seperti verifikasi identitas, pengulangan permintaan, dan penanganan error. SDK ini juga menyediakan konfigurasi parameter yang lebih fleksibel dan antarmuka lanjutan baru. Lihat contoh berikut sesuai kebutuhan Anda.

Contoh V2

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() {
	// Tentukan wilayah bucket. Contoh untuk Tiongkok (Hangzhou): cn-hangzhou.
	region := "cn-hangzhou"

	// Tentukan ID AccessKey sementara, Rahasia AccessKey, dan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan kredensial identitas RAM user.
    // Perhatikan bahwa ID AccessKey yang diperoleh dari layanan STS dimulai dengan "STS".
	accessKeyID := "yourSTSAccessKeyID"
	accessKeySecret := "yourSTSAccessKeySecret"
	// Tentukan token keamanan yang Anda peroleh dari STS.
	stsToken := "yourSecurityToken"

	// Gunakan metode NewStaticCredentialsProvider untuk langsung mengatur ID AccessKey, Rahasia AccessKey, dan token STS.
	provider := credentials.NewStaticCredentialsProvider(accessKeyID, accessKeySecret, stsToken)

	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Tentukan path dan nama file lokal yang akan diunggah. Contoh: D:\\localpath\\exampletest.txt.
	localFile := "D:\\localpath\\exampletest.txt"

	// Buat permintaan untuk mengunggah objek.
	putRequest := &oss.PutObjectRequest{
		Bucket:       oss.Ptr("examplebucket"),      // Nama bucket
		Key:          oss.Ptr("exampletest.txt"),    // Nama objek yang akan diunggah ke bucket
		StorageClass: oss.StorageClassStandard, // Atur kelas penyimpanan objek menjadi Standard.
		Acl:          oss.ObjectACLPrivate,     // Atur daftar kontrol akses (ACL) objek menjadi private.
		Metadata: map[string]string{
			"yourMetadataKey1": "yourMetadataValue1", // Atur metadata objek.
		},
	}

	// Jalankan permintaan unggah objek untuk mengunggah file lokal exampletest.txt ke examplebucket.
	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
	if err != nil {
		log.Fatalf("gagal mengunggah objek dari file %v", err)
	}

	// Cetak hasil unggah objek.
	log.Printf("hasil unggah objek dari file:%#v\n", result)
	
}

Contoh V1

package main

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

func main() {
    // Peroleh kredensial sementara dari variabel lingkungan yang Anda peroleh di Langkah Sub-5 Langkah 1. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, dan OSS_SESSION_TOKEN telah diatur.
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // Buat instance OSSClient.
    // yourEndpoint menentukan endpoint bucket. Contoh untuk Tiongkok (Hangzhou): https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint sesuai wilayah Anda.
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // Tentukan nama bucket. Contoh: examplebucket.
    bucketName := "examplebucket"
    // Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
    objectName := "exampledir/exampleobject.txt"
    // Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt.
    filepath := "D:\\localpath\\examplefile.txt"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // Otorisasi pihak ketiga untuk mengunggah file menggunakan STS.
    err = bucket.PutObjectFromFile(objectName, filepath)
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    fmt.Println("upload success")
}

Node.js

Catatan

Contoh dalam langkah ini bergantung pada axios. Instal terlebih dahulu sebelum menjalankan kode.

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

// Gunakan kredensial sementara untuk menginisialisasi klien OSS di sisi klien untuk akses berotorisasi sementara ke resource OSS.
const getToken = async () => {
  // Atur alamat bagi klien untuk meminta kredensial akses.
  await axios.get("http://localhost:8000/sts").then((token) => {
    const client = new OSS({
       // yourRegion menentukan wilayah bucket. Contoh untuk Tiongkok (Hangzhou): oss-cn-hangzhou.
      region: 'oss-cn-hangzhou',
      // Tentukan ID AccessKey sementara dan Rahasia AccessKey yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan ID AccessKey dan Rahasia AccessKey Akun Alibaba Cloud.
      accessKeyId: token.data.AccessKeyId,
      accessKeySecret: token.data.AccessKeySecret,
      // Tentukan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1.
      stsToken: token.data.SecurityToken,
      authorizationV4: true,
      // Tentukan nama bucket.
      bucket: "examplebucket",
      // Segarkan kredensial sementara.
      refreshSTSToken: async () => {
        const refreshToken = await axios.get("http://localhost:8000/sts");
        return {
          accessKeyId: refreshToken.data.AccessKeyId,
          accessKeySecret: refreshToken.data.AccessKeySecret,
          stsToken: refreshToken.data.SecurityToken,
        };
      },
    });
    // Gunakan kredensial sementara untuk mengunggah file.
    // Tentukan path lengkap objek, tidak termasuk nama bucket. Contoh: exampleobject.jpg.
    // Tentukan path lengkap file lokal. Contoh: 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 {
    // Tentukan ID AccessKey sementara, Rahasia AccessKey, dan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan kredensial identitas RAM user.
    // Perhatikan bahwa ID AccessKey yang diperoleh dari layanan STS dimulai dengan "STS".
    $accessKeyId = 'yourSTSAccessKeyID';
    $accessKeySecret = 'yourSTSAccessKeySecret';
    // Tentukan token keamanan yang Anda peroleh dari STS.
    $securityToken = 'yourSecurityToken';

    // Buat penyedia kredensial menggunakan kelas StaticCredentialsProvider.
    $provider = new StaticCredentialsProvider($accessKeyId, $accessKeySecret, $securityToken);

    // Tentukan endpoint wilayah bucket. Contoh untuk Tiongkok (Hangzhou): https://oss-cn-hangzhou.aliyuncs.com.
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";

    // Tentukan nama bucket. Contoh: examplebucket.
    $bucket= "examplebucket";
    // Tentukan nama objek yang akan diunggah ke bucket.
    $object = "exampletest.txt";
    // Tentukan path file lokal yang akan diunggah. Contoh: D:\\localpath\\exampletest.txt.
    $localFilePath = "D:\\localpath\\exampletest.txt";

    // Anda dapat mengatur header terkait selama pengunggahan, seperti mengatur izin akses menjadi private dan menentukan metadata kustom.
    $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,
        // Tentukan wilayah bucket. Contoh untuk Tiongkok (Hangzhou): cn-hangzhou.
        "region" => "cn-hangzhou"
    );
    
    // Buat klien OSS menggunakan informasi yang telah dikonfigurasi.
    $ossClient = new OssClient($config);
    
     // Kirim permintaan untuk mengunggah file lokal exampletest.txt ke 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 wilayah Tiongkok (Hangzhou) digunakan dalam contoh ini. Tentukan endpoint sesuai wilayah Anda.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Tentukan ID AccessKey sementara dan Rahasia AccessKey yang Anda peroleh di Langkah Sub-5 Langkah 1. Jangan gunakan ID AccessKey dan Rahasia AccessKey Akun Alibaba Cloud.
  access_key_id: 'token.access_key_id',
  access_key_secret: 'token.access_key_secret',
  # Tentukan token keamanan yang Anda peroleh di Langkah Sub-5 Langkah 1.
  sts_token: 'token.security_token'
  )
# Tentukan nama bucket. Contoh: examplebucket.
bucket = client.get_bucket('examplebucket')
# Unggah file.
bucket.put_object('exampleobject.txt', :file => 'D:\test.txt')

FAQ

Error otorisasi

Saat menggunakan RAM user untuk mengasumsikan RAM role guna memperoleh kredensial sementara di Langkah Sub-5 Langkah 1, Anda harus menggunakan pasangan AccessKey RAM user, bukan pasangan AccessKey Akun Alibaba Cloud.

Nilai DurationSeconds tidak valid

Error terjadi karena periode validitas yang ditentukan untuk kredensial sementara berada di luar rentang yang diizinkan. Atur periode validitas berdasarkan prinsip berikut:

  • Jika Anda tidak menyesuaikan durasi sesi maksimum untuk role tersebut, durasi sesi default adalah 3.600 detik. Dalam kasus ini, periode validitas minimum yang dapat Anda atur untuk kredensial sementara menggunakan parameter durationSeconds adalah 900 detik, dan maksimum adalah 3.600 detik.

  • Jika Anda menyesuaikan durasi sesi maksimum untuk role tersebut, periode validitas minimum yang dapat Anda atur untuk kredensial sementara menggunakan parameter durationSeconds adalah 900 detik, dan maksimum adalah nilai durasi sesi maksimum untuk role tersebut. Durasi sesi untuk role dapat diatur antara 3.600 hingga 43.200 detik.

Anda dapat melihat durasi sesi maksimum untuk role di Konsol RAM. Untuk informasi selengkapnya, lihat Lihat RAM role.

Token keamanan tidak valid

Pastikan Anda telah memasukkan token keamanan lengkap yang Anda peroleh di Langkah Sub-5 Langkah 1.

AccessKeyId tidak ada

Kredensial sementara telah kedaluwarsa dan secara otomatis tidak berlaku. Gunakan pasangan AccessKey (AccessKeyId dan AccessKeySecret) untuk meminta kredensial sementara baru dari server aplikasi. Untuk informasi selengkapnya, lihat Langkah 1.5.

Akses anonim dilarang

Saat memperoleh kredensial sementara di Langkah Sub-5 Langkah 1, Anda harus menggunakan pasangan AccessKey RAM user yang Anda hasilkan di Langkah Sub-1 Langkah 1, bukan pasangan AccessKey Akun Alibaba Cloud Anda.

Error NoSuchBucket

Error ini terjadi karena bucket yang ditentukan tidak ada. Periksa nama bucket dan pastikan sudah benar.

Error ACL bucket

Error ini biasanya terjadi karena pengaturan kebijakan yang salah. Untuk informasi selengkapnya tentang persyaratan setiap elemen dalam kebijakan, lihat Ikhtisar kebijakan RAM. Jika Anda perlu memperoleh kredensial sementara dengan izin untuk operasi seperti unggah multi-bagian dan unggah append, Anda harus memberikan izin yang sesuai menggunakan elemen Action dalam kebijakan. Untuk informasi selengkapnya tentang tindakan OSS, lihat Kategori Tindakan OSS.

Error kebijakan otorisator

Error ini biasanya terjadi karena Anda tidak memiliki izin untuk melakukan operasi terkait. Sebelum meminta kredensial sementara, Anda harus membuat RAM role dan memberikan izin kepada role tersebut (Langkah Sub-4 Langkah 1). Saat mengirim permintaan ke server STS untuk mengasumsikan role ini dan memperoleh kredensial sementara, Anda dapat menggunakan parameter policy untuk lebih membatasi izin kredensial sementara tersebut (Langkah Sub-5 Langkah 1).

  • Jika Anda memberikan parameter policy ini, izin akhir kredensial sementara adalah irisan dari kebijakan RAM role dan kebijakan parameter tersebut.

    • Contoh 1

      Dalam gambar berikut, A mewakili izin RAM role, B mewakili izin yang diatur oleh parameter policy, dan C mewakili izin akhir kredensial sementara.

      1.jpg

    • Contoh 2

      Dalam gambar berikut, A mewakili izin RAM role, dan B mewakili izin yang diatur oleh parameter policy. Izin yang diatur oleh parameter policy merupakan subset dari izin RAM role. Oleh karena itu, B mewakili izin akhir kredensial sementara.

      2.jpg

  • Jika Anda menghilangkan parameter policy, kredensial sementara mewarisi semua izin RAM role.

Error endpoint salah

Error ini menunjukkan parameter endpoint di Langkah 2 salah. Tentukan endpoint yang sesuai dengan wilayah bucket. Untuk informasi selengkapnya tentang wilayah dan endpoint, lihat Wilayah dan endpoint.

Memperoleh beberapa kredensial

Ya. Satu permintaan hanya mengembalikan satu set kredensial sementara. Jika Anda ingin memperoleh beberapa set kredensial sementara, Anda perlu mengirim beberapa permintaan. Anda dapat menggunakan beberapa set kredensial sementara secara bersamaan selama periode validitasnya.

Error format waktu salah

Jika error format waktu salah dilaporkan selama pemanggilan, kemungkinan disebabkan oleh spasi tambahan dalam parameter Timestamp. Periksa dan perbaiki.

Timestamp permintaan harus dalam format ISO 8601 dan dalam UTC. Formatnya adalah YYYY-MM-DDThh:mm:ssZ. Misalnya, 2014-05-26T12:00:00Z merepresentasikan pukul 20:00:00 tanggal 26 Mei 2014 (UTC+8).

Menangani kode error 0003-0000301

Kode error 0003-0000301 dikembalikan karena kredensial sementara tidak memiliki izin untuk melakukan operasi OSS. Untuk solusi, lihat 0003-00000301.

Referensi

  • Untuk mempelajari cara membatasi ukuran file, jenis file, atau path unggah saat menggunakan kredensial STS yang dikeluarkan server untuk unggah sisi klien, lihat Ikhtisar.

  • Setelah mengotorisasi unggah file ke OSS dengan kredensial sementara STS, Anda dapat menggunakan URL yang ditandatangani untuk berbagi file dengan pihak ketiga guna pratinjau atau unduh. Untuk informasi selengkapnya, lihat Gunakan URL yang ditandatangani untuk mengunduh atau meninjau file.