البداية السريعة: قم بتعيين سر واسترداده من Azure Key Vault باستخدام قالب ARM

Azure Key Vault هي خدمة سحابية توفر مخزنا آمنا للبيانات السرية، مثل المفاتيح وكلمات المرور والشهادات والأسرار الأخرى. يركز هذا البدء السريع على عملية نشر قالب Azure Resource Manager (قالب ARM) لإنشاء مخزن مفاتيح وبيانات سرية.

قالب Azure Resource Manager هو ملف JavaScript Object Notation (JSON) الذي يحدد البنية الأساسية والتكوين لمشروعك. يستخدم القالب عبارات توضيحية. يمكنك وصف النشر المقصود دون كتابة تسلسل أوامر البرمجة لإنشاء النشر.

إذا كانت بيئتك تلبي المتطلبات الأساسية وكنت معتاداً على استخدام قوالب "ARM"، فحدد زر "Deploy to Azure". سيتم فتح القالب في مدخل Azure.

Button to deploy the Resource Manager template to Azure.

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

لإكمال هذه المقالة:

  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

  • مطلوب معرف عنصر مستخدم Microsoft Entra بواسطة القالب لتكوين الأذونات. يحصل الإجراء التالي على معرف ID الكائن (GUID).

    1. قم بتشغيل الأمر Azure PowerShell أو Azure CLI التالي عن طريق تحديد Try it، ثم الصق البرنامج النصي في جزء shell. للصق البرنامج النصي، انقر بزر الماوس الأيمن فوق shell، ثم حدد لصق.

      echo "Enter your email address that is used to sign in to Azure:" &&
      read upn &&
      az ad user show --id $upn --query "Id" &&
      echo "Press [ENTER] to continue ..."
      
    2. اكتب معرف ID الكائن. أنت في حاجة إليها في القسم التالي من هذه البداية السريعة.

مراجعة القالب

يُعدّ النموذج المستخدم في هذا التشغيل السريع مأخوذاً من قوالب التشغيل السريع من Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.26.54.24096",
      "templateHash": "8629186205194254058"
    }
  },
  "parameters": {
    "keyVaultName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the key vault."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specifies the Azure location where the key vault should be created."
      }
    },
    "enabledForDeployment": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault."
      }
    },
    "enabledForDiskEncryption": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys."
      }
    },
    "enabledForTemplateDeployment": {
      "type": "bool",
      "defaultValue": false,
      "metadata": {
        "description": "Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault."
      }
    },
    "tenantId": {
      "type": "string",
      "defaultValue": "[subscription().tenantId]",
      "metadata": {
        "description": "Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet."
      }
    },
    "objectId": {
      "type": "string",
      "metadata": {
        "description": "Specifies the object ID of a user, service principal or security group in the Azure Active Directory tenant for the vault. The object ID must be unique for the list of access policies. Get it by using Get-AzADUser or Get-AzADServicePrincipal cmdlets."
      }
    },
    "keysPermissions": {
      "type": "array",
      "defaultValue": [
        "list"
      ],
      "metadata": {
        "description": "Specifies the permissions to keys in the vault. Valid values are: all, encrypt, decrypt, wrapKey, unwrapKey, sign, verify, get, list, create, update, import, delete, backup, restore, recover, and purge."
      }
    },
    "secretsPermissions": {
      "type": "array",
      "defaultValue": [
        "list"
      ],
      "metadata": {
        "description": "Specifies the permissions to secrets in the vault. Valid values are: all, get, list, set, delete, backup, restore, recover, and purge."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "standard",
      "allowedValues": [
        "standard",
        "premium"
      ],
      "metadata": {
        "description": "Specifies whether the key vault is a standard vault or a premium vault."
      }
    },
    "secretName": {
      "type": "string",
      "metadata": {
        "description": "Specifies the name of the secret that you want to create."
      }
    },
    "secretValue": {
      "type": "securestring",
      "metadata": {
        "description": "Specifies the value of the secret that you want to create."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.KeyVault/vaults",
      "apiVersion": "2023-07-01",
      "name": "[parameters('keyVaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enabledForDeployment": "[parameters('enabledForDeployment')]",
        "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
        "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
        "tenantId": "[parameters('tenantId')]",
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "accessPolicies": [
          {
            "objectId": "[parameters('objectId')]",
            "tenantId": "[parameters('tenantId')]",
            "permissions": {
              "keys": "[parameters('keysPermissions')]",
              "secrets": "[parameters('secretsPermissions')]"
            }
          }
        ],
        "sku": {
          "name": "[parameters('skuName')]",
          "family": "A"
        },
        "networkAcls": {
          "defaultAction": "Allow",
          "bypass": "AzureServices"
        }
      }
    },
    {
      "type": "Microsoft.KeyVault/vaults/secrets",
      "apiVersion": "2023-07-01",
      "name": "[format('{0}/{1}', parameters('keyVaultName'), parameters('secretName'))]",
      "properties": {
        "value": "[parameters('secretValue')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
      ]
    }
  ],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('keyVaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
    }
  }
}

يتم تعريف موردين لـ Azure في القالب:

يمكن العثور على المزيد من نماذج قالب Azure Key Vault في قوالب Azure Quickstart.

نشر القالب

  1. حدد الصورة التالية لتسجيل الدخول إلى Azure وفتح قالب. ينشئ القالب مخزناً رئيسياً وبيانات سرية.

    Button to deploy the Resource Manager template to Azure.

  2. حدد القيم التالية أو أدخلها.

    ARM template, Key Vault integration, deploy portal

    استخدم القيمة الافتراضية لإنشاء خزنة المفاتيح والبيانات السرية، ما لم يتم تحديد ذلك.

    • الاشتراك: «select an Azure subscription».
    • مجموعة الموارد: حدد Create new، وأدخل اسمًا فريدًا لـ resourceGroup، ثم انقر فوق OK.
    • الموقع: حدد موقعًا. على سبيل المثال، وسط الولايات المتحدة.
    • اسم Key Vault: أدخل اسما لمخزن المفاتيح، والذي يجب أن يكون فريدا عالميا داخل مساحة الاسم .vault.azure.net. تحتاج إلى الاسم في القسم التالي عند التحقق من صحة النشر.
    • معرف المستأجر: تسترد وظيفة القالب معرف المستأجر تلقائيا. لا تقم بتغيير القيمة الافتراضية.
    • معرف مستخدم الإعلان: أدخل معرف عنصر مستخدم Microsoft Entra الذي قمت باسترداده من المتطلبات الأساسية.
    • Secret Name: أدخل اسما للسر الذي تخزنه في مخزن المفاتيح. على سبيل المثال، adminpassword.
    • Secret Value: أدخل القيمة السرية. إذا قمت بتخزين كلمة مرور، فمن المستحسن استخدام كلمة المرور التي أنشأتها في المتطلبات الأساسية.
    • أوافق على الشروط والأحكام المذكورة أعلاه: حدد.
  3. حدد شراء. بعد نشر المخزن الرئيسي بنجاح، ستتلقى إشعاراً:

    ARM template, Key Vault integration, deploy portal notification

يُستخدم مدخل Microsoft Azure لنشر القالب. بالإضافة إلى بوابة Azure، يمكنك أيضًا استخدام Azure PowerShell، Azure CLI, and REST API. لمعرفة طرق النشر الأخرى، راجع نشر القوالب.

مراجعة الموارد الموزعة

يمكنك إما استخدام مدخل Microsoft Azure للتحقق من مخزن المفاتيح والبيانات السرية، أو استخدام النص التالي Azure CLI أو Azure PowerShell لسرد البيانات السرية التي تم إنشاؤه.

echo "Enter your key vault name:" &&
read keyVaultName &&
az keyvault secret list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."

يبدو الإخراج مشابهًا لـ:

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

تستند البرامج التعليمية والبدايات السريعة الأخرى لـ Key Vault على هذه البداية السريعة. إذا كنت تخطط لمواصلة العمل مع الخطوات السريعة والبرامج التعليمية اللاحقة، فقد ترغب في ترك هذه الموارد في مكانها. عند عدم الحاجة إلى ذلك، احذف مجموعة الموارد، التي تحذف Key Vault والموارد ذات الصلة. لحذف مجموعة الموارد باستخدام Azure CLI أو Azure PowerShell:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

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

في هذه البداية السريعة، قمت بإنشاء مخزن مفاتيح وبيانات سرية باستخدام قالب ARM، وتحققت من صحة النشر. لمعرفة المزيد حول Key Vault و Azure Resource Manager، تابع إلى المقالات أدناه.