البرنامج التعليمي: إنشاء نماذج مدخل Microsoft Azure لمواصفات قالب

يمكنك إنشاء نموذج يظهر في مدخل Microsoft Azure لمساعدة المستخدمين في نشر مواصفات قالب. يسمح النموذج للمستخدمين بإدخال القيم التي يتم تمريرها كمعلمات إلى مواصفات القالب.

عند إنشاء مواصفات القالب، يمكنك حزم النموذج وقالب مدير الموارد Azure (قالب ARM) معاً. يؤدي نشر مواصفات القالب عبر المدخل إلى تشغيل النموذج تلقائياً.

تظهر لقطة الشاشة التالية نموذجا مفتوحا في مدخل Microsoft Azure.

لقطة شاشة لنموذج مدخل Microsoft Azure لتوفير قيم لمواصفات القالب.

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

حساب Azure باشتراك نشط. إنشاء حساب مجاناً.

بالنسبة إلى Azure PowerShell، استخدم الإصدار 6.0.0 أو أحدث. بالنسبة إلى Azure CLI، استخدم الإصدار 2.24.0 أو أحدث.

إنشاء قالب

لإظهار عناصر المدخل المختلفة المتوفرة في نموذج، ستستخدم قالب ARM مع معلمات متعددة. يقوم القالب التالي بإنشاء خزنة مفاتيح، وتكوين أذونات إلى خزنة المفاتيح للمستخدم، وإضافة سر.

انسخ هذا الملف واحفظه محلياً. يفترض أنك قمت بتسمية هذا البرنامج التعليمي باسم keyvault.json ولكن يمكنك منحه أي اسم.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "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,
      "allowedValues": [
        true,
        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,
      "allowedValues": [
        true,
        false
      ],
      "metadata": {
        "description": "Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys."
      }
    },
    "enabledForTemplateDeployment": {
      "type": "bool",
      "defaultValue": false,
      "allowedValues": [
        true,
        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": "2022-07-01",
      "name": "[parameters('keyVaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enabledForDeployment": "[parameters('enabledForDeployment')]",
        "enabledForDiskEncryption": "[parameters('enabledForDiskEncryption')]",
        "enabledForTemplateDeployment": "[parameters('enabledForTemplateDeployment')]",
        "tenantId": "[parameters('tenantId')]",
        "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": "2022-07-01",
      "name": "[format('{0}/{1}', parameters('keyVaultName'), parameters('secretName'))]",
      "dependsOn": [
        "[resourceId('Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
      ],
      "properties": {
        "value": "[parameters('secretValue')]"
      }
    }
  ]
}

إنشاء نموذج افتراضي

يوفر مدخل Microsoft Azure بيئة الاختبار المعزولة لإنشاء ومعاينة النماذج. يمكن أن تعرض بيئة الاختبار المعزولة هذه نموذجا من قالب ARM موجود. ستستخدم هذا النموذج الافتراضي لبدء إنشاء نموذج لمواصفات القالب. لمزيد من المعلومات حول بنية النموذج، راجع FormViewType.

  1. افتح مربع بيئة الاختبار المعزولة لطريقة عرض النموذج.

    لقطة شاشة لواجهة بيئة الاختبار المعزولة لعرض نموذج مدخل Microsoft Azure.

  2. في نوع الحزمة، حدد CustomTemplate. تأكد من تحديد نوع الحزمة قبل تحديد قالب التوزيع.

  3. في قالب النشر (اختياري)، حدد قالب مخزن المفاتيح الذي حفظته محليا. عند مطالبتك إذا كنت تريد الكتابة فوق التغييرات الحالية، فحدد نعم. يتم عرض النموذج الذي تم إنشاؤه تلقائياً في نافذة التعليمات البرمجية. النموذج قابل للتحرير من المدخل. لتخصيص النموذج، راجع تخصيص النموذج. إذا نظرت عن كثب إلى النموذج الذي تم إنشاؤه تلقائيا، يسمى العنوان الافتراضي اختبار طريقة عرض النموذج، وهناك خطوة واحدة فقط تسمى الأساسيات المعرفة.

    {
      "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json",
      "view": {
        "kind": "Form",
        "properties": {
          "title": "Test Form View",
          "steps": [
            {
              "name": "basics",
              "label": "Basics",
              "elements": [
                ...
              ]
            }
          ]
        },
        "outputs": {
          ...
        }
      }
    }
    
  4. للتأكد من أنه يعمل دون أي تعديلات، حدد معاينة.

    لقطة شاشة لنموذج مدخل Azure الأساسي الذي تم إنشاؤه.

    تعرض بيئة الاختبار المعزولة النموذج. يحتوي على حقول لتحديد الاشتراك ومجموعة الموارد والمنطقة. كما أنه حقول لكافة المعلمات من القالب.

    معظم الحقول هي مربعات نص، ولكن بعض الحقول محددة لنوع المعلمة. عندما يتضمن القالب القيم المسموح بها لمعلمة، يستخدم النموذج الذي تم إنشاؤه تلقائياً عنصراً منسدلاً. يتم ملء عنصر القائمة المنسدلة مسبقا بالقيم المسموح بها.

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

    تحذير

    لا تقم بتحديد إنشاء حيث سيتم تشغيل نشر حقيقي. سيكون لديك فرصة لنشر مواصفات القالب في وقت لاحق في هذا البرنامج التعليمي.

  5. للخروج من المعاينة، حدد إلغاء الأمر.

تخصيص نموذج

النموذج الافتراضي هو نقطة بداية جيدة لفهم النماذج ولكن عادةً ما تريد تخصيصه. يمكنك تحريره في بيئة الاختبار المعزولة أو في Visual Studio Code. يتوفر خيار المعاينة فقط في بيئة الاختبار المعزولة.

  1. إعطاء النموذج عنواناً يصف استخدامه.

    {
      "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#",
      "view": {
        "kind": "Form",
        "properties": {
          "title": "Key Vault and secret",
    
  2. كان النموذج الافتراضي الخاص بك يحتوي على كافة الحقول الخاصة بالقالب الخاص بك ومجمعة في خطوة واحدة تسمى أساسيات. لمساعدة المستخدمين على فهم القيم التي يقدمونها، قم بتقسيم النموذج إلى خطوات. تحتوي كل خطوة على حقول ذات صلة بجزء منطقي من الحل لنشرها.

    ابحث عن الخطوة المسماة أساسيات. ستحتفظ بهذه الخطوة ولكن يمكنك إضافة خطوات أسفلها. وستركز الخطوات الجديدة على تكوين خزنة المفاتيح، وإعداد أذونات المستخدم، وتحديد السر. تأكد من إضافة فاصلة بعد خطوة الأساسيات.

    {
      "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#",
      "view": {
        "kind": "Form",
        "properties": {
          "title": "Key Vault and secret",
          "steps": [
            {
              "name": "basics",
              "label": "Basics",
              "elements": [
                ...
              ]
            },
            {
              "name": "keyvault",
              "label": "Key Vault",
              "elements": [
              ]
            },
            {
              "name": "permissions",
              "label": "Permissions",
              "elements": [
              ]
            },
            {
              "name": "secret",
              "label": "Secret",
              "elements": [
              ]
            }
          ]
        },
        "outputs": {
          ...
        }
      }
    }
    

    هام

    تُعد الخصائص في النموذج حساسة لحالة الأحرف. تأكد من استخدام حالة الأحرف الموضحة في الأمثلة.

  3. حدد معاينة. سترى الخطوات، ولكن معظمها ليس لديها أي عناصر.

    لقطة شاشة لنموذج مدخل Microsoft Azure مع خطوات متعددة.

  4. الآن، نقل العناصر إلى الخطوات المناسبة. ابدأ بالعناصر المسماة الاسم السري والقيمة السرية. إزالة هذه العناصر من الخطوة أساسيات وإضافتها إلى الخطوة البيانات السرية.

    {
      "name": "secret",
      "label": "Secret",
      "elements": [
      {
          "name": "secretName",
          "type": "Microsoft.Common.TextBox",
          "label": "Secret Name",
          "defaultValue": "",
          "toolTip": "Specifies the name of the secret that you want to create.",
          "constraints": {
            "required": true,
            "regex": "",
            "validationMessage": ""
          },
          "visible": true
        },
        {
          "name": "secretValue",
          "type": "Microsoft.Common.PasswordBox",
          "label": {
            "password": "Secret Value",
            "confirmPassword": "Confirm password"
          },
          "toolTip": "Specifies the value of the secret that you want to create.",
          "constraints": {
            "required": true,
            "regex": "",
            "validationMessage": ""
          },
          "options": {
            "hideConfirmation": true
          },
          "visible": true
        }
      ]
    }
    
  5. عند نقل العناصر، تحتاج إلى إصلاح القسم outputs. وفي الوقت الراهن، يشير قسم النواتج إلى تلك العناصر كما لو كانت لا تزال في خطوة الأساسيات. إصلاح بناء الجملة بحيث يشير إلى العناصر في الخطوة secret.

    "outputs": {
      "parameters": {
        ...
        "secretName": "[steps('secret').secretName]",
        "secretValue": "[steps('secret').secretValue]"
      }
    
  6. متابعة نقل العناصر إلى الخطوات المناسبة. بدلاً من التنقل إلى كل واحد، ألقِ نظرة على النموذج المُحدث.

    {
      "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#",
      "view": {
        "kind": "Form",
        "properties": {
          "title": "Key Vault and secret",
          "steps": [
            {
              "name": "basics",
              "label": "Basics",
              "elements": [
                {
                  "name": "resourceScope",
                  "type": "Microsoft.Common.ResourceScope",
                  "location": {
                    "resourceTypes": [
                      "microsoft.resources/resourcegroups"
                    ]
                  }
                }
              ]
            },
            {
              "name": "keyvault",
              "label": "Key Vault",
              "elements": [
                {
                  "name": "keyVaultName",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Key Vault Name",
                  "defaultValue": "",
                  "toolTip": "Specifies the name of the key vault.",
                  "constraints": {
                    "required": true,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                },
                {
                  "name": "skuName",
                  "type": "Microsoft.Common.DropDown",
                  "label": "Sku Name",
                  "defaultValue": "Standard",
                  "toolTip": "Specifies whether the key vault is a standard vault or a premium vault.",
                  "constraints": {
                    "required": false,
                    "allowedValues": [
                      {
                        "label": "Standard",
                        "value": "Standard"
                      },
                      {
                        "label": "Premium",
                        "value": "Premium"
                      }
                    ]
                  },
                  "visible": true
                },
                {
                  "name": "location",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Location",
                  "defaultValue": "[[resourceGroup().location]",
                  "toolTip": "Specifies the Azure location where the key vault should be created.",
                  "constraints": {
                    "required": false,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                },
                {
                  "name": "enabledForDeployment",
                  "type": "Microsoft.Common.DropDown",
                  "label": "Enabled For Deployment",
                  "defaultValue": "false",
                  "toolTip": "Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.",
                  "constraints": {
                    "required": false,
                    "allowedValues": [
                      {
                        "label": "true",
                        "value": true
                      },
                      {
                        "label": "false",
                        "value": false
                      }
                    ]
                  },
                  "visible": true
                },
                {
                  "name": "enabledForDiskEncryption",
                  "type": "Microsoft.Common.DropDown",
                  "label": "Enabled For Disk Encryption",
                  "defaultValue": "false",
                  "toolTip": "Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.",
                  "constraints": {
                    "required": false,
                    "allowedValues": [
                      {
                        "label": "true",
                        "value": true
                      },
                      {
                        "label": "false",
                        "value": false
                      }
                    ]
                  },
                  "visible": true
                },
                {
                  "name": "enabledForTemplateDeployment",
                  "type": "Microsoft.Common.DropDown",
                  "label": "Enabled For Template Deployment",
                  "defaultValue": "false",
                  "toolTip": "Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault.",
                  "constraints": {
                    "required": false,
                    "allowedValues": [
                      {
                        "label": "true",
                        "value": true
                      },
                      {
                        "label": "false",
                        "value": false
                      }
                    ]
                  },
                  "visible": true
                }
              ]
            },
            {
              "name": "permissions",
              "label": "Permissions",
              "elements": [
                {
                  "name": "tenantId",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Tenant Id",
                  "defaultValue": "[[subscription().tenantId]",
                  "toolTip": "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.",
                  "constraints": {
                    "required": false,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                },
                {
                  "name": "objectId",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Object Id",
                  "defaultValue": "",
                  "toolTip": "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.",
                  "constraints": {
                    "required": true,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                },
                {
                  "name": "keysPermissions",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Keys Permissions",
                  "defaultValue": "[[\"list\"]",
                  "toolTip": "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.",
                  "constraints": {
                    "required": false,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                },
                {
                  "name": "secretsPermissions",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Secrets Permissions",
                  "defaultValue": "[[\"list\"]",
                  "toolTip": "Specifies the permissions to secrets in the vault. Valid values are: all, get, list, set, delete, backup, restore, recover, and purge.",
                  "constraints": {
                    "required": false,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                }
              ]
            },
            {
              "name": "secret",
              "label": "Secret",
              "elements": [
                {
                  "name": "secretName",
                  "type": "Microsoft.Common.TextBox",
                  "label": "Secret Name",
                  "defaultValue": "",
                  "toolTip": "Specifies the name of the secret that you want to create.",
                  "constraints": {
                    "required": true,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "visible": true
                },
                {
                  "name": "secretValue",
                  "type": "Microsoft.Common.PasswordBox",
                  "label": {
                    "password": "Secret Value",
                    "confirmPassword": "Confirm password"
                  },
                  "toolTip": "Specifies the value of the secret that you want to create.",
                  "constraints": {
                    "required": true,
                    "regex": "",
                    "validationMessage": ""
                  },
                  "options": {
                    "hideConfirmation": true
                  },
                  "visible": true
                }
              ]
            }
          ]
        },
        "outputs": {
          "parameters": {
            "keyVaultName": "[steps('keyvault').keyVaultName]",
            "location": "[steps('keyvault').location]",
            "enabledForDeployment": "[steps('keyvault').enabledForDeployment]",
            "enabledForDiskEncryption": "[steps('keyvault').enabledForDiskEncryption]",
            "enabledForTemplateDeployment": "[steps('keyvault').enabledForTemplateDeployment]",
            "tenantId": "[steps('permissions').tenantId]",
            "objectId": "[steps('permissions').objectId]",
            "keysPermissions": "[steps('permissions').keysPermissions]",
            "secretsPermissions": "[steps('permissions').secretsPermissions]",
            "skuName": "[steps('keyvault').skuName]",
            "secretName": "[steps('secret').secretName]",
            "secretValue": "[steps('secret').secretValue]"
          },
          "kind": "ResourceGroup",
          "location": "[steps('basics').resourceScope.location.name]",
          "resourceGroupId": "[steps('basics').resourceScope.resourceGroup.id]"
        }
      }
    }
    
  7. احفظ هذا الملف محلياً باسم keyvaultform.json.

إنشاء مواصفات القالب

عند إنشاء مواصفات القالب، قم بتوفير كلا الملفين.

بالنسبة لـ PowerShell، استخدم New-AzTemplateSpec وقم بتوفير النموذج في المعلمة -UIFormDefinitionFile.

New-AzTemplateSpec `
  -name keyvaultspec `
  -version 1 `
  -ResourceGroupName templateSpecRG `
  -location westus2 `
  -templatefile keyvault.json `
  -UIFormDefinitionFile keyvaultform.json

بالنسبة إلى Azure CLI، استخدم إنشاء az ts وقم بتوفير النموذج في المعلمة --ui-form-definition.

az ts create \
  --name keyvaultspec \
  --version 1 \
  --resource-group templatespecRG \
  --location westus2 \
  --template-file keyvault.json \
  --ui-form-definition keyvaultform.json

النشر من خلال المدخل

لاختبار النموذج، انتقل إلى المدخل وانتقل إلى مواصفات القالب. حدد نشر.

لقطة شاشة لنظرة عامة على مواصفات قالب Azure مع تمييز خيار التوزيع.

سترى النموذج الذي أنشأته. انتقل من خلال الخطوات وتوفير القيم للحقول.

في خطوة الأساسيات سترى حقلاً لـ المنطقة. يستخدم هذا الحقل لموقع مجموعة الموارد. في خطوة Key Vault سترى حقلاً لـ الموقع. يستخدم هذا الحقل لموقع المخزن الرئيسي.

في الخطوة أذونات، يمكنك توفير معرف المستخدم الخاص بك لمعرف الكائن. استخدم القيمة الافتراضية (["list"]) للأذونات الرئيسية والسرية. ستحسن هذا الخيار في القسم التالي.

عند الانتهاء من توفير القيم، حدد إنشاء لنشر مواصفات القالب.

تحسين النموذج

في القسم السابق، قمت بإضافة الخطوات ونقل العناصر، ولكن لم تقم بتغيير أي من السلوكيات الافتراضية. في هذا القسم، ستقوم بإجراء تغييرات تحسن تجربة مستخدمي مواصفات القالب.

سابقا، كان حقلي الأذونات مربعات نص. الآن، ستستخدم القائمة المنسدلة. تعيين النوع إلى Microsoft.Common.DropDown.

تحديث keysPermissions:

{
  "name": "keysPermissions",
  "type": "Microsoft.Common.DropDown",

وsecretsPermissions:

{
  "name": "secretsPermissions",
  "type": "Microsoft.Common.DropDown",

تحتاج هذه الحقول لتمرير صفيف إلى القالب. لن تعمل القائمة المنسدلة العادية لأنها تتيح لك تحديد قيمة واحدة فقط. لتحديد أكثر من قيمة وتمريرها كصفيف، أضف multiselect الحقل ثم قم بتعيينه إلى true.

{
  "name": "keysPermissions",
  "type": "Microsoft.Common.DropDown",
  "label": "Keys Permissions",
  "multiselect": true,
{
  "name": "secretsPermissions",
  "type": "Microsoft.Common.DropDown",
  "label": "Secrets Permissions",
  "multiselect": true,

وأخيراً، يجب تحديد القيم المسموح بها للقائمة المنسدلة والقيمة الافتراضية.

{
  "name": "keysPermissions",
  "type": "Microsoft.Common.DropDown",
  "label": "Keys Permissions",
  "multiselect": true,
  "defaultValue":{
    "value": "list"
  },
  "toolTip": "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.",
  "constraints": {
    "required": false,
    "allowedValues":[
      {
        "label": "all",
        "value": "all"
      },
      {
        "label": "encrypt",
        "value": "encrypt"
      },
      {
        "label": "decrypt",
        "value": "decrypt"
      },
      {
        "label": "list",
        "value": "list"
      },
      {
        "label": "delete",
        "value": "delete"
      },
      {
        "label": "backup",
        "value": "backup"
      },
      {
        "label": "restore",
        "value": "restore"
      },
      {
        "label": "recover",
        "value": "recover"
      },
      {
        "label": "purge",
        "value": "purge"
      },
      {
        "label": "wrapKey",
        "value": "wrapKey"
      },
      {
        "label": "unwrapKey",
        "value": "unwrapKey"
      },
      {
        "label": "sign",
        "value": "sign"
      },
      {
        "label": "verify",
        "value": "verify"
      },
      {
        "label": "get",
        "value": "get"
      },
      {
        "label": "create",
        "value": "create"
      },
      {
        "label": "update",
        "value": "update"
      },
      {
        "label": "import",
        "value": "import"
      }
    ]
  },
  "visible": true
},
{
  "name": "secretsPermissions",
  "type": "Microsoft.Common.DropDown",
  "label": "Secrets Permissions",
  "multiselect": true,
  "defaultValue":{
    "value": "list"
  },
  "toolTip": "Specifies the permissions to secrets in the vault. Valid values are: all, get, list, set, delete, backup, restore, recover, and purge.",
  "constraints": {
    "required": false,
    "allowedValues":[
      {
        "label": "all",
        "value": "all"
      },
      {
        "label": "get",
        "value": "get"
      },
      {
        "label": "list",
        "value": "list"
      },
      {
        "label": "set",
        "value": "set"
      },
      {
        "label": "delete",
        "value": "delete"
      },
      {
        "label": "backup",
        "value": "backup"
      },
      {
        "label": "restore",
        "value": "restore"
      },
      {
        "label": "recover",
        "value": "recover"
      },
      {
        "label": "purge",
        "value": "purge"
      }
    ]
  },
  "visible": true
}

إنشاء إصدار جديد من مواصفات القالب.

باستخدام PowerShell:

New-AzTemplateSpec `
  -name keyvaultspec `
  -version 2 `
  -ResourceGroupName templateSpecRG `
  -location westus2 `
  -templatefile keyvault.json `
  -UIFormDefinitionFile keyvaultform.json

أو Azure CLI:

az ts create \
  --name keyvaultspec \
  --version 2 \
  --resource-group templatespecRG \
  --location westus2 \
  --template-file keyvault.json \
  --ui-form-definition keyvaultform.json

إعادة توزيع مواصفات القالب مع نموذج المدخل المُحسن.

لقطة شاشة لنموذج مدخل Microsoft Azure لتوفير قيم لمواصفات القالب.

لاحظ أن حقول الإذن الخاصة بك الآن في القائمة المنسدلة التي تسمح بقيم متعددة.

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

لمعرفة المزيد عن توزيع مواصفات قالب كقالب مرتبط، راجع البرنامج التعليمي: توزيع مواصفات القالب كقالب مرتبط.