All Products
Search
Document Center

Object Storage Service:Mengakses OSS menggunakan kredensial sementara STS

Last Updated:May 09, 2026

Security Token Service (STS) menghasilkan kredensial sementara yang memberikan pengguna akses terbatas waktu ke sumber daya 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 sumber daya 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 untuk 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. Saat kredensial kedaluwarsa, Perusahaan B secara otomatis kehilangan akses, 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 mendapatkan kredensial sementara STS dan meneruskannya ke Perusahaan B. Dengan kredensial tersebut, 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 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. Di halaman Roles, klik Create Role.

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

    image

  5. Di kotak 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 ke role tersebut. Kebijakan ini menentukan izin akses OSS yang diberikan oleh role.

  1. Buat kebijakan kustom untuk unggah file.

    1. Masuk ke Konsol RAM.

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

    3. Di halaman Policies, klik Create Policy.

    4. Di halaman Create Policy, klik tab JSON Editor. Di editor kebijakan, berikan izin kepada role untuk mengunggah file ke examplebucket. Contoh kode berikut disediakan:

      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 Aksi OSS.

    5. Setelah mengonfigurasi kebijakan, klik OK. Di 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. Di halaman Roles, temukan RAM role target RamOssTest.

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

    5. Di 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 demi mendapatkan kredensial sementara; hal ini akan menyebabkan error. Contoh berikut menggunakan pasangan AccessKey RAM user.

  • Setelah memberikan izin unggah file ke role tersebut, RAM user perlu mengasumsikan role untuk mendapatkan 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 mendapatkan kredensial sementara yang memiliki izin unggah simple (oss:PutObject). Untuk contoh SDK STS dalam bahasa pemrograman lainnya, lihat Ikhtisar SDK STS.

  • endpoint dalam contoh kode 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 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 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. 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 demi mendapatkan 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 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 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 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 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 antara 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. Pada 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 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 3 dari variabel lingkungan.
    roleArn := os.Getenv("RAM_ROLE_ARN")

    // Buat klien kebijakan.
    config := &openapi.Config{
        // Wajib. ID AccessKey yang Anda peroleh di Langkah 1.
        AccessKeyId: tea.String(accessKeyId),
        // Wajib. Rahasia AccessKey yang Anda peroleh di Langkah 1.
        AccessKeySecret: tea.String(accessKeySecret),
    }
    // Untuk informasi selengkapnya tentang endpoint, lihat https://api.aliyun.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 3 dari variabel lingkungan.
        RoleArn: tea.String(roleArn),
        // Tentukan nama sesi role kustom. Pada 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 1 dari variabel lingkungan.
$accessKeyId = getenv("ACCESS_KEY_ID");
$accessKeySecret = getenv("ACCESS_KEY_SECRET");
// Peroleh ARN RAM role yang Anda buat di Langkah 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 respons.
    $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 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 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 tersebut dapat memanggil layanan STS untuk mendapatkan 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, 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 di bucket tersebut.

    // Kebijakan berikut membatasi kredensial sementara hanya mengizinkan pengunggahan file ke direktori src di examplebucket.
    // Izin akhir kredensial sementara adalah irisan antara 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 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 1 Sublangkah 5. 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 sumber daya.
        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 respons 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 penyempurnaan komprehensif dari V1 yang menyederhanakan operasi dasar seperti verifikasi identitas, percobaan ulang 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 1 Sublangkah 5. 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 1 Sublangkah 5. 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 1 Sublangkah 5.
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 penyempurnaan komprehensif dari V1 yang menyederhanakan operasi dasar seperti verifikasi identitas, percobaan ulang 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 1 Sublangkah 5. 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 ke Standard.
		Acl:          oss.ObjectACLPrivate,     // Atur daftar kontrol akses (ACL) objek ke 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 1 Sublangkah 5. Sebelum menjalankan contoh kode 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 pada 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 demi akses berotorisasi sementara ke sumber daya OSS.
const getToken = async () => {
  // Atur alamat untuk klien 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 1 Sublangkah 5. 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 1 Sublangkah 5.
      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 1 Sublangkah 5. 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 ke 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 1 Sublangkah 5. 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 1 Sublangkah 5.
  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 demi mendapatkan kredensial sementara di Langkah 1 Sublangkah 5, 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 ke nilai 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 1 Sublangkah 5.

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 1 Sublangkah 5, Anda harus menggunakan pasangan AccessKey RAM user yang Anda hasilkan di Langkah 1 Sublangkah 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 mendapatkan 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 aksi OSS, lihat Kategori Aksi OSS.

Error kebijakan pemberi otorisasi

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 1 Sublangkah 4). Saat mengirim permintaan ke server STS untuk mengasumsikan role ini dan mendapatkan kredensial sementara, Anda dapat menggunakan parameter policy untuk lebih membatasi izin kredensial sementara tersebut (Langkah 1 Sublangkah 5).

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

    • Contoh 1

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

      1.jpg

    • Contoh 2

      Pada gambar berikut, A merepresentasikan izin RAM role, dan B merepresentasikan izin yang diatur oleh parameter policy. Izin yang diatur oleh parameter policy merupakan subset dari izin RAM role. Oleh karena itu, B merepresentasikan 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.

Mendapatkan beberapa kredensial

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

Error format waktu salah

Jika error format waktu salah dilaporkan selama pemanggilan, kemungkinan disebabkan oleh spasi tambahan pada 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 mempratinjau file.