全部产品
Search
文档中心

Object Storage Service:OSS SDK for Go 2.0

更新时间:Dec 11, 2025

Github | Panduan Pengembang OSS Go SDK V2OSS SDK for Go API

Integrasi cepat

Berikut adalah proses integrasi OSS SDK for Go 2.0:

Persiapan lingkungan

Diperlukan Go 1.18 atau versi yang lebih baru.

Anda dapat menggunakan perintah go -version untuk memeriksa versi Go. Jika lingkungan Anda belum menginstal Go atau versinya lebih rendah dari Go 1.18, silakan instal Golang.

Instal OSS SDK for Go

  • 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 OSS SDK for Go. Kami menyarankan menggunakan versi terbaru agar contoh kode di bawah ini dapat berjalan dengan baik.

    go get github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss
  • Jalankan kode berikut untuk mengimpor paket OSS SDK for Go 2.0.

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

Konfigurasikan kredensial akses

Gunakan Pasangan Kunci Akses (AccessKey pair) pengguna RAM untuk mengonfigurasi kredensial akses.

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

  2. Gunakan AccessKey pengguna RAM untuk mengonfigurasi variabel lingkungan.

    Linux

    1. Jalankan perintah berikut 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. Jalankan perintah berikut untuk menerapkan perubahan:

        source ~/.bashrc
      2. Jalankan perintah berikut untuk memeriksa 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. Jalankan perintah berikut untuk menerapkan perubahan:

          source ~/.zshrc
        3. Jalankan perintah berikut untuk memeriksa 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. Jalankan perintah berikut untuk menerapkan perubahan:

          source ~/.bash_profile
        3. Jalankan perintah berikut untuk memeriksa 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. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah 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. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:

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

Inisialisasi client

Gunakan wilayah dan titik akhir untuk menginisialisasi OSSClient dan menjalankan kode uji coba.

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"
)

/*
Deskripsi konfigurasi inisialisasi client Go SDK V2:

1. Versi signature: Go SDK V2 menggunakan signature V4 secara default, memberikan keamanan yang lebih tinggi
2. Konfigurasi wilayah: Saat menginisialisasi Client, Anda perlu menentukan ID Wilayah umum Alibaba Cloud sebagai identifikasi wilayah tempat permintaan dikirim
   Contoh kode ini menggunakan ID Wilayah China (Hangzhou): cn-hangzhou
   Untuk mengetahui ID Wilayah lainnya, lihat: Wilayah dan titik akhir OSS
3. Konfigurasi titik akhir:
   - Anda dapat menyesuaikan nama domain akses permintaan layanan melalui parameter Endpoint
   - Jika tidak ditentukan, SDK akan membuat nama domain akses jaringan publik berdasarkan informasi Wilayah
   - Misalnya, ketika Wilayah adalah 'cn-hangzhou', nama domain akses yang dibuat adalah: 'https://oss-cn-hangzhou.aliyuncs.com'
4. Konfigurasi protokol:
   - SDK menggunakan protokol HTTPS secara default saat membuat nama domain akses
   - Untuk menggunakan protokol HTTP, tentukan HTTP saat menentukan nama domain, misalnya: 'http://oss-cn-hangzhou.aliyuncs.com'
*/

func main() {
	// Metode 1: Hanya tentukan Wilayah (disarankan)
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou") // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. SDK akan secara otomatis membuat nama domain akses HTTPS berdasarkan wilayah

	// Metode 2: Tentukan Wilayah dan Titik Akhir
	// cfg := oss.LoadDefaultConfig().
	//     WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	//     WithRegion("cn-hangzhou").                                // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	//     WithEndpoint("https://oss-cn-hangzhou.aliyuncs.com")     // Tentukan titik akhir publik wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur titik akhir menjadi 'https://oss-cn-hangzhou.aliyuncs.com'

	// Buat instans OSSClient
	client := oss.NewClient(cfg)

	// Tentukan string yang ingin diunggah
	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
	}

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

	// Tampilkan hasil operasi pengunggahan objek
	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)
}

Setelah dijalankan, akan menghasilkan output berikut yang menunjukkan keberhasilan pengunggahan file:

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

Konfigurasi client

Konfigurasi apa saja yang didukung oleh client?

Region

(Wajib) Wilayah tempat permintaan dikirim, wajib diisi

WithRegion("cn-hangzhou")

CredentialsProvider

(Wajib) Atur kredensial akses

WithCredentialsProvider(provider)

Endpoint

Nama domain

WithEndpoint("oss-cn-hanghzou.aliyuncs.com")

HttpClient

HTTP client

WithHttpClient(customClient)

RetryMaxAttempts

Jumlah maksimum percobaan ulang HTTP. Nilai default: 3

WithRetryMaxAttempts(5)

Retryer

Konfigurasi percobaan ulang untuk permintaan HTTP

WithRetryer(customRetryer)

ConnectTimeout

Periode timeout untuk membuat koneksi. Nilai default: 5. Satuan: detik

WithConnectTimeout(10 * time.Second)

ReadWriteTimeout

Periode timeout aplikasi untuk membaca dan menulis data. Nilai default: 10. Satuan: detik

WithReadWriteTimeout(30 * time.Second)

InsecureSkipVerify

Menentukan apakah verifikasi sertifikat SSL dilewati. Secara default, sertifikat SSL diverifikasi

WithInsecureSkipVerify(true)

EnabledRedirect

Menentukan apakah pengalihan HTTP diaktifkan. Secara default, pengalihan HTTP dinonaktifkan

WithEnabledRedirect(true)

ProxyHost

Menentukan server proxy

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

ProxyFromEnvironment

Menentukan server proxy menggunakan variabel lingkungan

WithProxyFromEnvironment(true)

UploadBandwidthlimit

Batas atas total bandwidth unggah. Satuan: KiB/s

WithUploadBandwidthlimit(10*1024)

DownloadBandwidthlimit

Batas atas total bandwidth unduh. Satuan: KiB/s

WithDownloadBandwidthlimit(10*1024)

SignatureVersion

Versi signature. Nilai default: v4

WithSignatureVersion(oss.SignatureVersionV1)

LogLevel

Tingkat log

WithLogLevel(oss.LogInfo)

LogPrinter

Operasi pencetakan log

WithLogPrinter(customPrinter)

DisableSSL

Menentukan bahwa HTTPS tidak digunakan untuk permintaan. Secara default, HTTPS digunakan

WithDisableSSL(true)

UsePathStyle

Gaya permintaan berbasis path, juga dikenal sebagai gaya permintaan nama domain root. Secara default, nama domain default bucket digunakan

WithUsePathStyle(true)

UseCName

Menentukan apakah nama domain kustom digunakan untuk mengakses OSS. Secara default, nama domain kustom tidak digunakan

WithUseCName(true)

UseDualStackEndpoint

Menentukan apakah titik akhir dual-stack digunakan untuk mengakses OSS. Secara default, titik akhir dual-stack tidak digunakan

WithUseDualStackEndpoint(true)

UseAccelerateEndpoint

Menentukan apakah titik akhir percepatan OSS digunakan untuk mengakses OSS. Secara default, titik akhir percepatan OSS tidak digunakan

WithUseAccelerateEndpoint(true)

UseInternalEndpoint

Menentukan apakah titik akhir internal digunakan untuk mengakses OSS. Secara default, titik akhir internal tidak digunakan

WithUseInternalEndpoint(true)

DisableUploadCRC64Check

Menentukan bahwa CRC-64 dinonaktifkan selama pengunggahan objek. Secara default, CRC-64 diaktifkan

WithDisableUploadCRC64Check(true)

DisableDownloadCRC64Check

Menentukan bahwa CRC-64 dinonaktifkan selama pengunduhan objek. Secara default, CRC-64 diaktifkan

WithDisableDownloadCRC64Check(true)

AdditionalHeaders

Header tambahan yang digunakan untuk signature. Parameter ini hanya berlaku jika algoritma signature V4 digunakan

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

UserAgent

Header permintaan User-Agent tambahan

WithUserAgent("user identifier")

Gunakan nama domain kustom

Saat mengakses dengan nama domain OSS default, masalah seperti larangan akses file atau kegagalan pratinjau file dapat terjadi. Dengan mengikat nama domain kustom ke nama domain bucket default, Anda tidak hanya dapat langsung mempratinjau file di browser tetapi juga menggabungkannya dengan CDN untuk distribusi yang dipercepat.

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. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	// Tentukan nama domain kustom. Contoh: https://www.example-***.com
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou").
		WithEndpoint("https://www.example-***.com").
		WithUseCName(true) // Untuk mengaktifkan CNAME, atur parameter ini ke true. Jika tidak, Anda tidak dapat menggunakan nama domain kustom

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

Kontrol timeout

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("cn-hangzhou").             // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
		WithConnectTimeout(10 * time.Second).  // Tentukan periode timeout koneksi. Nilai default: 5 detik
		WithReadWriteTimeout(30 * time.Second) // Tentukan periode timeout baca/tulis. Nilai default: 10 detik

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

Jumlah maksimum percobaan ulang kesalahan

Secara default, OSSClient mencoba ulang sebanyak 3 kali ketika terjadi pengecualian permintaan.

Dalam skenario konkurensi tinggi atau jaringan tidak stabil, gunakan WithRetryMaxAttempts untuk meningkatkan jumlah percobaan ulang. Hal ini dapat meningkatkan tingkat keberhasilan permintaan.

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("cn-hangzhou"). // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
		WithRetryMaxAttempts(5)    // Atur jumlah maksimum percobaan ulang. Nilai default: 3

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

Protokol HTTP/HTTPS

Gunakan WithDisableSSL(true) untuk menonaktifkan protokol HTTPS.

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("cn-hangzhou"). // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
		WithDisableSSL(true)       // Atur agar tidak menggunakan protokol HTTPS. Secara default, HTTPS digunakan

	// Buat instans OSSClient
	client := oss.NewClient(cfg)

	// Gunakan client untuk melakukan operasi selanjutnya...
}

Server proxy

Kebijakan keamanan perusahaan sering kali membatasi akses langsung ke jaringan publik. Gunakan WithProxyHost untuk mengonfigurasi server proxy guna mengakses OSS.

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("cn-hangzhou").                                 // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
		WithUserAgent("aliyun-sdk-go").                            // Atur user agent, yang menentukan header HTTP User-Agent
		WithProxyHost("http://user:passswd@proxy.example-***.com") // Atur IP server proxy, seperti "http://user:passswd@proxy.example-***.com"

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

Gunakan titik akhir internal

Jika aplikasi Anda dideploy pada instans ECS dan Anda perlu sering mengakses data OSS dalam bucket yang berada di wilayah yang sama dengan instans ECS tersebut, gunakan titik akhir internal untuk secara signifikan mengurangi latensi jaringan dan biaya bandwidth.

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. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou").
		WithUseInternalEndpoint(true)

	// Metode 2: Langsung tentukan Region dan Endpoint
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	// Tentukan titik akhir internal wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur titik akhir menjadi 'https://oss-cn-hangzhou-internal.aliyuncs.com'. Untuk menggunakan protokol HTTP, atur titik akhir menjadi 'http://oss-cn-hangzhou-internal.aliyuncs.com'
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithRegion("cn-hangzhou").
	// 	WithEndpoint("https://oss-cn-hangzhou-internal.aliyuncs.com")

	// Buat instans OSSClient
	client := oss.NewClient(cfg)

	// Gunakan client untuk melakukan operasi selanjutnya...

}

Gunakan titik akhir yang dipercepat

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
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou").
		WithUseAccelerateEndpoint(true)

	// Metode 2: Langsung tentukan Region dan Endpoint
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	// Tentukan titik akhir percepatan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-accelerate.aliyuncs.com. Untuk menggunakan protokol HTTP, atur titik akhir menjadi http://oss-accelerate.aliyuncs.com
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithRegion("cn-hangzhou").
	// 	WithEndpoint("https://oss-accelerate.aliyuncs.com").

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

Gunakan domain privat

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. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	// Tentukan domain privat. Contoh: https://service.corp.example.com
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou").
		WithEndpoint("https://service.corp.example.com")

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

Gunakan titik akhir Gov Cloud

Berikut adalah contoh konfigurasi OSSClient dengan titik akhir Alibaba Gov Cloud.

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 Region dan Endpoint
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China North 2 Ali Gov 1, atur wilayah menjadi cn-north-2-gov-1
	// Tentukan titik akhir internal wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China North 2 Ali Gov 1, atur titik akhir menjadi 'https://oss-cn-north-2-gov-1-internal.aliyuncs.com',
        // Untuk menggunakan protokol HTTP, atur titik akhir menjadi '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 instans OSSClient
	client := oss.NewClient(cfg)
	// Gunakan client untuk melakukan operasi selanjutnya...
}

Akses bucket CloudBox

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. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	// Atur Endpoint ke nama domain data bucket CloudBox, misalnya: http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com
	// Atur WithEnableAutoDetectCloudBoxId ke true untuk mendeteksi ID CloudBox secara otomatis
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithEndpoint("http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com").
		WithEnableAutoDetectCloudBoxId(true)

	// Metode 2: Atur ID CloudBox secara manual
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou
	// Atur Endpoint ke nama domain data bucket CloudBox, misalnya: http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com
	// Isi manual ID CloudBox, misalnya: cb-xxxxxx
	// cfg := oss.LoadDefaultConfig().
	// 	WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
	// 	WithEndpoint("http://cb-xxxxxx.cn-hangzhou.oss-cloudbox.aliyuncs.com").
	// 	WithCloudBoxId("cb-xxxxxx")

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

HTTPClient kustom

Jika parameter konfigurasi umum tidak memenuhi kebutuhan skenario Anda, gunakan WithHTTPClient untuk menggantikan HTTP client default.

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() {
	// Tentukan periode timeout umum atau parameter lainnya
	transConfig := transport.Config{
		// Tentukan periode timeout koneksi. Nilai default: 5. Satuan: detik
		ConnectTimeout: oss.Ptr(10 * time.Second),
		// Tentukan periode timeout aplikasi untuk membaca dan menulis data. Nilai default: 10. Satuan: detik
		ReadWriteTimeout: oss.Ptr(20 * time.Second),
		// Tentukan periode timeout koneksi idle. Nilai default: 50. Satuan: detik
		IdleConnectionTimeout: oss.Ptr(40 * time.Second),
		// Tentukan periode retensi koneksi jaringan. Nilai default: 30. Satuan: detik
		KeepAliveTimeout: oss.Ptr(40 * time.Second),
		// Tentukan apakah pengalihan HTTP diaktifkan. Secara default, pengalihan HTTP dinonaktifkan
		EnabledRedirect: oss.Ptr(true),
	}

	// Pengaturan http.Transport
	var transports []func(*http.Transport)
	// Tentukan jumlah maksimum koneksi. Nilai default: 100
	transports = append(transports, transport.MaxConnections(200))
	// Jika permintaan berisi header Expect: 100-Continue, ini menunjukkan periode waktu maksimum untuk menunggu header respons pertama yang dikembalikan dari server setelah header permintaan sepenuhnya ditulis. Nilai default: 1. Satuan: detik
	transports = append(transports, transport.ExpectContinueTimeout(2*time.Second))
	// Tentukan versi paling awal Transport Layer Security (TLS). Nilai default: TLS 1.2
	transports = append(transports, transport.TLSMinVersion(tls.VersionTLS13))
	// Tentukan apakah verifikasi sertifikat SSL dilewati. Secara default, sertifikat SSL diverifikasi
	transports = append(transports, transport.InsecureSkipVerify(true))
	// Untuk pengaturan parameter Transport lainnya, lihat https://pkg.go.dev/net/http#Transport
	// Buat HTTP Client kustom
	customClient := transport.NewHttpClient(&transConfig, transports...)

	cfg := oss.LoadDefaultConfig().
		WithHttpClient(customClient).
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion("cn-hangzhou")

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

Konfigurasi kredensial akses

OSS menyediakan beberapa metode inisialisasi kredensial. Pilih metode inisialisasi yang sesuai berdasarkan kebutuhan autentikasi dan otorisasi Anda.

Bagaimana cara memilih kredensial akses?

Metode inisialisasi penyedia kredensial

Skenario

Apakah AK atau Token STS disediakan sebelumnya

Implementasi kredensial dasar

Periode validitas kredensial

Metode rotasi atau refresh kredensial

Gunakan AK pengguna RAM

Aplikasi dideploy dan dijalankan di lingkungan yang aman dan stabil yang tidak rentan terhadap serangan eksternal, serta memerlukan akses jangka panjang ke layanan cloud tanpa rotasi kredensial yang sering

Ya

AK

Jangka panjang

Rotasi manual

Gunakan kredensial akses sementara STS

Aplikasi dideploy dan dijalankan di lingkungan yang tidak tepercaya, di mana Anda ingin mengelola validitas kredensial dan sumber daya yang dapat diakses

Ya

Token STS

Sementara

Refresh manual

Gunakan RAMRoleARN

Aplikasi memerlukan akses ke layanan cloud, seperti akses lintas akun

Ya

Token STS

Sementara

Refresh otomatis

Gunakan ECSRAMRole

Aplikasi dideploy dan dijalankan pada instans Elastic Compute Service (ECS), instans elastic container, dan node pekerja Container Service for Kubernetes (ACK)

Tidak

Token STS

Sementara

Refresh otomatis

Gunakan OIDCRoleARN

Aplikasi yang tidak tepercaya dideploy dan dijalankan pada node pekerja ACK

Tidak

Token STS

Sementara

Refresh otomatis

Penyedia kredensial kustom

Jika metode di atas tidak memenuhi kebutuhan Anda, Anda dapat menggunakan metode kustom untuk mendapatkan kredensial akses

Kustom

Kustom

Kustom

Kustom

Gunakan rantai penyedia kredensial default

Jika Anda menginisialisasi client Credentials tanpa menentukan metode inisialisasi, alat Credentials akan mendapatkan kredensial berdasarkan urutan rantai penyedia kredensial default

Kustom

Kustom

Kustom

Kustom

Gunakan AK pengguna RAM

Jika aplikasi Anda dideploy di lingkungan yang aman dan stabil yang tidak rentan terhadap serangan eksternal dan memerlukan akses jangka panjang ke OSS, Anda dapat menggunakan Pasangan Kunci Akses (AccessKey pair) akun Alibaba Cloud atau pengguna RAM untuk menginisialisasi penyedia kredensial. Pasangan Kunci Akses terdiri dari ID AccessKey dan Rahasia AccessKey. Perhatikan bahwa metode ini mengharuskan Anda untuk memelihara Pasangan Kunci Akses secara manual, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan.

Peringatan
  • Akun Alibaba Cloud memiliki izin penuh atas sumber dayanya, dan kebocoran Pasangan Kunci Aksesnya menimbulkan risiko keamanan yang signifikan. Oleh karena itu, kami menyarankan menggunakan Pasangan Kunci Akses pengguna RAM yang diberikan izin minimal yang diperlukan.

  • Untuk membuat Pasangan Kunci Akses untuk pengguna RAM, kunjungi Buat AccessKey. Anda hanya dapat mencatat Rahasia AccessKey pengguna RAM saat membuat pengguna RAM tersebut. Jika Anda lupa Rahasia AccessKey, Anda dapat membuat Pasangan Kunci Akses baru untuk rotasi kredensial.

Variabel lingkungan

  1. Konfigurasikan variabel lingkungan untuk Pasangan Kunci Akses 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 telah 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 telah berlaku:

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Untuk memastikan pengaturan Anda dimuat, restart atau refresh lingkungan kompilasi dan runtime Anda, seperti IDE, alat command-line, aplikasi desktop, dan layanan latar belakang.

  3. Dapatkan kredensial dari variabel lingkungan.

    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() {
    	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi
    	provider := credentials.NewEnvironmentVariableCredentialsProvider()
    
    	// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Kredensial statis

Contoh berikut menunjukkan cara menyematkan kredensial statis dalam aplikasi Anda untuk secara eksplisit menentukan Pasangan Kunci Akses yang ingin Anda gunakan untuk mengakses OSS.

Peringatan

Jangan menyematkan kredensial akses dalam kode aplikasi yang dideploy di lingkungan produksi. Metode ini hanya ditujukan untuk pengujian.

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() {
	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
	region := "cn-hangzhou"

	// 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 dan tentukan penyedia kredensial serta wilayah
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// Buat instans OSSClient
	client := oss.NewClient(cfg)

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

Gunakan kredensial akses sementara STS

Jika aplikasi Anda perlu mengakses OSS secara sementara, Anda dapat menggunakan kredensial akses sementara, yang terdiri dari Pasangan Kunci Akses dan token keamanan, yang diperoleh dari Layanan Token Keamanan (STS). Perhatikan bahwa metode ini mengharuskan Anda untuk memelihara token keamanan secara manual, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan. Jika Anda ingin memperpanjang akses setelah token STS yang ada kedaluwarsa, Anda perlu merefresh token STS secara manual.

Penting

Variabel lingkungan

  1. Konfigurasikan variabel lingkungan untuk kredensial akses sementara.

    Mac OS X/Linux/Unix

    Peringatan
    • Perhatikan bahwa kredensial akses sementara (ID AccessKey, Rahasia AccessKey, dan token keamanan) yang disediakan oleh STS digunakan, bukan ID AccessKey dan Rahasia AccessKey pengguna RAM.

    • ID AccessKey yang disediakan oleh STS diawali dengan STS, seperti pada contoh '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 akses sementara (ID AccessKey, Rahasia AccessKey, dan token keamanan) yang disediakan oleh STS digunakan, bukan ID AccessKey dan Rahasia AccessKey pengguna RAM.

    • ID AccessKey yang disediakan oleh STS diawali dengan STS, seperti pada contoh '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. Dapatkan kredensial dari variabel lingkungan.

    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() {
    	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode, pastikan variabel lingkungan OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, dan OSS_SESSION_TOKEN telah dikonfigurasi
    	provider := credentials.NewEnvironmentVariableCredentialsProvider()
    
    	// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Kredensial statis

Anda dapat menyematkan kredensial dalam aplikasi Anda untuk secara eksplisit menentukan Pasangan Kunci Akses yang ingin Anda gunakan untuk mengakses OSS.

Peringatan

Jangan menyematkan kredensial akses dalam kode aplikasi yang dideploy di lingkungan produksi. Metode ini hanya ditujukan untuk pengujian.

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() {
	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
	region := "cn-hangzhou"

	// Tentukan ID AccessKey, Rahasia AccessKey, dan token STS yang disediakan oleh STS, bukan ID AccessKey dan Rahasia AccessKey pengguna RAM
        // ID AccessKey yang disediakan oleh STS diawali dengan STS
	accessKeyID := "STS.****************"
	accessKeySecret := "yourAccessKeySecret"
	// Tentukan token STS (SecurityToken)
	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 tentukan penyedia kredensial serta wilayah
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

	// Buat instans OSSClient
	client := oss.NewClient(cfg)

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

Gunakan RAMRoleARN

Untuk memberi otorisasi aplikasi Anda mengakses OSS, misalnya ketika aplikasi Anda memerlukan akses ke sumber daya OSS milik akun Alibaba Cloud lain, Anda dapat menggunakan RAMRoleARN untuk menginisialisasi penyedia kredensial. Logika dasar metode ini adalah menggunakan token STS untuk mengonfigurasi kredensial akses. Alat Credentials mendapatkan token STS berdasarkan role RAM yang diidentifikasi oleh ARN role RAM dan merefresh token STS dengan memanggil operasi AssumeRole sebelum sesi kedaluwarsa. Selain itu, Anda dapat membatasi role RAM ke set izin yang lebih kecil dengan memberikan nilai pada policy.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas sumber dayanya, dan kebocoran Pasangan Kunci Aksesnya menimbulkan ancaman keamanan kritis. Oleh karena itu, kami menyarankan menggunakan Pasangan Kunci Akses pengguna RAM yang diberikan izin minimal yang diperlukan.

  • Untuk membuat Pasangan Kunci Akses untuk pengguna RAM, kunjungi Buat AccessKey. Anda hanya dapat mencatat Rahasia AccessKey pengguna RAM saat membuat pengguna RAM tersebut. Jika Anda lupa Pasangan Kunci Akses, Anda dapat membuat Pasangan Kunci Akses baru untuk rotasi.

  • Untuk mendapatkan RAMRoleARN, kunjungi CreateRole - Buat role.

  1. Tambahkan dependensi kredensial.

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

    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() {
    	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	config := new(openapicred.Config).
    		// Atur tipe kredensial menjadi ram_role_arn
    		SetType("ram_role_arn").
    		// Dapatkan ID AccessKey dan Rahasia AccessKey pengguna RAM dari variabel lingkungan
    		SetAccessKeyId(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")).
    		SetAccessKeySecret(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")).
    		// Secara default, nilai parameter dimasukkan langsung untuk operasi berikut. Anda juga dapat menambahkan variabel lingkungan dan menggunakan os.Getenv("<nama variabel>") untuk menentukan parameter yang sesuai
    		// Dapatkan ARN role RAM dari variabel lingkungan. ARN adalah ID role yang akan diasumsikan, dalam format acs:ram::$accountID:role/$roleName
    		SetRoleArn("ALIBABA_CLOUD_ROLE_ARN"). // Secara default, nama kanonikal variabel lingkungan RoleArn adalah ALIBABA_CLOUD_ROLE_ARN
    		// Tentukan nama sesi kustom untuk role guna membedakan token yang berbeda
    		SetRoleSessionName("ALIBABA_CLOUD_ROLE_SESSION_NAME"). // Secara default, nama kanonikal variabel lingkungan RoleSessionName adalah ALIBABA_CLOUD_ROLE_SESSION_NAME
    		// Opsional. Tentukan izin token keamanan
    		SetPolicy("Policy").
    		// Opsional. Tentukan periode validitas token keamanan
    		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 tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Gunakan ECSRAMRole

Jika aplikasi Anda berjalan pada instans ECS, instans ECI, atau node pekerja Container Service for Kubernetes, kami menyarankan Anda menggunakan ECSRAMRole untuk menginisialisasi penyedia kredensial. Logika dasar metode ini adalah menggunakan token STS. ECSRAMRole memungkinkan Anda mengaitkan role dengan instans ECS, instans ECI, atau node pekerja Container Service for Kubernetes untuk secara otomatis merefresh token STS di dalam instans tersebut. Metode ini tidak mengharuskan Anda menyediakan Pasangan Kunci Akses atau token STS, sehingga menghilangkan risiko yang terkait dengan pengelolaan kredensial tersebut secara manual. Untuk informasi selengkapnya tentang cara mendapatkan ECSRAMRole, lihat CreateRole - Buat role.

  1. Tambahkan dependensi kredensial.

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

    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 ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	config := new(openapicred.Config).
    		// Atur tipe kredensial menjadi ecs_ram_role
    		SetType("ecs_ram_role").
    		// Opsional. Tentukan nama role. Jika Anda tidak menentukan nama role, OSS akan secara otomatis mendapatkan nama role. Kami menyarankan Anda menentukan nama role untuk mengurangi jumlah 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 tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Gunakan OIDCRoleARN

Setelah Anda melampirkan role RAM ke node pekerja di Container Service for Kubernetes (ACK), aplikasi dalam pod pada node tersebut dapat memperoleh token Layanan Token Keamanan (STS) untuk role yang dilampirkan dari layanan metadata, mirip dengan aplikasi yang dideploy pada instans ECS. Namun, jika aplikasi yang tidak tepercaya dideploy pada kluster kontainer, seperti aplikasi yang diajukan oleh pelanggan Anda dan kodenya tidak tersedia bagi Anda, Anda mungkin tidak ingin aplikasi tersebut memperoleh token STS role RAM yang dilampirkan ke node pekerja dari layanan metadata. Untuk memastikan keamanan sumber daya cloud Anda, izinkan aplikasi yang tidak tepercaya ini memperoleh token STS yang diperlukan secara aman, dan terapkan prinsip hak istimewa minimal di tingkat aplikasi, Anda dapat menggunakan fitur RAM Roles for Service Account (RRSA). Logika dasar metode ini adalah menggunakan token STS. ACK membuat dan memasang file token OpenID Connect (OIDC) yang sesuai untuk pod aplikasi yang berbeda, serta menyuntikkan informasi konfigurasi terkait ke variabel lingkungan. Alat Credentials mendapatkan informasi konfigurasi dari variabel lingkungan dan memanggil operasi AssumeRoleWithOIDC STS untuk memperoleh token STS untuk role yang dilampirkan. Metode ini tidak mengharuskan Anda menyediakan Pasangan Kunci Akses (AK) atau token STS, sehingga menghilangkan risiko yang terkait dengan pemeliharaan manual Pasangan AK atau token STS. Untuk informasi selengkapnya, lihat Gunakan RRSA untuk mengonfigurasi izin RAM untuk ServiceAccount guna mengisolasi izin pod.

  1. Tambahkan dependensi kredensial.

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

    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 ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	config := new(openapicred.Config).
    		// Atur tipe kredensial menjadi oidc_role_arn
    		SetType("oidc_role_arn").
    		// Tentukan ARN Penyedia Identitas OIDC. ARN dalam format acs:ram::account-id:oidc-provider/provider-name
    		SetOIDCProviderArn("OIDCProviderArn").
    		// Tentukan path file tempat token OIDC disimpan
    		SetOIDCTokenFilePath("OIDCTokenFilePath").
    		// Tentukan nama sesi kustom untuk role guna membedakan token yang berbeda
    		SetRoleSessionName("RoleSessionName"). // Secara default, nama kanonikal variabel lingkungan RoleSessionName adalah ALIBABA_CLOUD_ROLE_SESSION_NAME
    		// Opsional. Tentukan kebijakan role RAM
    		SetPolicy("Policy").
    		// Tentukan ARN role RAM, yaitu ID role yang akan diasumsikan. Format: acs:ram::113511544585****:oidc-provider/TestOidcProvider
    		SetRoleArn("RoleArn").
    		// Tentukan periode validitas sesi
    		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 tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Penyedia kredensial kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan bisnis Anda, Anda dapat menentukan metode yang ingin Anda gunakan untuk mendapatkan kredensial akses. Metode berikut didukung:

  1. Gunakan metode credentials.CredentialsProviderFunc

    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 ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	// Buat penyedia kredensial
    	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 tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    
  2. Implementasikan antarmuka credentials.CredentialsProvider

    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() {
    	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
    	region := "cn-hangzhou"
    
    	// Buat penyedia kredensial
    	provider := NewCustomerCredentialsProvider()
    
    	// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(provider).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    	log.Printf("ossclient: %v", client)
    }
    

Gunakan rantai penyedia kredensial default

Jika Anda menginisialisasi client Credentials tanpa menentukan metode inisialisasi, alat Credentials menggunakan rantai penyedia kredensial default. Untuk informasi selengkapnya tentang logika rantai penyedia kredensial default, lihat Rantai penyedia kredensial default.

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() {
	// Tentukan ID wilayah tempat bucket berada sesuai kebutuhan. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah menjadi cn-hangzhou
	region := "cn-hangzhou"
	// Jika Anda mengatur parameter ke nil, rantai penyedia kredensial default akan digunakan dan kredensial akan diperoleh secara otomatis
	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 tentukan penyedia kredensial serta wilayah
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(provider).
		WithRegion(region)

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

Pemecahan masalah

Ketika terjadi kesalahan saat Anda menggunakan Go SDK V2 untuk mengakses OSS, OSS mengembalikan kode status HTTP, pesan kesalahan, ID permintaan, dan kode kesalahan (EC). EC berkorespondensi dengan penyebab kesalahan spesifik, yang dapat Anda gunakan untuk memecahkan masalah tersebut.

  1. Misalnya, ketika Anda menggunakan kode berikut untuk mengunduh file 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
    )
    
    // Definisikan fungsi init yang digunakan untuk menginisialisasi parameter
    func init() {
    	flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
    	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
    	flag.StringVar(&objectName, "object", "", "Nama objek.")
    }
    
    func main() {
    	// Parsing parameter command line
    	flag.Parse()
    
    	// Periksa apakah nama bucket kosong
    	if len(bucketName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
    	}
    
    	// Periksa apakah wilayah ditentukan
    	if len(region) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("parameter tidak valid, wilayah diperlukan")
    	}
    
    	// Periksa apakah nama objek ditentukan
    	if len(objectName) == 0 {
    		flag.PrintDefaults()
    		log.Fatalf("parameter tidak valid, nama objek diperlukan")
    	}
    
    	// Definisikan path file output
    	outputFile := "downloaded.txt" // Ganti dengan path tempat Anda ingin menyimpan file
    
    	// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah
    	cfg := oss.LoadDefaultConfig().
    		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
    		WithRegion(region)
    
    	// Buat instans OSSClient
    	client := oss.NewClient(cfg)
    
    	// Buat permintaan untuk mengambil objek
    	request := &oss.GetObjectRequest{
    		Bucket: oss.Ptr(bucketName), // Nama bucket
    		Key:    oss.Ptr(objectName), // Nama objek
    	}
    
    	// Ambil objek dan proses hasilnya
    	result, err := client.GetObject(context.TODO(), request)
    	if err != nil {
    		log.Fatalf("gagal mengambil objek %v", err)
    	}
    	defer result.Body.Close() // Pastikan badan respons ditutup saat fungsi selesai
    
    	// Baca semua data dalam objek
    	data, err := io.ReadAll(result.Body)
    	if err != nil {
    		log.Fatalf("gagal membaca objek %v", err)
    	}
    
    	// Tulis data 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. Contoh berikut menunjukkan hasil yang dikembalikan, yang berisi 'EC': '0026-00000001' sebagai pengenal unik penyebab kesalahan.

  3. Untuk menemukan penyebab kesalahan dan solusi yang sesuai berdasarkan kode kesalahan EC yang dikembalikan pada contoh di atas, lakukan langkah-langkah berikut:

    1. Buka Platform Diagnostik Mandiri OpenAPI.

    2. Masukkan kode kesalahan EC, seperti 0026-00000001, di kotak pencarian.

    3. Temukan penyebab kesalahan dan solusi yang sesuai dalam hasil pencarian.

Kode contoh

OSS Go SDK V2 menyediakan berbagai kode contoh untuk referensi atau penggunaan langsung.

Konten

File contoh GitHub

Buat bucket

put_bucket.go

Daftar bucket (Go SDK V2)

list_buckets.go

Tentukan apakah bucket ada menggunakan OSS SDK for Go 2.0

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 menggunakan OSS SDK for Go 2.0

delete_bucket.go

Tag bucket

Mode bayar-per-peminta

Unggah sederhana menggunakan OSS SDK for Go 2.0

put_object.go

Unggah lampiran (Go SDK V2)

Unggah multipart menggunakan OSS SDK for Go 2.0

Unggah formulir

post_object.go

Unggah objek menggunakan URL yang ditandatangani

presign.go

Manajer unggah

-

Unduh sederhana menggunakan OSS SDK for Go 2.0

Class file read-only

open_file.go

Unduh objek menggunakan URL yang ditandatangani

presign.go

Manajer unduh

-

Salin objek

copy_object.go

Salin multipart

upload_part_copy.go

Manajer salin

-

Tentukan apakah objek ada (Go SDK V2)

is_object_exist.go

Daftar objek menggunakan OSS SDK for Go 2.0

list_objects_v2.go

Hapus objek menggunakan OSS SDK for Go 2.0

Kueri file menggunakan OSS SDK for Go 2.0

select_object.go

Pulihkan objek menggunakan OSS SDK for Go 2.0

restore_object.go

Kelola metadata file (Go SDK V2)

Ubah kelas penyimpanan objek menggunakan OSS SDK for Go 2.0

copy_object.go

Ganti nama objek (Go SDK V2)

copy_object.go

Kelola tautan simbolik menggunakan OSS SDK for Go 2.0

Kelola ACL bucket

Kelola ACL objek

Kebijakan Bucket

Kelola versioning menggunakan OSS SDK for Go 2.0

Proteksi hotlink dengan OSS SDK for Go 2.0

Berbagi sumber daya lintas asal

Kebijakan retensi

Enkripsi sisi server (Go SDK V2)

Enkripsi berbasis klien

encryption_client.go

Replikasi data dengan OSS SDK for Go 2.0

put_bucket_replication.go

Pelacakan akses dengan OSS SDK for Go 2.0

put_bucket_access_monitor.go

Manajemen siklus hidup menggunakan OSS SDK for Go 2.0

Kelola Daftar Bucket menggunakan OSS SDK for Go 2.0

Hosting website statis (Pengembalian ke sumber berbasis mirroring)

put_bucket_website.go

Logging via OSS SDK for Go 2.0

Akses real-time objek Archive

Pencarian skalar

Pencarian Vektor menggunakan OSS SDK for Go 2.0

Ikat nama domain kustom

Akselerasi transfer menggunakan OSS SDK for Go 2.0

Pemrosesan sinkronisasi

process_object.go

Pemrosesan asinkron

async_process_object.go

Blokir Akses Publik global OSS

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 Quality of Service kolam sumber daya

-