Tutoriel : Créer des formulaires Portail Azure pour un spec de modèle

Vous pouvez créer un formulaire qui s’affiche dans le portail Azure pour aider les utilisateurs à déployer une spec de modèle. Le formulaire permet aux utilisateurs d’entrer des valeurs qui sont passées comme paramètres à la spec de modèle.

Lorsque vous créez le spec de modèle, vous empaquetez le formulaire et le modèle Azure Resource Manager (modèle ARM) ensemble. Le déploiement du spec de modèle via le portail lance automatiquement le formulaire.

La capture d’écran suivante montre un formulaire ouvert dans le portail Azure.

Capture d’écran du formulaire du Portail Azure pour fournir des valeurs à un spec de modèle.

Prérequis

Compte Azure avec un abonnement actif. Créez un compte gratuitement.

Pour Azure PowerShell, utilisez la version 6.0.0 ou ultérieure. Pour Azure CLI, utilisez la version 2.24.0 ou ultérieure.

Créer un modèle

Pour montrer les différents éléments du portail qui sont disponibles dans un formulaire, vous utiliserez un modèle ARM avec plusieurs paramètres. Le modèle suivant crée un coffre de clés, configure les autorisations sur le coffre de clés pour un utilisateur et ajoute un secret.

Copiez ce fichier et enregistrez-le localement. Ce tutoriel part du principe que vous l’avez nommé keyvault.json, mais vous pouvez lui donner n’importe quel nom.

{
  "$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')]"
      }
    }
  ]
}

Créer un formulaire par défaut

Le portail Azure fournit un bac à sable pour la création et la prévisualisation de formulaires. Ce bac à sable peut afficher un formulaire à partir d’un modèle ARM existant. Vous allez utiliser ce formulaire par défaut pour commencer à créer un formulaire pour votre spec de modèle. Pour plus d’informations sur la structure du formulaire, consultez FormViewType.

  1. Ouvrez le bac à sable d’affichage de formulaire.

    Capture d’écran de l’interface de bac à sable d’affichage de formulaire du Portail Azure.

  2. Dans Type de package, sélectionnez CustomTemplate. Veillez à sélectionner le type de package avant de spécifier le modèle de déploiement.

  3. Dans Modèle de déploiement (facultatif), sélectionnez le modèle de coffre de clés que vous avez enregistré localement. Lorsque vous y êtes invité, si vous souhaitez remplacer les modifications actuelles, sélectionnez Oui. Le formulaire généré automatiquement s’affiche dans la fenêtre de code. Le formulaire est modifiable à partir du portail. Pour personnaliser le formulaire, consultez Personnaliser le formulaire. Si vous examinez attentivement le formulaire généré automatiquement, vous voyez que le titre par défaut est Mode Formulaire de test et qu’il n’y a qu’une seule étape appelée basics définie.

    {
      "$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. Pour voir qu’il fonctionne sans aucune modification, sélectionnez Aperçu.

    Capture d’écran du formulaire de base généré du Portail Azure.

    Le bac à sable affiche le formulaire. Il comporte des champs pour sélectionner un abonnement, un groupe de ressources et une région. Il comporte également des champs pour tous les paramètres du modèle.

    La plupart des champs sont des zones de texte, mais certains champs sont spécifiques au type de paramètre. Lorsque votre modèle comprend des valeurs autorisées pour un paramètre, le formulaire généré automatiquement utilise une liste déroulante. La liste déroulante est préremplie avec les valeurs autorisées.

    Entre le titre et les détails du projet, il n’y a pas d’onglets, car le formulaire par défaut n’a qu’une seule étape définie. Dans la section Personnaliser le formulaire, vous allez diviser les paramètres en plusieurs onglets.

    Avertissement

    Ne sélectionnez pas Créer, car cela lancera un déploiement réel. Vous aurez la possibilité de déployer le spec du modèle plus loin dans ce tutoriel.

  5. Pour quitter l’aperçu, sélectionnez Annuler.

Personnaliser le formulaire

Le formulaire par défaut est un bon point de départ pour comprendre les formulaires, mais il est généralement préférable de le personnaliser. Vous pouvez le modifier dans le bac à sable ou dans Visual Studio Code. L’option d’aperçu est uniquement disponible dans le bac à sable.

  1. Donnez au formulaire un titre qui décrit son utilisation.

    {
      "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#",
      "view": {
        "kind": "Form",
        "properties": {
          "title": "Key Vault and secret",
    
  2. Dans votre formulaire par défaut, tous les champs de votre modèle ont été regroupés en une seule étape appelée Basics. Pour aider les utilisateurs à comprendre les valeurs qu’ils fournissent, divisez le formulaire en étapes. Chaque étape contient des champs associés à une partie logique de la solution à déployer.

    Recherchez l’étape étiquetée Basics. Vous allez conserver cette étape et en ajouter d’autres en dessous. Les nouvelles étapes porteront sur la configuration du coffre de clés, la définition des autorisations utilisateur et la spécification du secret. Veillez à ajouter une virgule après l’étape Basics.

    {
      "$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": {
          ...
        }
      }
    }
    

    Important

    Les propriétés du formulaire respectent la casse. Veillez à utiliser la casse indiquée dans les exemples.

  3. Sélectionnez Aperçu. Vous verrez les étapes, mais la plupart d’entre elles n’ont pas d’éléments.

    Capture d’écran du formulaire du Portail Azure avec plusieurs étapes.

  4. À présent, déplacez les éléments vers les étapes appropriées. Commencez par les éléments étiquetés Secret Name et Secret Value. Supprimez ces éléments de l’étape Basics et ajoutez-les à l’étape Secret.

    {
      "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. Lorsque vous déplacez des éléments, vous devez corriger la section outputs. Actuellement, la section outputs fait référence à ces éléments comme s’ils étaient toujours dans l’étape basics. Corrigez la syntaxe de manière à ce qu’elle fasse référence aux éléments de l’étape secret.

    "outputs": {
      "parameters": {
        ...
        "secretName": "[steps('secret').secretName]",
        "secretValue": "[steps('secret').secretValue]"
      }
    
  6. Continuez à déplacer les éléments vers les étapes appropriées. Au lieu de parcourir chacune d’entre elles, jetez un coup d’œil au formulaire mis à jour.

    {
      "$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. Enregistrez ce fichier localement sous le nom keyvaultform.json.

Créer une spec de modèle

Lorsque vous créez le spec de modèle, fournissez les deux fichiers.

Pour PowerShell, utilisez New-AzTemplateSpec et fournissez le formulaire dans le paramètre -UIFormDefinitionFile.

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

Pour Azure CLI, utilisez az ts create et fournissez le formulaire dans le paramètre --ui-form-definition.

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

Déployer via le portail

Pour tester le formulaire, rendez-vous sur le portail et accédez à votre spec de modèle. Sélectionnez Déployer.

Capture d’écran de l’affichage d’une spec de modèle Azure avec l’option de déploiement mise en évidence.

Vous verrez le formulaire que vous avez créé. Suivez les étapes et fournissez des valeurs pour les champs.

À l’étape Basics, vous verrez un champ pour Region. Ce champ est utilisé pour l’emplacement du groupe de ressources. À l’étape Key Vault, vous verrez un champ pour Location. Ce champ est utilisé pour l’emplacement du coffre de clés.

À l’étape Permissions, vous pouvez fournir votre propre identifiant utilisateur pour l’ID d’objet. Utilisez la valeur par défaut (["list"]) pour les autorisations de clé et de secret. Vous allez améliorer cette option dans la section suivante.

Lorsque vous avez fini de fournir les valeurs, sélectionnez Créer pour déployer le spec de modèle.

Améliorer le formulaire

Dans la section précédente, vous avez ajouté des étapes et déplacé des éléments, mais vous n’avez modifié aucun des comportements par défaut. Dans cette section, vous allez apporter des modifications qui amélioreront l’expérience des utilisateurs de votre spec de modèle.

Auparavant, les deux champs d’autorisations étaient des zones de texte. À présent, vous utiliserez une liste déroulante. Définissez le type sur Microsoft.Common.DropDown.

Mettez à jour keysPermissions :

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

Et secretsPermissions :

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

Ces champs doivent transmettre un tableau au modèle. Une liste déroulante classique ne fonctionnera pas, car elle ne permet de sélectionner qu’une seule valeur. Pour sélectionner plus d’une valeur et les transmettre sous forme de tableau, ajoutez le champ multiselect et définissez-le sur true.

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

Enfin, vous devez spécifier les valeurs autorisées pour la liste déroulante et une valeur par défaut.

{
  "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
}

Créez une nouvelle version du spec de modèle.

Avec PowerShell :

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

Ou Azure CLI :

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

Redéployez votre spec de modèle avec le formulaire de portail amélioré.

Capture d’écran du formulaire du Portail Azure pour fournir des valeurs à une spec de modèle.

Notez que vos champs d’autorisation sont désormais des listes déroulantes qui autorisent plusieurs valeurs.

Étapes suivantes

Pour découvrir le déploiement d’une spec de modèle en tant que modèle lié, consultez Tutoriel : Déployer une spec de modèle en tant que modèle lié.