التشغيل السريع: مكتبة عميل مفاتيح Azure Key Vault لـ Go
ستتعلم في هذا التشغيل السريع استخدام Azure SDK لـ Go لإنشاء مفاتيح Azure Key Vault واستردادها وتحديثها وإدراجها وحذفها.
إن Azure Key Vault هي خدمة سحابية تعمل كمخزن آمن للأسرار. يمكنك تخزين المفاتيح وكلمات المرور والشهادات والأسرار الأخرى بأمان. لمزيد من المعلومات حول Key Vault، يمكنك الرجوع إلى نظرة عامة.
اتبع هذا الدليل لمعرفة كيفية استخدام حزمة azkeys لإدارة مفاتيح Azure Key Vault باستخدام Go.
المتطلبات الأساسية
- اشتراك Azure - إنشاء اشتراك مجاناً.
- Go مثبت: الإصدار 1.18 أو أحدث
- Azure CLI
سجِّل الدخول إلى مدخل Azure
في Azure CLI، شغِّل الأمر التالي:
az login
إذا كان بإمكان Azure CLI فتح المستعرض الافتراضي الخاص بك، فسيقوم بذلك، ويقوم بتحميل صفحة تسجيل الدخول إلى Azure.
إذا لم يتم فتح الصفحة تلقائيا، فانتقل إلى https://aka.ms/devicelogin، ثم أدخل تعليمة التفويض البرمجية المعروضة في الوحدة الطرفية.
سجّل الدخول إلى مدخل 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 Crypto 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-keys
go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity
go get -u github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys
إنشاء نموذج التعليمات البرمجية
إنشاء ملف باسم main.go، ونسخ التعليمات البرمجية التالية في الملف:
package main
import (
"context"
"fmt"
"log"
"os"
"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/azkeys"
)
func main() {
keyVaultName := os.Getenv("KEY_VAULT_NAME")
keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName)
// create credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
// create azkeys client
client, err := azkeys.NewClient(keyVaultUrl, cred, nil)
if err != nil {
log.Fatal(err)
}
// create RSA Key
rsaKeyParams := azkeys.CreateKeyParameters{
Kty: to.Ptr(azkeys.JSONWebKeyTypeRSA),
KeySize: to.Ptr(int32(2048)),
}
rsaResp, err := client.CreateKey(context.TODO(), "new-rsa-key", rsaKeyParams, nil)
if err != nil {
log.Fatalf("failed to create rsa key: %v", err)
}
fmt.Printf("New RSA key ID: %s\n", *rsaResp.Key.KID)
// create EC Key
ecKeyParams := azkeys.CreateKeyParameters{
Kty: to.Ptr(azkeys.JSONWebKeyTypeEC),
Curve: to.Ptr(azkeys.JSONWebKeyCurveNameP256),
}
ecResp, err := client.CreateKey(context.TODO(), "new-ec-key", ecKeyParams, nil)
if err != nil {
log.Fatalf("failed to create ec key: %v", err)
}
fmt.Printf("New EC key ID: %s\n", *ecResp.Key.KID)
// list all vault keys
fmt.Println("List all vault keys:")
pager := client.NewListKeysPager(nil)
for pager.More() {
page, err := pager.NextPage(context.TODO())
if err != nil {
log.Fatal(err)
}
for _, key := range page.Value {
fmt.Println(*key.KID)
}
}
// update key properties to disable key
updateParams := azkeys.UpdateKeyParameters{
KeyAttributes: &azkeys.KeyAttributes{
Enabled: to.Ptr(false),
},
}
// an empty string version updates the latest version of the key
version := ""
updateResp, err := client.UpdateKey(context.TODO(), "new-rsa-key", version, updateParams, nil)
if err != nil {
panic(err)
}
fmt.Printf("Key %s Enabled attribute set to: %t\n", *updateResp.Key.KID, *updateResp.Attributes.Enabled)
// delete the created keys
for _, keyName := range []string{"new-rsa-key", "new-ec-key"} {
// DeleteKey returns when Key Vault has begun deleting the key. That can take several
// seconds to complete, so it may be necessary to wait before performing other operations
// on the deleted key.
delResp, err := client.DeleteKey(context.TODO(), keyName, nil)
if err != nil {
panic(err)
}
fmt.Printf("Successfully deleted key %s", *delResp.Key.KID)
}
}
تشغيل التعليمات البرمجية
قبل تشغيل التعليمات البرمجية، أنشئ متغير بيئة باسم KEY_VAULT_NAME. عيّن قيمة متغير البيئة إلى اسم Azure Key Vault التي تم إنشاؤها مُسبقًا.
export KEY_VAULT_NAME=quickstart-kv
من ثم، شغّل الأمر التالي go run
لتشغيل التطبيق:
go run main.go
Key ID: https://quickstart-kv.vault.azure.net/keys/new-rsa-key4/f78fe1f34b064934bac86cc8c66a75c3: Key Type: RSA
Key ID: https://quickstart-kv.vault.azure.net/keys/new-ec-key2/10e2cec51d1749c0a26aab784808cfaf: Key Type: EC
List all vault keys:
https://quickstart-kv.vault.azure.net/keys/new-ec-key
https://quickstart-kv.vault.azure.net/keys/new-ec-key1
https://quickstart-kv.vault.azure.net/keys/new-ec-key2
https://quickstart-kv.vault.azure.net/keys/new-rsa-key4
Enabled set to: false
Successfully deleted key https://quickstart-kv.vault.azure.net/keys/new-rsa-key4/f78fe1f34b064934bac86cc8c66a75c3
إشعار
هذا الإخراج مخصص لأغراض إعلامية فقط. قد تختلف القيم المرجعة استنادًا إلى اشتراكك في Azure وAzure Key Vault.
أمثلة على التعليمات البرمجية
راجع وثائق الوحدة لمزيد من الأمثلة.
تنظيف الموارد
شغّل الأمر التالي لحذف مجموعة الموارد وكافة الموارد المتبقية:
az group delete --resource-group quickstart-rg