مشاركة عبر


التشغيل السريع: مكتبة عميل شهادة Azure Key Vault لـ Go

ستتعلم في هذا التشغيل السريع استخدام Azure SDK لـ Go لإدارة الشهادات في Azure Key Vault.

إن Azure Key Vault هي خدمة سحابية تعمل كمخزن آمن للأسرار. يمكنك تخزين المفاتيح وكلمات المرور والشهادات والأسرار الأخرى بأمان. لمزيد من المعلومات حول Key Vault، يمكنك الرجوع إلى نظرة عامة.

اتبع هذا الدليل لمعرفة كيفية استخدام حزمة azcertificates لإدارة شهادات Azure Key Vault باستخدام Go.

المتطلبات الأساسية

سجِّل الدخول إلى مدخل Azure

  1. في Azure CLI، شغِّل الأمر التالي:

    az login
    

    إذا كان بإمكان Azure CLI فتح المستعرض الافتراضي الخاص بك، فسيقوم بذلك، ويقوم بتحميل صفحة تسجيل الدخول إلى Azure.

    إذا لم يتم فتح الصفحة تلقائيا، فانتقل إلى https://aka.ms/devicelogin، ثم أدخل تعليمة التفويض البرمجية المعروضة في الوحدة الطرفية.

  2. سجّل الدخول إلى مدخل Azure باستخدام بيانات اعتماد حسابك.

إنشاء مجموعة موارد ومخزن رئيسي

يستخدم هذا التشغيل السريع مخزن مفاتيح Azure تم إنشاؤه مسبقا. يمكنك إنشاء مخزن بيانات سرية باتباع الخطوات الواردة في بداية سريعة إلى Azure CLI أو بداية سريعة إلى Azure PowerShell أو بداية سريعة إلى مدخل Microsoft Azure.

بدلا من ذلك، يمكنك تشغيل أوامر Azure CLI أو Azure PowerShell هذه.

هام

يجب أن يكون لكل مخزن رئيسي اسم فريد. استبدل <your-unique-keyvault-name> باسم المخزن الرئيس في الأمثلة التالية.

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

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup" --enable-rbac-authorization

امنح حق الوصول إلى خزنة المفاتيح الخاصة بك

للحصول على أذونات إلى مخزن المفاتيح الخاص بك من خلال التحكم في الوصول المستند إلى الدور (RBAC)، قم بتعيين دور إلى "اسم المستخدم الأساسي" (UPN) باستخدام الأمر Azure CLI az role assignment create.

az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"

استبدل <upn>، <subscription-id>، <resource-group-name> و <your-unique-keyvault-name> بقيمك الفعلية. سيكون UPN الخاص بك عادة بتنسيق عنوان بريد إلكتروني (على سبيل المثال، username@domain.com).

أنشئ وحدة Go جديدة وثبّت الحزم

شغّل أوامر Go التالية:

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

إنشاء نموذج التعليمات البرمجية

إنشاء ملف باسم main.go ونسخ التعليمات البرمجية التالية في الملف:

package main

import (
	"context"
	"fmt"
	"log"
	"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)
}

تشغيل التعليمات البرمجية

قبل تشغيل التعليمات البرمجية، أنشئ متغير بيئة باسم KEY_VAULT_NAME. عيّن قيمة متغير البيئة إلى اسم Azure Key Vault التي تم إنشاؤها مُسبقًا.

export KEY_VAULT_NAME=<YourKeyVaultName>

من ثم، شغّل الأمر التالي go run لتشغيل التطبيق:

go run main.go

أمثلة على التعليمات البرمجية

راجع وثائق الوحدة لمزيد من الأمثلة.

تنظيف الموارد

شغّل الأمر التالي لحذف مجموعة الموارد وكافة الموارد المتبقية:

az group delete --resource-group myResourceGroup

الخطوات التالية