Autentikasi Azure dengan modul Azure Identity untuk Go
Dalam tutorial ini, jenis DefaultAzureCredential dari modul Identitas Azure untuk Go digunakan untuk mengautentikasi ke Azure. Modul Azure Identity menawarkan beberapa jenis kredensial yang berfokus pada OAuth dengan ID Microsoft Entra.
DefaultAzureCredential
menyederhanakan autentikasi dengan menggabungkan jenis kredensial yang umum digunakan. Ini merantai jenis kredensial yang digunakan untuk mengautentikasi aplikasi yang disebarkan Azure dengan jenis kredensial yang digunakan untuk mengautentikasi di lingkungan pengembangan.
Prasyarat
- Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
- Go yang terinstal: Versi 1.18 atau yang lebih baru
1. Instal modul Azure Identity untuk Go
Jalankan perintah berikut untuk mengunduh modul azidentity:
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
2. Autentikasi dengan Azure
Gunakan DefaultAzureCredential
untuk mengautentikasi ke Azure dengan salah satu teknik berikut:
- Opsi 1: Tentukan variabel lingkungan
- Opsi 2: Gunakan identitas beban kerja
- Opsi 3: Menggunakan identitas terkelola
- Opsi 4: Masuk dengan Azure CLI
Untuk mempelajari lebih lanjut tentang jenis info masuk yang berbeda, lihat jenis info masuk.
Opsi 1: Tentukan variabel lingkungan
DefaultAzureCredential
menggunakan jenis EnvironmentCredential
untuk mengonfigurasi autentikasi menggunakan variabel lingkungan yang mendukung tiga jenis autentikasi. Pilih dari jenis autentikasi berikut dan tentukan variabel lingkungan yang sesuai.
Perwakilan layanan dengan rahasia
Nama variabel | Nilai |
---|---|
AZURE_CLIENT_ID |
ID aplikasi perwakilan layanan Azure |
AZURE_TENANT_ID |
ID penyewa Microsoft Entra aplikasi |
AZURE_CLIENT_SECRET |
Kata sandi perwakilan layanan Azure |
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"
Perwakilan layanan dengan sertifikat
Nama variabel | Nilai |
---|---|
AZURE_CLIENT_ID |
ID aplikasi Microsoft Entra |
AZURE_TENANT_ID |
ID penyewa Microsoft Entra aplikasi |
AZURE_CLIENT_CERTIFICATE_PATH |
Jalur ke file sertifikat termasuk kunci privat (tanpa perlindungan kata sandi) |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Nama pengguna dan kata sandi
Nama variabel | Nilai |
---|---|
AZURE_CLIENT_ID |
ID aplikasi Microsoft Entra |
AZURE_USERNAME |
Nama pengguna (biasanya alamat email) |
AZURE_PASSWORD |
Kata sandi pengguna |
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"
Konfigurasi dicoba dalam urutan sebelumnya. Misalnya, jika nilai untuk rahasia dan sertifikat klien keduanya ada, maka digunakan rahasia klien.
Opsi 2: Gunakan Identitas Beban Kerja
ID Beban Kerja Microsoft Entra memungkinkan pod dalam kluster Kubernetes untuk menggunakan identitas Kubernetes (akun layanan). Token Kubernetes dikeluarkan, dan federasi OIDC memungkinkan aplikasi Kubernetes mengakses sumber daya Azure dengan aman dengan MICROSOFT Entra ID.
Jika variabel lingkungan yang diperlukan untuk EnvironmentCredential
tidak ada, DefaultAzureCredential
upaya untuk mengautentikasi menggunakan WorkloadIdentityCredential. WorkloadIdentityCredential
mencoba membaca konfigurasi perwakilan layanan dari variabel lingkungan yang ditetapkan oleh webhook Identitas Beban Kerja.
Opsi 3: Menggunakan identitas terkelola
Identitas terkelola menghilangkan kebutuhan pengembang untuk mengelola info masuk. Dengan menyambungkan ke sumber daya yang mendukung autentikasi Microsoft Entra, aplikasi dapat menggunakan token Microsoft Entra alih-alih kredensial.
Jika variabel lingkungan yang diperlukan untuk WorkloadIdentityCredential
tidak ada, DefaultAzureCredential
upaya untuk mengautentikasi menggunakan ManagedIdentityCredential.
Jika menggunakan identitas terkelola yang ditetapkan pengguna, jalankan perintah berikut untuk mengatur AZURE_CLIENT_ID
variabel lingkungan.
export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"
Opsi 4: Masuk dengan Azure CLI
Untuk mengurangi gesekan dalam pengembangan lokal, DefaultAzureCredential
dapat mengautentikasi saat pengguna masuk ke Azure CLI.
Jalankan perintah berikut ini untuk masuk ke Azure CLI:
az login
Autentikasi Azure CLI tidak disarankan untuk aplikasi yang sedang berjalan di Azure.
3. Gunakan DefaultAzureCredential untuk mengautentikasi ResourceClient
Buat modul Go sampel baru bernama azure-auth
untuk menguji autentikasi ke Azure dengan DefaultAzureCredential
:
Buat direktori untuk menguji dan menjalankan kode Go sampel, lalu ubah ke direktori tersebut.
Jalankan mod init untuk membuat modul:
go mod init azure-auth
Jalankan masuk untuk mengunduh, membangun, dan menginstal modul Azure SDK for Go yang diperlukan:
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
Buat file bernama
main.go
dan masukkan kode berikut:package main import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription" ) const subscriptionID = "<subscription ID>" func main() { cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { // TODO: handle error } // Azure SDK Resource Management clients accept the credential as a parameter. // The client will authenticate with the credential as necessary. client, err := armsubscription.NewSubscriptionsClient(cred, nil) if err != nil { // TODO: handle error } _, err = client.Get(context.TODO(), subscriptionID, nil) if err != nil { // TODO: handle error } }
Ganti
<subscription ID>
dengan ID Langganan Anda.Jalankan
go run
untuk membangun dan menjalankan aplikasi:go run .
Autentikasi ke Azure dengan DefaultAzureCredential
Gunakan kode berikut dalam aplikasi Anda untuk mengautentikasi ke Azure dengan modul Azure Identity menggunakan DefaultAzureCredential
:
// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// handle error
}
// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
// handle error
}
Pemecahan Masalah
Untuk panduan tentang mengatasi kesalahan dari jenis kredensial tertentu, lihat panduan pemecahan masalah.
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk