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.
- Go yang terinstal: Versi 1.18 atau yang lebih baru
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:
- Opsi 1: Membuat perwakilan layanan Azure dengan rahasia
- Opsi 2: Membuat perwakilan layanan Azure dengan sertifikat
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.
Buat direktori baru yang disebut
go-on-azure
di direktori beranda Anda.mkdir ~/go-on-azure
Ubah ke direktori
go-on-azure
.cd ~/go-on-azure
Jalankan
go mod init
untuk membuat filego.mod
.go mod init go-on-azure
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"
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") }
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.Jalankan perintah
go run
untuk membuat rahasia key vault baru.go run main.go
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