Github | Panduan Pengembang OSS Go SDK V2|OSS 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-exampleJalankan 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/ossJalankan 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.
Di Konsol RAM, buat pengguna RAM dengan opsi Access By Using Permanent AccessKey, simpan Pasangan Kunci Akses tersebut, lalu berikan izin
AliyunOSSFullAccesskepada pengguna tersebut.Gunakan AccessKey pengguna RAM untuk mengonfigurasi variabel lingkungan.
Linux
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'" >> ~/.bashrcJalankan perintah berikut untuk menerapkan perubahan:
source ~/.bashrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk melihat jenis shell default:
echo $SHELLKonfigurasikan variabel lingkungan berdasarkan jenis shell default.
Zsh
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'" >> ~/.zshrcJalankan perintah berikut untuk menerapkan perubahan:
source ~/.zshrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
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_profileJalankan perintah berikut untuk menerapkan perubahan:
source ~/.bash_profileJalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di CMD:
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
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)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
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.
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.
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
Konfigurasikan variabel lingkungan untuk Pasangan Kunci Akses pengguna RAM.
Linux
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'" >> ~/.bashrcTerapkan perubahan.
source ~/.bashrcPeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk melihat jenis shell default:
echo $SHELLKonfigurasikan variabel lingkungan berdasarkan jenis shell default.
Zsh
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'" >> ~/.zshrcTerapkan perubahan.
source ~/.zshrcPeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
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_profileTerapkan perubahan.
source ~/.bash_profilePeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di CMD:
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Periksa apakah variabel lingkungan telah berlaku:
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
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)Periksa apakah variabel lingkungan telah berlaku:
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Untuk memastikan pengaturan Anda dimuat, restart atau refresh lingkungan kompilasi dan runtime Anda, seperti IDE, alat command-line, aplikasi desktop, dan layanan latar belakang.
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.
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.
Jika Anda ingin cepat mendapatkan kredensial akses sementara STS menggunakan OpenAPI, lihat AssumeRole - Dapatkan kredensial akses sementara untuk role.
Jika Anda ingin mendapatkan kredensial akses sementara STS menggunakan SDK, lihat Gunakan kredensial akses sementara STS untuk mengakses OSS.
Anda harus menentukan periode validitas untuk token keamanan saat membuat token tersebut. Token keamanan yang kedaluwarsa tidak dapat digunakan.
Jika Anda ingin mendapatkan daftar titik akhir layanan STS, lihat Pendaftaran layanan.
Variabel lingkungan
Konfigurasikan variabel lingkungan untuk kredensial akses sementara.
Mac OS X/Linux/Unix
PeringatanPerhatikan 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
PeringatanPerhatikan 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>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.
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.
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.
Tambahkan dependensi kredensial.
go get github.com/aliyun/credentials-go/credentialsKonfigurasikan 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.
Tambahkan dependensi kredensial.
go get github.com/aliyun/credentials-go/credentialsKonfigurasikan 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.
Tambahkan dependensi kredensial.
go get github.com/aliyun/credentials-go/credentialsKonfigurasikan 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:
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) }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.
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) }Contoh berikut menunjukkan hasil yang dikembalikan, yang berisi 'EC': '0026-00000001' sebagai pengenal unik penyebab kesalahan.
Untuk menemukan penyebab kesalahan dan solusi yang sesuai berdasarkan kode kesalahan EC yang dikembalikan pada contoh di atas, lakukan langkah-langkah berikut:
Masukkan kode kesalahan EC, seperti 0026-00000001, di kotak pencarian.
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 |
- | |
- | |
- | |
Hosting website statis (Pengembalian ke sumber berbasis mirroring) | |
- |