Panduan Awal: Pustaka klien sertifikat Azure Key Vault untuk Go

Dalam panduan cepat ini, Anda mempelajari cara menggunakan Azure SDK untuk Go untuk mengelola sertifikat dalam Vault Kunci Azure.

Azure Key Vault adalah layanan awan yang berfungsi sebagai penyimpanan rahasia yang aman. Anda dapat menyimpan kunci, kata sandi, sertifikat, dan rahasia lainnya dengan aman. Untuk informasi lebih lanjut tentang Key Vault, Anda dapat meninjau Gambaran Umum.

Ikuti panduan ini untuk mempelajari cara menggunakan paket azcertificates untuk mengelola sertifikat Azure Key Vault menggunakan Go.

Prerequisites

Masuk ke portal Microsoft Azure.

  1. Di Azure CLI, jalankan perintah berikut ini:

    az login
    

    Jika Azure CLI dapat membuka browser default Anda, azure CLI dapat melakukannya di halaman masuk portal Microsoft Azure.

    Jika halaman tidak terbuka secara otomatis, buka https://aka.ms/devicelogin, lalu masukkan kode otorisasi yang ditampilkan di terminal Anda.

  2. Masuk ke portal Azure dengan kredensial akun Azure Anda.

Buat grup sumber daya dan Key Vault

Panduan cepat ini menggunakan brankas kunci Azure yang dibuat sebelumnya. Anda dapat membuat brankas kunci dengan mengikuti langkah-langkah dalam panduan cepat ini:

Atau, Anda dapat menjalankan perintah Azure CLI ini.

Important

Setiap key vault harus memiliki nama yang unik. Ganti <vault-name> dengan nama brankas kunci Anda dalam contoh berikut.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true

Memberikan akses ke key vault Anda

Untuk mendapatkan izin ke brankas kunci Anda melalui Kontrol Akses Berbasis Peran (RBAC), tetapkan peran ke "Nama Prinsipal Pengguna" (UPN) Anda menggunakan perintah Azure CLI az role assignment create.

az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"

Ganti <upn>, <subscription-id>, dan <vault-name> dengan nilai aktual Anda. Jika Anda menggunakan nama grup sumber daya yang berbeda, ganti "myResourceGroup" juga. UPN Anda biasanya akan dalam format alamat email (misalnya, username@domain.com).

Membuat modul Go baru dan menginstal paket

Jalankan perintah Go berikut:

go mod init quickstart-go-kvcerts
go get github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Membuat kode sampel

Buat file bernama main.go dan salin kode berikut ke dalam file:

Nota

Panduan singkat ini menghasilkan sertifikat swa-tanda tangan untuk tujuan demonstrasi. Untuk beban kerja produksi, integrasikan Key Vault dengan otoritas sertifikat tepercaya. Lihat Sekuriti sertifikat Azure Key Vault Anda.

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"time"

	"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/keyvault/azcertificates"
)

func getClient() *azcertificates.Client {
	keyVaultName := os.Getenv("KEY_VAULT_NAME")
	if keyVaultName == "" {
		log.Fatal("KEY_VAULT_NAME environment variable not set")
	}
	keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)

	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		log.Fatal(err)
	}

	return azcertificates.NewClient(keyVaultUrl, cred, nil)
}

func createCert(client *azcertificates.Client) {
	params := azcertificates.CreateCertificateParameters{
		CertificatePolicy: &azcertificates.CertificatePolicy{
			IssuerParameters: &azcertificates.IssuerParameters{
				Name: to.Ptr("Self"),
			},
			X509CertificateProperties: &azcertificates.X509CertificateProperties{
				Subject: to.Ptr("CN=DefaultPolicy"),
			},
		},
	}
	resp, err := client.CreateCertificate(context.TODO(), "myCertName", params, nil)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Requested a new certificate. Operation status: %s\n", *resp.Status)
}

func getCert(client *azcertificates.Client) {
	// an empty string version gets the latest version of the certificate
	version := ""
	getResp, err := client.GetCertificate(context.TODO(), "myCertName", version, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Enabled set to:", *getResp.Attributes.Enabled)
}

func listCert(client *azcertificates.Client) {
	pager := client.NewListCertificatesPager(nil)
	for pager.More() {
		page, err := pager.NextPage(context.Background())
		if err != nil {
			log.Fatal(err)
		}
		for _, cert := range page.Value {
			fmt.Println(*cert.ID)
		}
	}
}

func updateCert(client *azcertificates.Client) {
	// disables the certificate, sets an expires date, and add a tag
	params := azcertificates.UpdateCertificateParameters{
		CertificateAttributes: &azcertificates.CertificateAttributes{
			Enabled: to.Ptr(false),
			Expires: to.Ptr(time.Now().Add(72 * time.Hour)),
		},
		Tags: map[string]*string{"Owner": to.Ptr("SRE")},
	}
	// an empty string version updates the latest version of the certificate
	version := ""
	_, err := client.UpdateCertificate(context.TODO(), "myCertName", version, params, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Updated certificate properites: Enabled=false, Expires=72h, Tags=SRE")
}

func deleteCert(client *azcertificates.Client) {
	// DeleteCertificate returns when Key Vault has begun deleting the certificate. That can take several
	// seconds to complete, so it may be necessary to wait before performing other operations on the
	// deleted certificate.
	resp, err := client.DeleteCertificate(context.TODO(), "myCertName", nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Deleted certificate with ID: ", *resp.ID)
}

func main() {
	fmt.Println("Authenticating...")
	client := getClient()

	fmt.Println("Creating a certificate...")
	createCert(client)

	fmt.Println("Getting certificate Enabled property ...")
	getCert(client)

	fmt.Println("Listing certificates...")
	listCert(client)

	fmt.Println("Updating a certificate...")
	updateCert(client)

	fmt.Println("Deleting a certificate...")
	deleteCert(client)
}

Menjalankan kode

Sebelum Anda menjalankan kode, buat variabel lingkungan bernama KEY_VAULT_NAME. Atur nilai variabel lingkungan ke nama Azure Key Vault yang Anda buat.

export KEY_VAULT_NAME=<vault-name>

Selanjutnya, jalankan perintah berikut go run untuk menjalankan aplikasi:

go run main.go

Contoh kode

Untuk contoh selengkapnya, lihat dokumentasi modul.

Membersihkan sumber daya

Jalankan perintah berikut untuk menghapus grup sumber daya dan semua sumber daya yang tersisa:

az group delete --resource-group "myResourceGroup"

Langkah selanjutnya