All Products
Search
Document Center

Object Storage Service:OSS Go SDK V2

Last Updated:Jun 03, 2026

GitHub | Panduan Developer OSS Go SDK V2 | API OSS SDK untuk Go

Panduan Cepat

Persiapan lingkungan

Diperlukan Go 1.18 atau versi yang lebih baru.

Gunakan perintah go -version untuk memeriksa versi Go Anda. Jika Go belum terinstal atau versi Anda lebih lama dari 1.18, instal Golang.

Instal SDK

  • Buat direktori proyek dan inisialisasi modul Go.

    mkdir oss-go-example && cd oss-go-example && go mod init oss-go-example
  • Jalankan perintah berikut untuk mendapatkan paket. Kami merekomendasikan versi terbaru agar contoh kode berfungsi dengan benar.

    go get github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss
  • Impor paket SDK.

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

Konfigurasi kredensial akses

Gunakan AccessKey Pengguna RAM untuk mengonfigurasi kredensial akses.

  1. Di Konsol RAM, buat pengguna RAM dengan Access By Using Permanent AccessKey, simpan AccessKey tersebut, lalu berikan izin AliyunOSSFullAccess kepada pengguna RAM tersebut.

  2. Gunakan AccessKey pengguna RAM untuk mengonfigurasi variabel lingkungan.

    Linux

    1. Jalankan perintah berikut untuk menambahkan variabel lingkungan ke file ~/.bashrc.

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. Jalankan perintah berikut untuk menerapkan perubahan.

        source ~/.bashrc
      2. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah diatur.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Jalankan perintah berikut di terminal untuk memeriksa shell default Anda.

      echo $SHELL
      1. Konfigurasikan variabel lingkungan sesuai dengan shell default Anda.

        Zsh

        1. Jalankan perintah berikut untuk menambahkan variabel lingkungan ke file ~/.zshrc.

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. Jalankan perintah berikut untuk menerapkan perubahan.

          source ~/.zshrc
        3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah diatur.

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. Jalankan perintah berikut untuk menambahkan variabel lingkungan ke file ~/.bash_profile.

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. Jalankan perintah berikut untuk menerapkan perubahan.

          source ~/.bash_profile
        3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah diatur.

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. Jalankan perintah berikut di CMD.

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah diatur.

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. Jalankan perintah berikut di PowerShell.

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah diatur.

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Inisialisasi klien

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 berada 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 adalah wajib untuk akses Konsol OSS, karena konsol menerapkan HTTPS.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual Anda, misalnya, ap-southeast-1.
package main

import (
	"context"
	"log"
	"strings"

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

/*
Konfigurasi inisialisasi klien Go SDK V2:

1. Versi signature: Go SDK V2 menggunakan signature v4 secara default untuk memberikan keamanan yang lebih baik.
2. Konfigurasi wilayah: Anda harus menentukan ID wilayah Alibaba Cloud untuk mengidentifikasi wilayah permintaan.
3. Konfigurasi titik akhir:
   - Anda dapat menggunakan parameter endpoint untuk menentukan nama domain kustom untuk permintaan layanan.
   - Jika parameter ini tidak ditentukan, SDK akan secara otomatis membuat titik akhir publik berdasarkan informasi wilayah.
4. Konfigurasi protokol:
   - SDK menggunakan protokol HTTPS secara default untuk membuat titik akhir.
   - Untuk menggunakan HTTP, Anda harus menentukan titik akhir yang dimulai dengan http://.
*/

func main() {
	// Metode 1: Tentukan hanya wilayah (direkomendasikan).
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>") // Tentukan wilayah tempat bucket berada.

	// Metode 2: Tentukan wilayah dan titik akhir.
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("<region-id>").                                // Tentukan wilayah tempat bucket berada.
	//     WithEndpoint("<endpoint>")     // Tentukan titik akhir publik wilayah tempat bucket berada.

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

	// Buat isi unggahan.
	body := strings.NewReader("hi oss")

	// Buat permintaan untuk mengunggah objek.
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr("Your Bucket Name"),      // Nama bucket.
		Key:    oss.Ptr("Your Object Key"),       // Nama objek.
		Body:   body,                             // Konten string yang akan diunggah.
	}

	// Kirim permintaan untuk mengunggah objek.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Cetak hasil operasi unggah.
	log.Printf("Status: %#v\n", result.Status)
	log.Printf("RequestId: %#v\n", result.ResultCommon.Headers.Get("X-Oss-Request-Id"))
	log.Printf("ETag: %#v\n", *result.ETag)
}

Output sukses:

Status: "200 OK"
RequestId: "68746C5FE001B434303B90B6"
ETag: "B22E0DC370A7F7067FACF5F75D7FA385"

Konfigurasi klien

Opsi Konfigurasi

Region

(Wajib) Wilayah tempat permintaan dikirim.

WithRegion("<region-id>")

CredentialsProvider

(Wajib) Kredensial akses untuk mengotentikasi permintaan.

WithCredentialsProvider(provider)

Endpoint

Titik akhir layanan untuk permintaan.

WithEndpoint("oss-<region-id>.aliyuncs.com")

HttpClient

Klien HTTP kustom untuk membuat permintaan.

WithHttpClient(customClient)

RetryMaxAttempts

Jumlah maksimum percobaan ulang permintaan. Default: 3.

WithRetryMaxAttempts(5)

Retryer

Implementasi strategi percobaan ulang kustom.

WithRetryer(customRetryer)

ConnectTimeout

Waktu tunggu untuk membuat koneksi. Default: 5 detik.

WithConnectTimeout(10 * time.Second)

ReadWriteTimeout

Waktu tunggu baca/tulis untuk koneksi. Default: 10 detik.

WithReadWriteTimeout(30 * time.Second)

InsecureSkipVerify

Jika diatur ke true, melewati verifikasi sertifikat SSL. Secara default, verifikasi diaktifkan.

WithInsecureSkipVerify(true)

EnabledRedirect

Jika diatur ke true, mengaktifkan pengalihan HTTP. Pengalihan dinonaktifkan secara default.

WithEnabledRedirect(true)

ProxyHost

URL server proxy.

WithProxyHost("http://user:passswd@proxy.example-***.com")

ProxyFromEnvironment

Jika diatur ke true, menggunakan pengaturan server proxy dari variabel lingkungan.

WithProxyFromEnvironment(true)

UploadBandwidthlimit

Batas bandwidth unggah, dalam KiB/s.

WithUploadBandwidthlimit(10*1024)

DownloadBandwidthlimit

Batas bandwidth unduh, dalam KiB/s.

WithDownloadBandwidthlimit(10*1024)

SignatureVersion

Versi signature untuk menandatangani permintaan. Default: v4.

WithSignatureVersion(oss.SignatureVersionV1)

LogLevel

Tingkat detail untuk pencatatan log klien.

WithLogLevel(oss.LogInfo)

LogPrinter

Menentukan logger kustom untuk menulis pesan log.

WithLogPrinter(customPrinter)

DisableSSL

Jika diatur ke true, klien menggunakan HTTP alih-alih HTTPS. Secara default, klien menggunakan HTTPS.

WithDisableSSL(true)

UsePathStyle

Jika diatur ke true, menggunakan pengalamatan gaya path (misalnya, endpoint/bucket). Secara default, digunakan pengalamatan gaya virtual-hosted (misalnya, bucket.endpoint).

WithUsePathStyle(true)

UseCName

Jika diatur ke true, menggunakan nama domain kustom. Opsi ini dinonaktifkan secara default.

WithUseCName(true)

UseDualStackEndpoint

Jika diatur ke true, menggunakan titik akhir dual-stack. Opsi ini dinonaktifkan secara default.

WithUseDualStackEndpoint(true)

UseAccelerateEndpoint

Jika diatur ke true, menggunakan titik akhir akselerasi transfer. Opsi ini dinonaktifkan secara default.

WithUseAccelerateEndpoint(true)

UseInternalEndpoint

Jika diatur ke true, menggunakan titik akhir internal. Opsi ini dinonaktifkan secara default.

WithUseInternalEndpoint(true)

DisableUploadCRC64Check

Jika diatur ke true, menonaktifkan pemeriksaan CRC64 untuk unggahan. Pemeriksaan ini diaktifkan secara default.

WithDisableUploadCRC64Check(true)

DisableDownloadCRC64Check

Jika diatur ke true, menonaktifkan pemeriksaan CRC64 untuk unduhan. Pemeriksaan ini diaktifkan secara default.

WithDisableDownloadCRC64Check(true)

AdditionalHeaders

Menentukan header tambahan yang akan disertakan dalam perhitungan tanda tangan. Opsi ini hanya berlaku untuk Signature Version 4.

WithAdditionalHeaders([]string{"content-length"})

User-Agent

String kustom untuk ditambahkan ke header User-Agent.

WithUserAgent("user identifier")

Nama domain kustom

Ikat nama domain kustom untuk mengaktifkan pratinjau file berbasis browser dan akselerasi CDN.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir Anda, seperti atau ap-southeast-1.
package main

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

func main() {
	// Tentukan wilayah tempat bucket berada.
	// Tentukan nama domain kustom Anda, misalnya, https://www.example-***.com
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithEndpoint("https://www.example-***.com").
		WithUseCName(true) // Atur parameter ini ke true untuk menggunakan nama domain kustom melalui CNAME.

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi selanjutnya...
}

Kontrol waktu tunggu

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir Anda, seperti atau ap-southeast-1.
package main

import (
	"time"

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

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").             // Wilayah tempat bucket Anda berada.
		WithConnectTimeout(10 * time.Second).  // Waktu tunggu koneksi. Default 5 detik.
		WithReadWriteTimeout(30 * time.Second) // Waktu tunggu baca/tulis. Default 10 detik.

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi lebih lanjut...
}

Jumlah maksimum percobaan ulang

OSSClient mencoba ulang permintaan yang gagal sebanyak 3 kali secara default.

Gunakan WithRetryMaxAttempts untuk meningkatkan jumlah percobaan ulang pada beban kerja konkurensi tinggi atau jaringan yang tidak stabil.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir, seperti atau ap-southeast-1.
package main

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

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>"). // Menentukan wilayah bucket.
		WithRetryMaxAttempts(5)    // Menetapkan jumlah maksimum percobaan ulang. Default adalah 3.

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk operasi selanjutnya...
}

Protokol HTTP/HTTPS

Gunakan WithDisableSSL(true) untuk menonaktifkan protokol HTTPS.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual, seperti atau ap-southeast-1.
package main

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

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>"). // Tentukan wilayah tempat bucket berada.
		WithDisableSSL(true)       // Nonaktifkan protokol HTTPS, yang diaktifkan secara default.

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

	// Gunakan klien untuk operasi selanjutnya...
}

Server proxy

Gunakan WithProxyHost untuk mengarahkan permintaan OSS melalui server proxy.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir, seperti ap-southeast-1.
package main

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

func main() {
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").                                 // Tentukan wilayah tempat bucket berada.
		WithUserAgent("aliyun-sdk-go").                            // Atur user agent untuk header User-Agent HTTP.
		WithProxyHost("http://user:passswd@proxy.example-***.com") // Atur server proxy, misalnya "http://user:passswd@proxy.example-***.com".

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi selanjutnya...
}

Titik akhir internal

Gunakan titik akhir internal ketika aplikasi Anda berjalan pada instance ECS di wilayah yang sama dengan bucket untuk mengurangi biaya dan latensi.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan Wilayah dan Titik Akhir Anda, seperti atau ap-southeast-1.
package main

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

func main() 
	// Metode 1: Tentukan wilayah dan atur WithUseInternalEndpoint ke true.
	// Tentukan wilayah tempat bucket berada.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithUseInternalEndpoint(true)

	// Metode 2: Langsung tentukan wilayah dan titik akhir.
	// Tentukan titik akhir internal yang sesuai dengan wilayah bucket.
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithRegion("<region-id>").
	// 	WithEndpoint("<endpoint>")

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

	// Gunakan klien ini untuk operasi lebih lanjut.

}

Titik akhir dipercepat

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan ID wilayah dan titik akhir Anda, seperti ap-southeast-1.
package main

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

func main() {
	// Metode 1: Tentukan wilayah dan atur WithUseAccelerateEndpoint ke true.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithUseAccelerateEndpoint(true)

	// Metode 2: Langsung tentukan wilayah dan titik akhir.
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithRegion("<region-id>").
	// 	WithEndpoint("https://oss-accelerate.aliyuncs.com").

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi...
}

Domain privat

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan ID yang benar berdasarkan wilayah dan titik akhir Anda, seperti ap-southeast-1.
package main

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

func main() {
	// Tentukan wilayah yang berisi bucket.
	// Tentukan domain privat Anda. Contoh: https://service.corp.example.com
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>").
		WithEndpoint("https://service.corp.example.com")

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi selanjutnya...
}

Titik akhir cloud pemerintah

Contoh berikut menunjukkan cara mengonfigurasi klien OSS untuk menggunakan titik akhir cloud pemerintah.

package main

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

func main() {
	// Tentukan wilayah tempat bucket berada dan titik akhir internal yang sesuai.
	// Misalnya, untuk wilayah China North 2 Ali Gov 1, atur Region ke "cn-north-2-gov-1" dan Endpoint ke "https://oss-cn-north-2-gov-1-internal.aliyuncs.com".
	// Untuk menggunakan protokol HTTP, gunakan titik akhir HTTP: "http://oss-cn-north-2-gov-1-internal.aliyuncs.com".
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-north-2-gov-1").
		WithEndpoint("https://oss-cn-north-2-gov-1-internal.aliyuncs.com")

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi lebih lanjut...
}

Akses bucket CloudBox

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual, seperti ap-southeast-1.
package main

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

func main() {
	// Metode 1: Deteksi ID CloudBox secara otomatis.
	// Tentukan wilayah tempat bucket berada.
	// Atur titik akhir ke nama domain data bucket CloudBox. Contoh: http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com
	// Atur WithEnableAutoDetectCloudBoxId ke true untuk mendeteksi ID CloudBox secara otomatis.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithEndpoint("http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com").
		WithEnableAutoDetectCloudBoxId(true)

	// Metode 2: Atur ID CloudBox secara manual.
	// Tentukan wilayah tempat bucket berada.
	// Atur titik akhir ke nama domain data bucket CloudBox. Contoh: http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com
	// Tentukan ID CloudBox secara manual. Contoh: cb-xxxxxx
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithEndpoint("http://cb-xxxxxx.<region-id>.oss-cloudbox.aliyuncs.com").
	// 	WithCloudBoxId("cb-xxxxxx")

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk operasi OSS...
}

Kustomisasi klien HTTP

Gunakan WithHTTPClient untuk mengganti klien HTTP default ketika parameter standar tidak mencukupi.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual Anda, seperti atau ap-southeast-1.
package main

import (
	"crypto/tls"
	"net/http"
	"time"

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

func main() {
	// Pengaturan umum waktu tunggu atau lainnya.
	transConfig := transport.Config{
		// Waktu tunggu koneksi. Default: 5 detik.
		ConnectTimeout: oss.Ptr(10 * time.Second),
		// Waktu tunggu untuk membaca data dari dan menulis data ke koneksi. Default: 10 detik.
		ReadWriteTimeout: oss.Ptr(20 * time.Second),
		// Waktu tunggu koneksi idle. Default: 50 detik.
		IdleConnectionTimeout: oss.Ptr(40 * time.Second),
		// Waktu tunggu keep-alive untuk koneksi jaringan. Default: 30 detik.
		KeepAliveTimeout: oss.Ptr(40 * time.Second),
		// Mengaktifkan pengalihan HTTP. Dinonaktifkan secara default.
		EnabledRedirect: oss.Ptr(true),
	}

	// Pengaturan http.Transport.
	var transports []func(*http.Transport)
	// Jumlah maksimum koneksi. Default: 100.
	transports = append(transports, transport.MaxConnections(200))
	// Waktu maksimum untuk menunggu header respons pertama dari server setelah header permintaan ditulis jika permintaan memiliki header 'Expect: 100-Continue'. Default: 1 detik.
	transports = append(transports, transport.ExpectContinueTimeout(2*time.Second))
	// Versi TLS minimum. Default: TLS 1.2.
	transports = append(transports, transport.TLSMinVersion(tls.VersionTLS13))
	// Melewati verifikasi sertifikat. Default adalah false (sertifikat diverifikasi).
	transports = append(transports, transport.InsecureSkipVerify(true))
	// Untuk parameter transport lebih lanjut, lihat https://pkg.go.dev/net/http#Transport.
	// Buat klien HTTP kustom.
	customClient := transport.NewHttpClient(&transConfig, transports...)

	cfg := oss.LoadDefaultConfig().
		WithHttpClient(customClient).
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("<region-id>")

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	// Gunakan klien untuk melakukan operasi selanjutnya...
}

Konfigurasi kredensial akses

Pilih metode kredensial yang sesuai dengan kebutuhan autentikasi Anda.

Cara Memilih Kredensial Akses?

Metode

Skenario

Prasyarat

Jenis

Periode validitas

Rotasi atau refresh

RAM user AK

Untuk aplikasi di lingkungan aman yang memerlukan akses jangka panjang ke layanan cloud.

Ya

AK

Jangka panjang

Rotasi manual

Kredensial akses sementara STS

Untuk aplikasi di lingkungan tidak tepercaya yang memerlukan kontrol atas izin akses dan validitas kredensial.

Ya

Token STS

Sementara

Refresh manual

RAMRoleARN

Untuk aplikasi yang memerlukan akses delegasi ke layanan cloud, seperti mengakses sumber daya di akun Alibaba Cloud lain.

Ya

Token STS

Sementara

Refresh otomatis

ECSRAMRole

Untuk aplikasi yang dideploy pada instance ECS Alibaba Cloud, instance ECI, atau node pekerja Container Service for Kubernetes (ACK).

Tidak

Token STS

Sementara

Refresh otomatis

OIDCRoleARN

Untuk aplikasi tidak tepercaya yang dideploy pada node pekerja Container Service for Kubernetes (ACK).

Tidak

Token STS

Sementara

Refresh otomatis

Penyedia kredensial kustom

Implementasikan penyedia kustom untuk mengambil kredensial ketika metode lain tidak sesuai.

Kustom

Kustom

Kustom

Kustom

Rantai penyedia kredensial default

Jika klien diinisialisasi tanpa parameter, secara otomatis menggunakan rantai ini untuk menemukan kredensial.

Kustom

Kustom

Kustom

Kustom

Gunakan AK pengguna RAM

Untuk akses jangka panjang di lingkungan aman, inisialisasi penyedia kredensial dengan pasangan AccessKey pengguna RAM (ID AccessKey dan rahasia AccessKey). Manajemen kunci manual meningkatkan risiko keamanan.

Peringatan
  • Akun Alibaba Cloud memiliki izin penuh atas sumber daya. Kebocoran pasangan AccessKey menimbulkan risiko keamanan signifikan. Gunakan pasangan AccessKey pengguna RAM dengan izin minimal yang diperlukan.

  • Untuk membuat pasangan AccessKey untuk pengguna RAM, lihat Buat AccessKey. ID AccessKey dan rahasia AccessKey hanya ditampilkan saat Anda membuatnya. Simpan dengan aman. Jika Anda lupa rahasia AccessKey, Anda harus membuat pasangan AccessKey baru.

Variabel lingkungan

  1. Atur variabel lingkungan menggunakan pasangan AccessKey pengguna RAM.

    Linux

    1. Jalankan perintah berikut di CLI untuk menambahkan konfigurasi variabel lingkungan ke file ~/.bashrc:

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. Terapkan perubahan.

        source ~/.bashrc
      2. Periksa apakah variabel lingkungan telah berlaku:

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Jalankan perintah berikut di terminal untuk melihat jenis shell default:

      echo $SHELL
      1. Konfigurasikan variabel lingkungan berdasarkan jenis shell default.

        Zsh

        1. Jalankan perintah berikut untuk menambahkan konfigurasi variabel lingkungan ke file ~/.zshrc:

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. Terapkan perubahan.

          source ~/.zshrc
        3. Periksa apakah variabel lingkungan telah berlaku:

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. Jalankan perintah berikut untuk menambahkan konfigurasi variabel lingkungan ke file ~/.bash_profile:

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        2. Terapkan perubahan.

          source ~/.bash_profile
        3. Periksa apakah variabel lingkungan telah berlaku:

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. Jalankan perintah berikut di CMD:

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. Periksa apakah variabel lingkungan berlaku:

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. Jalankan perintah berikut di PowerShell:

      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      1. Periksa apakah variabel lingkungan berlaku:

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Setelah mengatur variabel lingkungan sistem, restart atau refresh lingkungan pengembangan Anda, termasuk IDE, antarmuka baris perintah, aplikasi desktop, dan layanan latar belakang, untuk memuat variabel baru.

  3. Muat kredensial dari variabel lingkungan.

    Sebelum menjalankan kode contoh ini, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual Anda, seperti atau ap-southeast-1.
    package main
    
    import (
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    func main() {
    	// Atur wilayah berdasarkan kebutuhan Anda.
    	region := "<region-id>"
    
    	// Muat kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
    	provider := credentials.NewEnvironmentVariableCredentialsProvider()
    
    	// Muat konfigurasi default, lalu atur penyedia kredensial dan wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Kredensial statis

Kode berikut menunjukkan cara menyematkan kredensial statis langsung di aplikasi Anda.

Peringatan

Jangan menyematkan kredensial akses di kode aplikasi untuk lingkungan produksi. Metode ini hanya untuk tujuan pengujian.

Sebelum menjalankan kode contoh ini, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual Anda, seperti atau ap-southeast-1.
package main

import (
	"log"

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

func main() {
	// Atur wilayah berdasarkan kebutuhan Anda.
	region := "<region-id>"

	// Tentukan ID AccessKey dan rahasia AccessKey pengguna RAM.
	accessKeyID := "yourAccessKeyID"
	accessKeySecret := "yourAccessKeySecret"

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

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

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

	log.Printf("ossclient: %v", client)
}

Kredensial akses sementara STS

Untuk akses OSS sementara, inisialisasi penyedia kredensial dengan kredensial STS (ID AccessKey, rahasia AccessKey, dan token keamanan). Metode ini memerlukan manajemen dan refresh token secara manual.

Penting

Variabel lingkungan

  1. Atur variabel lingkungan dengan kredensial akses sementara Anda.

    Mac OS X/Linux/Unix

    Peringatan
    • Perhatikan bahwa kredensial yang digunakan di sini adalah kredensial akses sementara (ID AccessKey, rahasia AccessKey, dan token keamanan) dari STS, bukan ID AccessKey dan rahasia AccessKey pengguna RAM.

    • ID AccessKey dari STS diawali dengan STS., misalnya, STS.****************.

    export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

    Windows

    Peringatan
    • Perhatikan bahwa kredensial yang digunakan di sini adalah kredensial akses sementara (ID AccessKey, rahasia AccessKey, dan token keamanan) dari STS, bukan ID AccessKey dan rahasia AccessKey pengguna RAM.

    • ID AccessKey dari STS diawali dengan STS., misalnya, STS.****************.

    set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
    set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
    set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>
  2. Muat kredensial dari variabel lingkungan.

    Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual, seperti atau ap-southeast-1.
    package main
    
    import (
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    func main() {
    	// Atur wilayah berdasarkan kebutuhan Anda.
    	region := "<region-id>"
    
    	// Muat kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, dan OSS_SESSION_TOKEN telah diatur.
    	provider := credentials.NewEnvironmentVariableCredentialsProvider()
    
    	// Muat konfigurasi default, lalu atur penyedia kredensial dan wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Kredensial statis

Anda dapat menyematkan kredensial akses sementara langsung di aplikasi Anda.

Peringatan

Jangan menyematkan kredensial akses di kode produksi. Metode ini hanya untuk pengujian.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir aktual, seperti atau ap-southeast-1.
package main

import (
	"log"

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

func main() {
	// Atur wilayah berdasarkan kebutuhan Anda.
	region := "<region-id>"

	// Gunakan kredensial akses sementara (ID AccessKey, rahasia AccessKey, dan token keamanan) dari STS.
	// Jangan gunakan kredensial pengguna RAM.
    // Perhatikan bahwa ID AccessKey dari STS diawali dengan `STS.`.
	accessKeyID := "STS.****************"
	accessKeySecret := "yourAccessKeySecret"
	// Tentukan token keamanan 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, lalu atur penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

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

	log.Printf("ossclient: %v", client)
}

Gunakan RAMRoleARN

Untuk akses OSS lintas akun atau delegasi, gunakan RAMRoleARN. Tentukan ARN role RAM, dan alat Credentials secara otomatis mendapatkan serta merefresh token STS melalui API AssumeRole. Gunakan parameter policy untuk membatasi izin.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas sumber daya. Kebocoran kunci akses menimbulkan risiko keamanan signifikan. Gunakan kunci akses pengguna RAM dengan izin minimal yang diperlukan.

  • Untuk membuat kunci akses untuk pengguna RAM, kunjungi Buat kunci akses. ID kunci akses dan rahasia kunci akses hanya ditampilkan saat pembuatan. Simpan dengan aman. Jika Anda kehilangannya, buat kunci akses baru dan rotasi kredensial Anda.

  • Untuk mendapatkan RAMRoleARN, kunjungi Buat role.

  1. Tambahkan dependensi kredensial.

    go get github.com/aliyun/credentials-go/credentials
  2. Konfigurasikan kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah aktual, seperti atau ap-southeast-1.
    package main
    
    import (
    	"context"
    	"log"
    	"os"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    	openapicred "github.com/aliyun/credentials-go/credentials"
    )
    
    func main() {
    	// Atur wilayah berdasarkan kebutuhan Anda.
    	region := "<region-id>"
    
    	config := new(openapicred.Config).
    		// Tentukan jenis kredensial. Nilai ini harus ram_role_arn.
    		SetType("ram_role_arn").
    		// Dapatkan ID kunci akses dan rahasia kunci akses untuk pengguna RAM dari variabel lingkungan.
    		SetAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
    		SetAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
    		// Parameter berikut diatur dengan string placeholder. Di lingkungan produksi, Anda harus memuat nilai-nilai ini dari sumber aman, seperti variabel lingkungan.
    		// Tentukan ARN role RAM yang akan diasumsikan. Formatnya adalah acs:ram::$accountID:role/$roleName.
    		SetRoleArn("ALIBABA_CLOUD_ROLE_ARN"). // Variabel lingkungan konvensional untuk RoleArn adalah ALIBABA_CLOUD_ROLE_ARN.
    		// Tentukan nama sesi role kustom untuk membedakan antara token yang berbeda.
    		SetRoleSessionName("ALIBABA_CLOUD_ROLE_SESSION_NAME"). // Variabel lingkungan konvensional untuk RoleSessionName adalah ALIBABA_CLOUD_ROLE_SESSION_NAME.
    		// (Opsional) Batasi izin token STS.
    		SetPolicy("Policy").
    		// (Opsional) Tentukan periode validitas token STS.
    		SetRoleSessionExpiration(3600)
    
    	arnCredential, gerr := openapicred.NewCredential(config)
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		if gerr != nil {
    			return credentials.Credentials{}, gerr
    		}
    		cred, err := arnCredential.GetCredential()
    		if err != nil {
    			return credentials.Credentials{}, err
    		}
    		return credentials.Credentials{
    			AccessKeyID:     *cred.AccessKeyId,
    			AccessKeySecret: *cred.AccessKeySecret,
    			SecurityToken:   *cred.SecurityToken,
    		}, nil
    	})
    
    	// Muat konfigurasi default, dan atur penyedia kredensial dan wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Gunakan ECSRAMRole

Untuk aplikasi pada ECS, ECI, atau node pekerja Container Service for Kubernetes, gunakan ECSRAMRole. Ini mengaitkan role dengan ECS, ECI, atau node pekerja Container Service for Kubernetes untuk secara otomatis merefresh token STS, sehingga menghilangkan manajemen kredensial manual. Buat role sebelum melanjutkan.

  1. Tambahkan dependensi kredensial.

    go get github.com/aliyun/credentials-go/credentials
  2. Konfigurasikan kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir Anda, seperti atau ap-southeast-1.
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    	openapicred "github.com/aliyun/credentials-go/credentials"
    )
    
    func main() {
    	// Atur wilayah.
    	region := "<region-id>"
    
    	config := new(openapicred.Config).
    		// Tentukan jenis kredensial. Atur nilainya ke ecs_ram_role.
    		SetType("ecs_ram_role").
    		// (Opsional) Tentukan nama role. Jika diabaikan, klien OSS akan menemukannya secara otomatis. Disarankan untuk menentukan nama role untuk mengurangi permintaan.
    		SetRoleName("RoleName")
    
    	arnCredential, gerr := openapicred.NewCredential(config)
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		if gerr != nil {
    			return credentials.Credentials{}, gerr
    		}
    		cred, err := arnCredential.GetCredential()
    		if err != nil {
    			return credentials.Credentials{}, err
    		}
    		return credentials.Credentials{
    			AccessKeyID:     *cred.AccessKeyId,
    			AccessKeySecret: *cred.AccessKeySecret,
    			SecurityToken:   *cred.SecurityToken,
    		}, nil
    	})
    
    	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Gunakan OIDCRoleARN

Untuk aplikasi tidak tepercaya pada node pekerja Container Service for Kubernetes (ACK), gunakan RRSA berbasis OIDC untuk menerapkan hak istimewa minimal tingkat pod alih-alih berbagi token metadata-service node. ACK memasang file token OIDC per pod; alat Credentials membacanya dan memanggil AssumeRoleWithOIDC untuk mendapatkan token STS secara otomatis. Gunakan RRSA untuk mengonfigurasi izin RAM untuk akun layanan guna mengisolasi izin pod.

  1. Tambahkan dependensi kredensial.

    go get github.com/aliyun/credentials-go/credentials
  2. Konfigurasikan kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir Anda, seperti atau ap-southeast-1.
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    	openapicred "github.com/aliyun/credentials-go/credentials"
    )
    
    func main() {
    	// Tentukan wilayah.
    	region := "<region-id>"
    
    	config := new(openapicred.Config).
    		// Jenis kredensial. Harus "oidc_role_arn".
    		SetType("oidc_role_arn").
    		// Tentukan ARN penyedia OIDC. Formatnya adalah acs:ram::account-id:oidc-provider/provider-name.
    		SetOIDCProviderArn("OIDCProviderArn").
    		// Tentukan path ke file token OIDC.
    		SetOIDCTokenFilePath("OIDCTokenFilePath").
    		// Tentukan nama sesi role kustom untuk membedakan antara token.
    		SetRoleSessionName("RoleSessionName"). // Variabel lingkungan default untuk RoleSessionName adalah ALIBABA_CLOUD_ROLE_SESSION_NAME.
    		// (Opsional) Tentukan kebijakan yang akan digunakan saat mengasumsikan role.
    		SetPolicy("Policy").
    		// ARN role ram yang akan diasumsikan, dalam format acs:ram::account-id:role/role-name.
    		SetRoleArn("RoleArn").
    		// Durasi sesi dalam detik.
    		SetSessionExpiration(3600)
    
    	arnCredential, gerr := openapicred.NewCredential(config)
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		if gerr != nil {
    			return credentials.Credentials{}, gerr
    		}
    		cred, err := arnCredential.GetCredential()
    		if err != nil {
    			return credentials.Credentials{}, err
    		}
    		return credentials.Credentials{
    			AccessKeyID:     *cred.AccessKeyId,
    			AccessKeySecret: *cred.AccessKeySecret,
    			SecurityToken:   *cred.SecurityToken,
    		}, nil
    	})
    
    	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Penyedia kredensial kustom

Implementasikan penyedia kustom jika metode standar tidak memenuhi kebutuhan Anda.

  1. Gunakan antarmuka credentials.CredentialsProviderFunc

    Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir yang valid, seperti ap-southeast-1.
    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() {
    	// Atur wilayah berdasarkan kebutuhan Anda.
    	region := "<region-id>"
    
    	// Buat penyedia kredensial kustom.
    	provider := credentials.CredentialsProviderFunc(func(ctx context.Context) (credentials.Credentials, error) {
    		// Kembalikan kredensial jangka panjang.
    		return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret"}, nil
    		// Kembalikan kredensial sementara.
    		//return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret",    SecurityToken: "token"}, nil
    	})
    
    	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    
  2. Implementasikan antarmuka credentials.CredentialsProvider

    Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir yang valid, seperti ap-southeast-1.
    package main
    
    import (
    	"context"
    	"log"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    type CustomerCredentialsProvider struct {
    	// TODO
    }
    
    func NewCustomerCredentialsProvider() CustomerCredentialsProvider {
    	return CustomerCredentialsProvider{}
    }
    
    func (s CustomerCredentialsProvider) GetCredentials(_ context.Context) (credentials.Credentials, error) {
    	// Kembalikan kredensial jangka panjang.
    	return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret"}, nil
    	// Kembalikan kredensial sementara.
    	//return credentials.Credentials{AccessKeyID: "id", AccessKeySecret: "secret",    SecurityToken: "token"}, nil
    }
    
    func main() {
    	// Atur wilayah berdasarkan kebutuhan Anda.
    	region := "<region-id>"
    
    	// Buat penyedia kredensial kustom.
    	provider := NewCustomerCredentialsProvider()
    
    	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Gunakan rantai penyedia kredensial default

Jika tidak ada parameter yang diberikan, SDK menggunakan rantai penyedia kredensial default untuk menemukan kredensial secara otomatis.

Sebelum menjalankan kode contoh, ganti placeholder <region-id> dengan wilayah dan titik akhir Anda, seperti atau ap-southeast-1.
package main

import (
	"context"
	"log"

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

func main() {
	// Atur wilayah berdasarkan kebutuhan Anda.
	region := "<region-id>"
	// Mengirimkan nil menggunakan rantai penyedia kredensial default untuk menemukan kredensial.
	arnCredential, gerr := credentials.NewCredential(nil)
	provider := osscred.CredentialsProviderFunc(func(ctx context.Context) (osscred.Credentials, error) {
		if gerr != nil {
			return osscred.Credentials{}, gerr
		}
		cred, err := arnCredential.GetCredential()
		if err != nil {
			return osscred.Credentials{}, err
		}

		return osscred.Credentials{
			AccessKeyID:     *cred.AccessKeyId,
			AccessKeySecret: *cred.AccessKeySecret,
			SecurityToken:   *cred.SecurityToken,
		}, nil
	})

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

	// Buat klien OSS.
	client := oss.NewClient(cfg)
	log.Printf("ossclient: %v", client)
}

Pemecahan Masalah

Kesalahan OSS mencakup kode status HTTP, pesan, ID permintaan, dan kode kesalahan EC. Gunakan kode EC untuk mengidentifikasi akar penyebabnya.

  1. Sebagai contoh, saat Anda menggunakan kode berikut untuk mengunduh objek yang tidak ada:

    package main
    
    import (
    	"context"
    	"flag"
    	"io"
    	"log"
    	"os"
    
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
    	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
    )
    
    // Definisikan variabel global.
    var (
    	region     string // Wilayah tempat bucket berada.
    	bucketName string // Nama bucket.
    	objectName string // Nama objek.
    )
    
    // Fungsi init menginisialisasi parameter baris perintah.
    func init() {
    	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
    	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
    	flag.StringVar(&objectName, "object", "", "Nama objek.")
    }
    
    func main() {
    	// Parsing parameter baris perintah.
    	flag.Parse()
    
    	// Periksa apakah nama bucket kosong.
    	if len(bucketName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
    	}
    
    	// Periksa apakah wilayah kosong.
    	if len(region) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("parameter tidak valid, wilayah diperlukan")
    	}
    
    	// Periksa apakah nama objek kosong.
    	if len(objectName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("parameter tidak valid, nama objek diperlukan")
    	}
    
    	// Definisikan path file output.
    	outputFile := "downloaded.txt" // Ganti dengan path file yang diinginkan.
    
    	// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// Buat klien OSS.
    	client := oss.NewClient(cfg)
    
    	// Buat permintaan untuk mendapatkan objek.
    	request := &oss.GetObjectRequest{
    		Bucket: oss.Ptr(bucketName), // Nama bucket.
    		Key:    oss.Ptr(objectName), // Nama objek.
    	}
    
    	// Dapatkan objek dan proses hasilnya.
    	result, err := client.GetObject(context.TODO(), request)
    	if err != nil {
    		log.Fatalf("gagal mendapatkan objek %v", err)
    	}
    	defer result.Body.Close() // Pastikan badan respons ditutup saat fungsi selesai.
    
    	// Baca seluruh konten objek sekaligus.
    	data, err := io.ReadAll(result.Body)
    	if err != nil {
    		log.Fatalf("gagal membaca objek %v", err)
    	}
    
    	// Tulis konten ke file.
    	err = os.WriteFile(outputFile, data, 0644)
    	if err != nil {
    		log.Fatalf("gagal menulis ke file output %v", err)
    	}
    
    	log.Printf("file berhasil diunduh ke %s", outputFile)
    }
    
  2. Berikut adalah contoh pesan kesalahan yang dikembalikan. Ini mencakup kode kesalahan EC 'EC': '0026-00000001', yang secara unik mengidentifikasi penyebab kesalahan.

    2025/03/07 15:13:46 gagal mendapatkan objek operation error GetObject: Error returned by Service.
    Kode Status Http: 404.
    Kode Kesalahan: NoSuchKey.
    ID Permintaan: 67CA9CAADC44E03938AD91F0.
    Pesan: The specified key does not exist..
    EC: 0026-00000001.
    Timestamp: 2025-03-07 07:13:46 +0000 UTC.
    Titik Akhir Permintaan: GET https://xxx.oss-cn-hangzhou.aliyuncs.com/asdgkhfk.
  3. Untuk memecahkan masalah kesalahan menggunakan kode kesalahan EC dari contoh, ikuti langkah-langkah berikut:

    1. Buka Platform Diagnosis Mandiri OpenAPI.

    2. Di kotak pencarian, masukkan kode kesalahan EC, misalnya 0026-00000001. Lalu, tempel pesan kesalahan yang berisi ID permintaan ke kotak teks dan klik Diagnose.

    3. Hasil pencarian memberikan penyebab kesalahan dan solusinya. Untuk kode kesalahan EC 0026-00000001, diagnosis menunjukkan bahwa objek target tidak ada. Kemungkinan penyebabnya termasuk unggahan objek gagal, penghapusan yang dipicu oleh aturan siklus hidup, penghapusan oleh pengguna lain, atau penghapusan yang disinkronkan oleh replikasi lintas wilayah. Solusinya adalah memverifikasi keberadaan objek dengan HeadObject, melihat informasi versi dengan ListObjectVersions, dan memeriksa konvensi penamaan objek, aturan siklus hidup, izin pengguna, dan aturan replikasi lintas wilayah. Untuk informasi lebih lanjut, lihat NoSuchKey dan NoSuchVersion.

Kode contoh

Referensikan atau gunakan kode contoh berikut.

Deskripsi

File contoh

Buat bucket

put_bucket.go

Daftar bucket

list_buckets.go

Periksa apakah bucket ada

is_bucket_exist.go

Dapatkan wilayah bucket

get_bucket_location.go

Dapatkan informasi bucket

get_bucket_info.go

Dapatkan kapasitas penyimpanan bucket

get_bucket_stat.go

Grup sumber daya

Hapus bucket

delete_bucket.go

Tag bucket

Requester-pays

Unggahan sederhana

put_object.go

Unggahan tambahan

Unggahan multipart

Unggahan formulir

post_object.go

Unggah objek menggunakan URL yang ditandatangani

presign.go

Manajer unggahan

-

Unduhan sederhana

Akses objek sebagai file read-only

open_file.go

Unduh objek menggunakan URL yang ditandatangani

presign.go

Manajer unduhan

-

Salin objek

copy_object.go

Salin multipart

upload_part_copy.go

Manajer salinan

-

Periksa apakah objek ada

is_object_exist.go

Daftar objek

list_objects_v2.go

Hapus objek

Kueri objek

select_object.go

Pulihkan objek

restore_object.go

Kelola metadata objek

Ubah kelas penyimpanan objek

copy_object.go

Ganti nama objek

copy_object.go

Kelola tautan simbolik

Kelola ACL bucket

Kelola ACL objek

Kebijakan bucket

Kelola pengendalian versi

Proteksi hotlink

Berbagi sumber daya lintas asal (CORS)

Kebijakan retensi

Enkripsi sisi server

Enkripsi sisi klien

encryption_client.go

Replikasi data

put_bucket_replication.go

Pemantauan akses

put_bucket_access_monitor.go

Manajemen siklus hidup

Inventaris bucket

Hosting website statis (dengan origin pull)

put_bucket_website.go

Logging

Baca langsung arsip

Pencarian skalar

Pencarian vektor

Petakan nama domain kustom

Akselerasi transfer

Pemrosesan sinkron

process_object.go

Pemrosesan asinkron

async_process_object.go

Blokir akses publik (Global)

put_public_access_block.go

Blokir akses publik (Tingkat bucket)

put_bucket_public_access_block.go

Blokir akses publik (Tingkat titik akses)

put_access_point_public_access_block.go

Manajemen QoS kolam sumber daya

-