Autentikasi dengan Azure SDK for Go menggunakan identitas terkelola
Dalam tutorial ini, Anda mengonfigurasi komputer virtual Azure dengan identitas terkelola untuk mengautentikasi ke Azure menggunakan Azure SDK for Go.
Identitas terkelola menghilangkan kebutuhan untuk mengelola kredensial dengan menyediakan identitas secara langsung ke sumber daya Azure. Izin yang ditetapkan ke identitas memberikan akses sumber daya ke sumber daya Azure lain yang mendukung identitas terkelola, menghapus kebutuhan Anda untuk meneruskan kredensial dalam aplikasi Anda. Anda dapat menggunakan identitas terkelola untuk mengautentikasi dan mengotorisasi aplikasi yang dihosting Azure dengan sumber daya Azure lainnya.
Ikuti tutorial ini untuk menetapkan identitas terkelola ke komputer virtual dan mengautentikasi ke Azure menggunakan identitas terkelola.
Prasyarat
- Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
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, Anda perlu membuat grup sumber daya baru, komputer virtual, dan instans brankas kunci.
Menyebarkan komputer virtual
Menyebarkan sumber daya mesin virtual. Anda menjalankan kode Go untuk membuat rahasia di Brankas kunci Azure dari komputer virtual tersebut.
Buat grup sumber daya Azure.
az group create --name go-on-azure --location eastus
Ubah parameter
--location
ke nilai yang sesuai untuk lingkungan Anda.Buat mesin virtual Azure.
az vm create \ --resource-group go-on-azure \ --name go-on-azure-vm \ --image canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \ --admin-username azureuser \ --admin-password <password>
Ganti kata sandi Anda
<password>
.
Untuk mempelajari selengakpnya mengenai layanan lain yang mendukung identitas terkelola, lihat Layanan yang mendukung identitas terkelola untuk sumber daya Azure.
Sebarkan instans kunci brankas
Buat instans brankas kunci Azure baru dengan menjalankan perintah berikut:
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Ganti <keyVaultName>
dengan nama unik global.
2. Membuat identitas terkelola
Azure mendukung dua jenis identitas terkelola: ditetapkan oleh sistem dan ditetapkan oleh pengguna.
Identitas yang ditetapkan sistem secara langsung dilampirkan ke sumber daya Azure dan terbatas hanya pada sumber daya tersebut. Identitas yang ditetapkan pengguna adalah sumber daya yang berdiri sendiri yang dapat ditetapkan ke satu sumber daya Azure atau lebih.
Untuk mempelajari lebih lanjut tentang perbedaan antara yang ditetapkan sistem dan yang ditetapkan pengguna, lihat Tipe identitas terkelola.
Pilih salah satu opsi berikut:
- Opsi 1: Membuat identitas terkelola yang ditetapkan sistem
- Opsi 2: Membuat identitas terkelola yang ditetapkan pengguna
Opsi 1: Membuat identitas terkelola yang ditetapkan sistem
Jalankan perintah berikut untuk membuat identitas terkelola yang ditetapkan sistem:
az vm identity assign -g go-on-azure -n go-on-azure-vm
Opsi 2: Membuat identitas terkelola yang ditetapkan pengguna
Jalankan perintah berikut untuk membuat identitas terkelola yang ditetapkan pengguna:
az identity create -g go-on-azure -n GoUserIdentity
az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity
Untuk mempelajari selengkapnya, periksa Mengonfigurasi Identitas terkelola untuk sumber daya Azure di komputer virtual Azure menggunakan Azure CLI.
3. Menetapkan peran untuk identitas terkelola
Setelah identitas terkelola dibuat, Anda menetapkan peran untuk memberikan izin identitas untuk mengakses sumber daya Azure lainnya. Dalam tutorial ini, Anda menetapkan peran bawaan Key Vault Secrets Officer
ke identitas terkelola sehingga aplikasi Go dapat membuat rahasia dalam instans brankas kunci.
Pilih salah satu opsi berikut:
- Opsi 1: Tetapkan peran ke identitas yang ditetapkan sistem
- Opsi 2: Menetapkan peran ke identitas terkelola yang ditetapkan pengguna
Opsi 1: Tetapkan peran ke identitas yang ditetapkan sistem
Jalankan perintah berikut untuk menetapkan peran Key Vault Secrets Officer
ke identitas terkelola yang ditetapkan sistem:
#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query principalId -o tsv
#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Di perintah kedua, ganti <keyVaultName>
dengan nama brankas kunci Anda. Di perintah terakhir, ganti <principalId>
dan <keyVaultId>
dengan output dari dua perintah pertama.
Opsi 2: Menetapkan peran ke identitas terkelola yang ditetapkan pengguna
Jalankan perintah berikut untuk menetapkan peran Key Vault Secrets Officer
ke identitas terkelola yang ditetapkan pengguna:
#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query principalId -o tsv
#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv
az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Di perintah kedua, ganti <keyVaultName>
dengan nama brankas kunci Anda. Di perintah terakhir, ganti <principalId>
dan <keyVaultId>
dengan output dari dua perintah pertama.
Untuk mempelajari selengkapnya tentang peran bawaan di 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.
4. Membuat rahasia brankas kunci dengan Go
Selanjutnya SSH ke dalam mesin virtual Azure, instal Go, dan bangun paket Go.
Instal Go di Azure VM
Dapatkan alamat IP publik komputer virtual Azure.
az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
SSH ke dalam Azure VM.
ssh azureuser@<public-ip>
Mengganti
<public-ip>
dengan alamat IP publik dari VM Azure.Menginstal Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Membuat paket Go
Buat direktori baru dengan nama
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
main.go
dan salin kode berikut ke dalam file tersebut.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() { keyVaultName := os.Getenv("KEY_VAULT_NAME") secretName := "quickstart-secret" secretValue := "createdWithGO" 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: &secretValue} resp, err := client.SetSecret(context.TODO(), secretName, 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() }
Buat variabel lingkungan bernama
KEY_VAULT_NAME
. Ganti<keyVaultName>
dengan nama instans brankas kunci Azure Anda.export KEY_VAULT_NAME=<keyVaultName>
Jalankan
go run
perintah untuk membuat rahasia brankas kunci.go run main.go
Pada keberhasilan, outputnya mirip dengan yang berikut:
Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
Anda dapat memverifikasi rahasia brankas kunci dibuat menggunakan Azure PowerShell, Azure CLI, atau portal Azure.
Catatan
Jika Anda menggunakan Azure CLI atau Azure PowerShell, Anda perlu memastikan bahwa akun pengguna Azure Anda diberi peran yang mengizinkannya membaca rahasia di brankas kunci seperti "Petugas Rahasia Key Vault" atau "Pengguna Rahasia Key Vault".
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 --force-deletion-types Microsoft.Compute/virtualMachines --yes
Argumen force-deletion-type
memberi tahu perintah untuk memaksa penghapusan VM dalam grup sumber daya. 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.