Tutorial: Erstellen von Azure-Portalformularen für eine Vorlagenspezifikation
Sie können ein Formular erstellen, das im Azure-Portal angezeigt wird, um Benutzer bei der Bereitstellung einer Vorlagenspezifikation zu unterstützen. Mit dem Formular können Benutzer Werte eingeben, die als Parameter an die Vorlagenspezifikation übergeben werden.
Wenn Sie die Vorlagenspezifikation erstellen, fassen Sie das Formular und die Azure Resource Manager-Vorlage (ARM-Vorlage) in einem Paket zusammen. Wenn Sie die Vorlagenspezifikation über das Portal bereitstellen, wird das Formular automatisch gestartet.
Der folgende Screenshot zeigt ein im Azure-Portal geöffnetes Formular.
Voraussetzungen
Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
Verwenden Sie mindestens Version 6.0.0 von Azure PowerShell. Verwenden Sie für die Azure CLI mindestens Version 2.24.0.
Erstellen der Vorlage
Um die verschiedenen Portalelemente anzuzeigen, die in einem Formular verfügbar sind, verwenden Sie eine ARM-Vorlage mit mehreren Parametern. Die folgende Vorlage erstellt einen Schlüsseltresor, konfiguriert die Benutzerberechtigungen für den Schlüsseltresor und fügt ein Geheimnis hinzu.
Kopieren Sie diese Datei, und speichern Sie sie lokal. In dieser Anleitung wird davon ausgegangen, dass der Name der Datei keyvault.json lautet, aber Sie können ihr jeden beliebigen Namen geben.
{
"$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')]"
}
}
]
}
Erstellen eines Standardformulars
Das Azure-Portal bietet eine Sandbox für die Erstellung und Vorschau von Formularen. Diese Sandbox kann ein Formular aus einer vorhandenen ARM-Vorlage rendern. Sie verwenden dieses Standardformular, um mit dem Erstellen eines Formulars für Ihre Vorlagenspezifikation zu beginnen. Weitere Informationen zur Formularstruktur finden Sie unter FormViewType.
Öffnen Sie Sandbox für Formularansicht.
Wählen Sie unter Pakettyp die Option CustomTemplate aus. Stellen Sie sicher, dass Sie den Pakettyp auswählen, bevor Sie die Bereitstellungsvorlage angeben.
Wählen Sie unter Bereitstellungsvorlage (optional) die Schlüsseltresorvorlage aus, die Sie lokal gespeichert haben. Wenn Sie gefragt werden, ob die aktuellen Änderungen überschrieben werden sollen, klicken Sie auf Ja. Das automatisch generierte Formular wird im Codefenster angezeigt. Das Formular kann über das Portal bearbeitet werden. Informationen zum Anpassen des Formulars finden Sie unter Anpassen des Formulars. Wenn Sie sich das automatisch generierte Formular genau ansehen, lautet der Standardtitel Testformularansicht, und es ist nur ein Schritt namens Grundlagen definiert.
{ "$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": { ... } } }
Um zu sehen, ob das Formular auch ohne Modifikationen funktioniert, wählen Sie Vorschau aus.
Die Sandbox zeigt das Formular an. Es enthält Felder zum Auswählen eines Abonnements, einer Ressourcengruppe und einer Region. Außerdem werden Felder für alle Parameter aus der Vorlage angezeigt.
Die meisten Felder sind Textfelder, aber einige Felder sind spezifisch für den Typ des Parameters. Wenn Ihre Vorlage zulässige Werte für einen Parameter enthält, verwendet das automatisch generierte Formular ein Dropdownelement. Das Dropdownelement ist mit den zulässigen Werten vorab aufgefüllt.
Zwischen dem Titel und den Projektdetails gibt es keine Registerkarten, da im Standardformular nur ein Schritt definiert ist. Im Abschnitt Formular anpassen teilen Sie die Parameter auf mehrere Registerkarten auf.
Warnung
Wählen Sie nicht Erstellen aus, da dies eine tatsächliche Bereitstellung auslöst. Sie haben später in diesem Tutorial die Möglichkeit, die Vorlagenspezifikation bereitzustellen.
Um die Vorschau zu beenden, wählen Sie Abbrechen aus.
Anpassen des Formulars
Das Standardformular ist ein guter Ausgangspunkt für das Verständnis von Formularen, aber in der Regel möchten Sie es anpassen. Sie können das Formular in der Sandbox oder in Visual Studio Code bearbeiten. Die Vorschauoption ist nur in der Sandbox verfügbar.
Geben Sie dem Formular einen Titel (title), der seine Verwendung beschreibt.
{ "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#", "view": { "kind": "Form", "properties": { "title": "Key Vault and secret",
In Ihrem Standardformular wurden alle Felder für Ihre Vorlage in einem Schritt namens Basics zusammengefasst. Damit Benutzer die Werte, die sie angeben, besser verstehen können, unterteilen Sie das Formular in Schritte. Jeder Schritt enthält Felder, die sich auf einen logischen Teil der bereitzustellenden Lösung beziehen.
Suchen Sie den Schritt mit der Bezeichnung Basics. Sie behalten diesen Schritt bei, fügen aber darunter Schritte hinzu. Die neuen Schritte konzentrieren sich auf das Konfigurieren des Schlüsseltresors, das Festlegen von Benutzerberechtigungen und das Angeben des Geheimnisses. Stellen Sie sicher, dass Sie nach dem Schritt „Basics“ ein Komma hinzufügen.
{ "$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": { ... } } }
Wichtig
Für Eigenschaften im Formular muss die Groß-/Kleinschreibung beachtet werden. Stellen Sie sicher, dass Sie die in den Beispielen gezeigte Groß-/Kleinschreibung verwenden.
Wählen Sie Vorschau aus. Sie sehen die Schritte, aber die meisten von enthalten keine Elemente.
Verschieben Sie nun Elemente in die geeigneten Schritte. Beginnen Sie mit den Elementen Secret Name und Secret Value. Entfernen Sie diese Elemente aus dem Schritt Basics, und fügen Sie in den Schritt Secret ein.
{ "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 } ] }
Wenn Sie Elemente verschieben, müssen Sie den Abschnitt
outputs
korrigieren. Derzeit verweist der Abschnitt „outputs“ auf diese Elemente, als ob sie sich noch im Schritt „Grundlagen“ befinden würden. Korrigieren Sie die Syntax, sodass sie auf die Elemente im Schrittsecret
verweist."outputs": { "parameters": { ... "secretName": "[steps('secret').secretName]", "secretValue": "[steps('secret').secretValue]" }
Fahren Sie mit dem Verschieben von Elementen in die entsprechenden Schritte fort. Anstatt jeden Schritt einzeln durchzugehen, sehen Sie sich das aktualisierte Formular an.
{ "$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]" } } }
Speichern Sie diese Datei lokal unter dem Namen keyvaultform.json.
Erstellen von Vorlagenspezifikationen
Wenn Sie die Vorlagenspezifikation erstellen, geben Sie beide Dateien an.
Verwenden Sie für PowerShell New-AzTemplateSpec, und geben Sie das Formular im Parameter -UIFormDefinitionFile
an.
New-AzTemplateSpec `
-name keyvaultspec `
-version 1 `
-ResourceGroupName templateSpecRG `
-location westus2 `
-templatefile keyvault.json `
-UIFormDefinitionFile keyvaultform.json
Bei Verwendung der Azure CLI verwenden Sie az ts create und geben das Formular im Parameter --ui-form-definition
an.
az ts create \
--name keyvaultspec \
--version 1 \
--resource-group templatespecRG \
--location westus2 \
--template-file keyvault.json \
--ui-form-definition keyvaultform.json
Bereitstellung über das Portal
Navigieren Sie zum Testen des Formulars im Portal zu Ihrer Vorlagenspezifikation. Wählen Sie Bereitstellen aus.
Das von Ihnen erstellte Formular wird angezeigt. Gehen Sie die Schritte durch, und geben Sie Werte für die Felder an.
Im Schritt Basics wird ein Feld für die Region angezeigt. Dieses Feld wird für den Standort der Ressourcengruppe verwendet. Im Schritt Key Vault wird ein Feld Location angezeigt. Dieses Feld wird für den Standort des Schlüsseltresors verwendet.
Im Schritt Permissions können Sie Ihre eigene Benutzer-ID für die Objekt-ID angeben. Verwenden Sie den Standardwert (["list"]
) für Schlüssel- und Geheimnisberechtigungen. Sie werden diese Option im nächsten Abschnitt verbessern.
Nachdem Sie alle anderen Werte angegeben haben, wählen Sie Erstellen aus, um die Vorlagenspezifikation bereitzustellen.
Verbessern des Formulars
Im vorherigen Abschnitt haben Sie Schritte hinzugefügt und Elemente verschoben, jedoch keine der Standardverhaltensweisen geändert. In diesem Abschnitt nehmen Sie Änderungen vor, um die Benutzerfreundlichkeit Ihrer Vorlagenspezifikation zu verbessern.
Zuvor waren die zwei Berechtigungsfelder Textfelder. Nun verwenden Sie ein Dropdownelement. Legen Sie den Typ auf Microsoft.Common.DropDown
fest.
Aktualisieren Sie keysPermissions
:
{
"name": "keysPermissions",
"type": "Microsoft.Common.DropDown",
Und secretsPermissions
:
{
"name": "secretsPermissions",
"type": "Microsoft.Common.DropDown",
Diese Felder müssen ein Array an die Vorlage übergeben. Ein normales Dropdownelement funktioniert nicht, weil Sie nur einen Wert auswählen können. Um mehr als einen Wert auszuwählen und als Array zu übergeben, fügen Sie das Feld multiselect
hinzu und legen es auf true
fest.
{
"name": "keysPermissions",
"type": "Microsoft.Common.DropDown",
"label": "Keys Permissions",
"multiselect": true,
{
"name": "secretsPermissions",
"type": "Microsoft.Common.DropDown",
"label": "Secrets Permissions",
"multiselect": true,
Abschließend müssen Sie die zulässigen Werte für das Dropdownelement und einen Standardwert angeben.
{
"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
}
Erstellen Sie eine neue Version der Vorlagenspezifikation.
Mit PowerShell:
New-AzTemplateSpec `
-name keyvaultspec `
-version 2 `
-ResourceGroupName templateSpecRG `
-location westus2 `
-templatefile keyvault.json `
-UIFormDefinitionFile keyvaultform.json
Oder der Azure CLI:
az ts create \
--name keyvaultspec \
--version 2 \
--resource-group templatespecRG \
--location westus2 \
--template-file keyvault.json \
--ui-form-definition keyvaultform.json
Stellen Sie Ihre Vorlagenspezifikation mit dem verbesserten Portalformular erneut bereit.
Beachten Sie, dass Ihre Berechtigungsfelder jetzt in einem Dropdownelement enthalten sind, das mehrere Werte zulässt.
Nächste Schritte
Weitere Informationen zur Bereitstellung einer Vorlagenspezifikation als verknüpfte Vorlage finden Sie unter Tutorial: Bereitstellen einer Vorlagenspezifikation als verknüpfte Vorlage.