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.

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:

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:

  1. Buat direktori untuk menguji dan menjalankan kode Go sampel, lalu ubah ke direktori tersebut.

  2. Jalankan mod init untuk membuat modul:

    go mod init azure-auth
    
  3. 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"
    
  4. 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.

  5. 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