Bagikan melalui


Autentikasi Azure SDK for Go dengan perwakilan layanan

Dalam tutorial ini, Anda menggunakan Azure SDK for Go untuk mengautentikasi ke Azure dengan perwakilan layanan Azure menggunakan rahasia atau sertifikat.

Perwakilan layanan Azure menentukan kebijakan akses dan izin di penyewa Microsoft Entra, memungkinkan fitur inti seperti autentikasi selama masuk dan otorisasi selama akses sumber daya. Mereka menghapus kebutuhan untuk menggunakan akun pribadi untuk mengakses sumber daya Azure. Anda dapat menetapkan perwakilan layanan izin yang tepat yang diperlukan untuk aplikasi Anda dan mengembangkan terhadap izin tersebut, daripada menggunakan akun pribadi, yang mungkin memiliki lebih banyak hak istimewa di penyewa Anda daripada yang diperlukan aplikasi. Anda juga dapat menggunakan perwakilan layanan untuk aplikasi yang dihosting secara lokal yang perlu menggunakan sumber daya Azure. Modul Azure SDK for Go Azure Identity menyediakan cara mudah untuk mengautentikasi ke Azure dengan perwakilan layanan menggunakan variabel lingkungan, dan rahasia atau sertifikat.

Ikuti tutorial ini untuk membuat dan mengautentikasi dengan Azure SDK for Go menggunakan perwakilan layanan.

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
  • Go yang terinstal: Versi 1.18 atau yang lebih baru

  • Jika Anda ingin menggunakan Azure CLI untuk menjalankan langkah-langkah dalam artikel ini:

  • Jika Anda ingin menggunakan Azure PowerShell untuk menjalankan langkah-langkah dalam artikel ini:

1. Buat sumber daya Azure

Sebelum memulai, buat grup sumber daya baru dan instans key vault.

az group create --name go-on-azure --location eastus

az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization

Ganti <keyVaultName> dengan nama unik global.

Catat id properti dari output az keyvault create perintah. Anda akan menggunakannya di bagian berikutnya untuk menentukan cakupan otorisasi untuk perwakilan layanan. Nilai id memiliki formulir berikut: /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>.

2. Membuat Perwakilan Layanan Azure

Gunakan salah satu teknik berikut untuk membuat perwakilan layanan Azure dan tetapkan peran "Petugas Rahasia Key Vault" pada brankas kunci:

Untuk mempelajari lebih lanjut perwakilan layanan Azure, lihat Objek perwakilan layanan.

Menetapkan peran "Petugas Rahasia Key Vault" ke perwakilan layanan, mengotorisasinya untuk membuat, membaca, memperbarui, dan menghapus rahasia di brankas kunci. Untuk mempelajari selengkapnya tentang peran bawaan untuk brankas kunci Azure, lihat Menyediakan akses ke kunci, sertifikat, dan rahasia Key Vault dengan kontrol akses berbasis peran Azure. Untuk mempelajari selengkapnya tentang peran bawaan di Azure, lihat Peran bawaan Azure.

Opsi 1: Membuat perwakilan layanan Azure dengan rahasia

Jalankan perintah berikut untuk membuat perwakilan layanan Azure dan tetapkan peran "Petugas Rahasia Key Vault" pada brankas kunci.

az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>

Ganti <servicePrincipalName> dan <keyVaultId> dengan nilai yang sesuai.

Catat passwordproperti , tenant, dan appId dari output. Anda membutuhkannya di bagian berikutnya.

Setelah pembuatan, kata sandi perwakilan layanan tidak dapat diambil. Jika Anda lupa kata sandi, Anda dapat mengatur ulang kredensial perwakilan layanan.

Opsi 2: Membuat perwakilan layanan Azure dengan sertifikat

Jalankan perintah berikut untuk membuat perwakilan layanan Azure yang menggunakan sertifikat dan tetapkan peran "Petugas Rahasia Key Vault" pada brankas kunci.

az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>

Ganti <servicePrincipalName> dan <keyVaultId> dengan nilai yang sesuai.

Catat fileWithCertAndPrivateKeyproperti , tenantId, dan appId dari output. Anda membutuhkannya di bagian berikutnya.

3. Autentikasi ke Azure dengan perwakilan layanan

Dengan menggunakan DefaultAzureCredential, Anda dapat menghindari penulisan kode khusus lingkungan untuk mengautentikasi ke Azure. Dengan DefaultAzureCredential, Anda dapat mengonfigurasi kredensial perwakilan layanan dengan menentukan variabel lingkungan.

Pilih salah satu opsi berikut untuk mengonfigurasi kredensial perwakilan layanan Anda:

Untuk mempelajari selengkapnya tentang DefaultAzureCredential, lihat autentikasi Azure dengan Azure SDK untuk Go

Opsi 1: Autentikasi dengan rahasia

Atur variabel lingkungan berikut:

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

Opsi 2: Autentikasi dengan sertifikat

Nama variabel Nilai
AZURE_CLIENT_ID ID aplikasi perwakilan layanan Azure
AZURE_TENANT_ID ID penyewa Microsoft Entra aplikasi
AZURE_CLIENT_CERTIFICATE_PATH Jalur ke file sertifikat PEM atau PKCS12 termasuk kunci privat. Jika Anda mengikuti langkah-langkah untuk Azure CLI, file tidak dilindungi kata sandi. Jika Anda mengikuti langkah-langkah untuk Azure PowerShell, file dilindungi kata sandi, dan Anda juga perlu mengatur AZURE_CLIENT_CERTIFICATE_PASSWORD variabel lingkungan.
AZURE_CLIENT_CERTIFICATE_PASSWORD Kata sandi yang Anda masukkan saat membuat perwakilan layanan. Hanya diperlukan jika Anda mengikuti langkah-langkah untuk Azure PowerShell.
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Menggunakan DefaultAzureCredential untuk mengautentikasi klien sumber daya

Setelah mengatur variabel lingkungan, Anda dapat menggunakan DefaultAzureCredential dalam modul Azure Identity untuk mengautentikasi klien sumber daya. Kode berikut menunjukkan cara mendapatkan instans DefaultAzureCredential.

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    log.Fatalf("failed to obtain a credential: %v", err)
}

4. Membuat rahasia brankas kunci dengan Go

Gunakan sampel kode berikut untuk memverifikasi bahwa perwakilan layanan Anda mengautentikasi ke Azure dan memiliki izin yang sesuai ke brankas kunci.

  1. Buat direktori baru yang disebut go-on-azure di direktori beranda Anda.

    mkdir ~/go-on-azure
    
  2. Ubah ke direktori go-on-azure.

    cd ~/go-on-azure
    
  3. Jalankan go mod init untuk membuat file go.mod.

    go mod init go-on-azure
    
  4. Jalankan go get untuk menginstal modul Go yang diperlukan.

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
    
  5. Buat file bernama main.go dan masukkan kode berikut.

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"os"
    
    	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
        "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
    )
    
    func createSecret(name, value string) {
    	keyVaultName := os.Getenv("KEY_VAULT_NAME")
    	keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)
    
    	cred, err := azidentity.NewDefaultAzureCredential(nil)
    	if err != nil {
    		log.Fatalf("failed to obtain a credential: %v", err)
    	}
    
    	client, err := azsecrets.NewClient(keyVaultUrl, cred, nil)
    	if err != nil {
    		log.Fatalf("failed to create a client: %v", err)
    	}
    
        params := azsecrets.SetSecretParameters{Value: &value}
        resp, err := client.SetSecret(context.TODO(), name, params, nil)
    	if err != nil {
    		log.Fatalf("failed to create a secret: %v", err)
    	}
    
    	fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value)
    }
    
    func main() {
    	createSecret("ExamplePassword", "hVFkk965BuUv")
    }
    
    
  6. Buat variabel lingkungan bernama KEY_VAULT_NAME. Atur nilai variabel lingkungan ke nama Azure Key Vault yang dibuat sebelumnya.

    export KEY_VAULT_NAME=<keyVaultName>
    

    Ganti <keyVaultName> dengan nama instans Azure Key Vault Anda.

  7. Jalankan perintah go run untuk membuat rahasia key vault baru.

     go run main.go
    

    Pada keberhasilan, outputnya mirip dengan yang berikut:

    Name: https://<keyVaultName>.vault.azure.net/secrets/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
    

5. Menghapus sumber daya

Jika Anda tidak lagi ingin menggunakan sumber daya Azure yang Anda buat dalam artikel ini, praktik yang baik adalah menghapusnya. Menghapus sumber daya yang tidak digunakan membantu Anda menghindari biaya yang sedang berlangsung dan menjaga langganan Anda tetap tidak terganggu. Cara term mudah untuk menghapus sumber daya yang Anda gunakan dalam tutorial ini adalah dengan menghapus grup sumber daya.

az group delete --name go-on-azure --yes

Argumen --yes memberi tahu perintah untuk tidak meminta konfirmasi.

Perintah sebelumnya melakukan penghapusan sementara pada brankas kunci di grup sumber daya. Untuk menghapusnya secara permanen dari langganan Anda, masukkan perintah berikut:

az keyvault purge --name <keyVaultName> --no-wait

Ganti <keyVaultName> dengan nama brankas kunci Anda.

Terakhir, Anda harus menghapus pendaftaran aplikasi dan perwakilan layanan.

az ad app delete --id <servicePrincipalAppId>

Ganti <servicePrincipalAppId> dengan ID Aplikasi perwakilan layanan Anda.

Langkah berikutnya