Bagikan melalui


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:

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

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.

  1. Buat grup sumber daya Azure.

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

    Ubah parameter --location ke nilai yang sesuai untuk lingkungan Anda.

  2. 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

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

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

  1. Dapatkan alamat IP publik komputer virtual Azure.

    az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
    
  2. SSH ke dalam Azure VM.

    ssh azureuser@<public-ip>
    

    Mengganti <public-ip> dengan alamat IP publik dari VM Azure.

  3. Menginstal Go

    sudo add-apt-repository ppa:longsleep/golang-backports;
    sudo apt update;
    sudo apt install golang-go -y
    

Membuat paket Go

  1. Buat direktori baru dengan nama 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 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()
    }
    
    
  6. Buat variabel lingkungan bernama KEY_VAULT_NAME. Ganti <keyVaultName> dengan nama instans brankas kunci Azure Anda.

    export KEY_VAULT_NAME=<keyVaultName>
    
  7. 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.

Langkah berikutnya