Autentikasi dengan Azure SDK for Go menggunakan identitas terkelola

Dalam tutorial ini, Anda akan 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 lainnya yang mendukung identitas terkelola. Menghilangkan tugas Anda untuk meneruskan kredensial ke aplikasi Anda.

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.

1. Mengonfigurasi lingkungan Anda

Sebelum memulai, Anda harus mengonfigurasi lingkungan Anda.

Menyebarkan komputer virtual

Menyebarkan sumber daya mesin virtual. Anda akan menjalankan kode Go untuk membuat rahasia di brankas kunci Azure dari komputer virtual itu.

  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:ubuntuserver:19.04: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

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 <UserIdentityId>

Ganti <UserIdentityId> dengan ID identitas pengguna terkelola.

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 akan menetapkan peran bawaan dar Key Vault Contributor 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 Contributor 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
scope=$(az keyvault show --name go-on-azure-kv --query id -o tsv)

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

Opsi 2: Menetapkan peran ke identitas terkelola yang ditetapkan pengguna.

Jalankan perintah berikut untuk menetapkan peran Key Vault Contributor 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 go-on-azure-kv --query id -o tsv

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

Untuk mempelajari selengkapnya tentang peran bawaan, 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.

    mkidr ~/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 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/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)
        }
    
        resp, err := client.SetSecret(context.TODO(), secretName, secretValue, 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()
    }
    
    

Sebelum Anda menjalankan kode, buat variabel lingkungan bernama KEY_VAULT_NAME. Atur nilai variabel lingkungan ke nama Azure Key Vault yang dibuat sebelumnya. Ganti <KeyVaultName> dengan nama instans Azure Key Vault Anda.

export KEY_VAULT_NAME=<KeyVaultName>

Selanjutnya, jalankan perintah go run untuk membuat rahasia brankas kunci.

go run main.go

Pastikan rahasia brankas kunci telah dibuat menggunakan Azure PowerShell, Azure CLI, atau portal Microsoft Azure.

Langkah berikutnya