Autentikasi Azure SDK for Go dengan perwakilan layanan

Dalam tutorial ini, Anda akan 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. Menghapus kebutuhan untuk menggunakan akun pribadi untuk mengakses sumber daya Azure. Modul Azure SDK for Go Azure Identity menyediakan cara mudah untuk mengautentikasi dengan Azure menggunakan perwakilan layanan menggunakan variabel lingkungan, 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.

1. Mengonfigurasi lingkungan Anda

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

Ganti <keyVaultName> dengan nama unik global. Perhatikan juga dari output Id, Anda akan menggunakannya untuk ruang lingkup akun layanan.

2. Membuat Perwakilan Layanan Azure

Gunakan salah satu teknik berikut untuk membuat perwakilan layanan Azure:

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

Opsi 1: Membuat perwakilan layanan Azure dengan rahasia

Jalankan perintah berikut untuk membuat Perwakilan Layanan Azure.

az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>

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

Pastikan Anda menyalin nilai kata sandi - ini tidak dapat diambil kembali. Jika Anda lupa kata sandi, atur ulang info masuk perwakilan layanan.

Opsi 2: Membuat perwakilan layanan Azure dengan sertifikat

az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>

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

3. Autentikasi ke Azure dengan perwakilan layanan

Dengan menggunakan DefaultAzureCredential, Anda dapat menghindari menulis kode khusus lingkungan untuk mengautentikasi ke Azure.

Gunakan DefaultAzureCredential untuk mengonfigurasi kredensial perwakilan layanan Anda dengan menentukan variabel lingkungan.

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

Gunakan DefaultAzureCredential untuk mengautentikasi ResourceClient

Gunakan fungsi NewDefaultAzureCredential dari modul Azure Identity untuk mengautentikasi ResourceClient.

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

4. Kode sampel

Gunakan sampel kode berikut untuk memverifikasi bahwa perwakilan layanan Anda mengautentikasi ke Azure dan memiliki izin yang sesuai ke grup sumber daya.

  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/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/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)
    	}
    
    	resp, err := client.SetSecret(context.TODO(), name, value, 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
    

Langkah berikutnya