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
- Opsi 5: Masuk dengan Azure Developer 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 PEM atau PKCS12 termasuk kunci privat |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
(opsional) Kata sandi untuk file sertifikat |
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. Untuk tutorial end-to-end tentang mengautentikasi dengan perwakilan layanan, lihat Autentikasi Azure SDK for Go dengan perwakilan layanan.
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. Saat menyambungkan ke sumber daya yang mendukung autentikasi Microsoft Entra, aplikasi yang dihosting di Azure dapat menggunakan token Microsoft Entra alih-alih kredensial. Identitas Terkelola tidak didukung dalam pengembangan lokal.
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>"
AZURE_CLIENT_ID
Jika variabel lingkungan tidak diatur, DefaultAzureCredentials
upaya untuk mengautentikasi menggunakan identitas terkelola yang ditetapkan sistem jika variabel diaktifkan pada sumber daya hosting.
Untuk tutorial end-to-end tentang mengautentikasi dengan identitas terkelola di aplikasi yang dihosting Azure, lihat Autentikasi dengan Azure SDK for Go menggunakan identitas terkelola.
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
Opsi 5: Masuk dengan Azure Developer CLI
Dalam pengembangan lokal, jika pengguna tidak masuk ke Azure CLI, DefaultAzureCredential
dapat mengautentikasi saat pengguna masuk ke Azure Developer CLI.
Jalankan perintah berikut untuk masuk ke Azure Developer CLI:
azd auth login
Autentikasi Azure Developer CLI tidak disarankan untuk aplikasi yang 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 .
Catatan
Untuk menjalankan apa adanya di sistem lokal Anda, Anda perlu masuk ke Azure menggunakan Azure CLI atau Azure Developer CLI.
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.