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:
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
Jika Anda ingin menggunakan Azure PowerShell untuk menjalankan langkah-langkah dalam artikel ini:
- Jika Anda memilih untuk menggunakan Azure PowerShell secara lokal:
- Instal versi terbaru modul Az PowerShell.
- Sambungkan ke akun Azure Anda menggunakan cmdlet Connect-AzAccount.
- Jika Anda memilih untuk menggunakan Azure Cloud Shell:
- Lihat Gambaran Umum Azure Cloud Shell untuk informasi selengkapnya.
- Jika Anda memilih untuk menggunakan Azure PowerShell secara lokal:
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:
- 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.
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 password
properti , 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 fileWithCertAndPrivateKey
properti , 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.
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/security/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/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") }
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
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.