Kurz: Vytvoření Azure Portal formulářů pro specifikaci šablony
Můžete vytvořit formulář, který se zobrazí v Azure Portal, který uživatelům pomůže nasadit specifikaci šablony. Formulář umožňuje uživatelům zadat hodnoty, které jsou předány jako parametry do specifikace šablony.
Při vytváření specifikace šablony zabalíte formulář a šablonu Azure Resource Manager (šablonu ARM). Nasazením specifikace šablony prostřednictvím portálu se formulář automaticky spustí.
Následující snímek obrazovky ukazuje formulář otevřený v Azure Portal.
Požadavky
Účet Azure s aktivním předplatným. Vytvořte si účet zdarma.
Pro Azure PowerShell použijte verzi 6.0.0 nebo novější. Pro Azure CLI použijte verzi 2.24.0 nebo novější.
Vytvoření šablony
Pokud chcete zobrazit různé prvky portálu, které jsou dostupné ve formuláři, použijete šablonu ARM s několika parametry. Následující šablona vytvoří trezor klíčů, nakonfiguruje oprávnění k trezoru klíčů pro uživatele a přidá tajný kód.
Zkopírujte tento soubor a uložte ho místně. V tomto kurzu se předpokládá, že jste ho pojmenovali keyvault.json , ale můžete mu dát libovolný název.
{
"$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')]"
}
}
]
}
Vytvořit výchozí formulář
Azure Portal poskytuje sandbox pro vytváření formulářů a jejich náhledy. Tento sandbox může vykreslit formulář z existující šablony ARM. Tento výchozí formulář použijete k tomu, abyste mohli začít vytvářet formulář pro specifikaci šablony. Další informace o struktuře formuláře najdete v tématu FormViewType.
Otevřete sandbox formulářového zobrazení.
V části Typ balíčku vyberte CustomTemplate. Před zadáním šablony nasazení nezapomeňte vybrat typ balíčku.
V části Šablona nasazení (volitelné) vyberte šablonu trezoru klíčů, kterou jste uložili místně. Po zobrazení výzvy k přepsání aktuálních změn vyberte Ano. Automaticky vygenerovaný formulář se zobrazí v okně kódu. Formulář je možné upravovat na portálu. Informace o přizpůsobení formuláře najdete v tématu Přizpůsobení formuláře. Pokud se pozorně podíváte na automaticky vygenerovaný formulář, výchozí název se nazývá Zobrazení testovacího formuláře a je definován pouze jeden krok, který se nazývá základy.
{ "$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": { ... } } }
Pokud chcete zjistit, že to funguje bez jakýchkoli úprav, vyberte Náhled.
Sandbox zobrazí formulář. Obsahuje pole pro výběr předplatného, skupiny prostředků a oblasti. Obsahuje také pole pro všechny parametry ze šablony.
Většina polí jsou textová pole, ale některá pole jsou specifická pro typ parametru. Pokud šablona obsahuje povolené hodnoty parametru, automaticky vygenerovaný formulář použije element rozevíracího seznamu. Element rozevíracího seznamu je předem vyplněn povolenými hodnotami.
Mezi nadpisem a podrobnostmi projektu nejsou žádné karty, protože výchozí formulář má definovaný pouze jeden krok. V části Přizpůsobit formulář rozdělíte parametry na několik karet.
Upozornění
Nevybírejte Vytvořit , protože spustí skutečné nasazení. Později v tomto kurzu budete mít možnost nasadit specifikaci šablony.
Pokud chcete verzi Preview ukončit, vyberte Zrušit.
Přizpůsobení formuláře
Výchozí formulář je dobrým výchozím bodem pro pochopení formulářů, ale obvykle ho budete chtít přizpůsobit. Můžete ho upravit v sandboxu nebo v editoru Visual Studio Code. Možnost Preview je dostupná jenom v sandboxu.
Dejte formuláři název , který popisuje jeho použití.
{ "$schema": "https://schema.management.azure.com/schemas/2021-09-09/uiFormDefinition.schema.json#", "view": { "kind": "Form", "properties": { "title": "Key Vault and secret",
Ve výchozím formuláři byla všechna pole pro šablonu sloučena do jednoho kroku s názvem Základy. Abyste uživatelům pomohli porozumět hodnotám, které poskytují, rozdělte formulář do kroků. Každý krok obsahuje pole související s logickou částí řešení, které se má nasadit.
Vyhledejte krok s popiskem Základy. Tento krok ponecháte, ale přidáte pod něj kroky. Nové kroky se zaměří na konfiguraci trezoru klíčů, nastavení uživatelských oprávnění a zadání tajného kódu. Za krok základy nezapomeňte přidat čárku.
{ "$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": { ... } } }
Důležité
Ve vlastnostech formuláře se rozlišují velká a malá písmena. Ujistěte se, že používáte písmena uvedená v příkladech.
Vyberte Náhled. Uvidíte kroky, ale většina z nich neobsahuje žádné prvky.
Teď přesuňte prvky do příslušných kroků. Začněte s prvky označenými názvem tajného kódu a hodnotou tajného klíče. Odeberte tyto prvky z kroku Základy a přidejte je do kroku Tajné kódy.
{ "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 } ] }
Při přesouvání prvků je potřeba oddíl opravit
outputs
. V současné době oddíl outputs odkazuje na tyto prvky, jako by byly stále v kroku základy. Opravte syntaxi tak, aby odkazovat na prvky vsecret
kroku."outputs": { "parameters": { ... "secretName": "[steps('secret').secretName]", "secretValue": "[steps('secret').secretValue]" }
Pokračujte přesunem prvků k příslušným krokům. Místo toho, abyste si prošli každou z nich, podívejte se na aktualizovaný formulář.
{ "$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]" } } }
Uložte tento soubor místně s názvem keyvaultform.json.
Vytvoření specifikace šablony
Při vytváření specifikace šablony zadejte oba soubory.
Pro PowerShell použijte New-AzTemplateSpec a zadejte formulář v parametru -UIFormDefinitionFile
.
New-AzTemplateSpec `
-name keyvaultspec `
-version 1 `
-ResourceGroupName templateSpecRG `
-location westus2 `
-templatefile keyvault.json `
-UIFormDefinitionFile keyvaultform.json
Pro Azure CLI použijte az ts create a zadejte formulář v parametru --ui-form-definition
.
az ts create \
--name keyvaultspec \
--version 1 \
--resource-group templatespecRG \
--location westus2 \
--template-file keyvault.json \
--ui-form-definition keyvaultform.json
Nasazení prostřednictvím portálu
Pokud chcete formulář otestovat, přejděte na portál a přejděte na specifikaci šablony. Vyberte Nasadit.
Zobrazí se formulář, který jste vytvořili. Projděte si kroky a zadejte hodnoty polí.
V kroku Základy uvidíte pole Pro oblast. Toto pole se používá pro umístění skupiny prostředků. V Key Vault kroku uvidíte pole pro Umístění. Toto pole se používá pro umístění trezoru klíčů.
V kroku Oprávnění můžete zadat vlastní ID uživatele pro ID objektu. Pro oprávnění ke klíči a tajnému klíči použijte výchozí hodnotu (["list"]
). Tuto možnost vylepšíte v další části.
Po zadání hodnot vyberte Vytvořit a nasaďte specifikaci šablony.
Vylepšení formuláře
V předchozí části jste přidali kroky a přesunuli prvky, ale nezměnili jste žádné výchozí chování. V této části provedete změny, které zlepší prostředí pro uživatele specifikace šablony.
Dříve byla tato dvě pole oprávnění textová pole. Teď použijete rozevírací seznam. Nastavte typ na Microsoft.Common.DropDown
.
Aktualizovat keysPermissions
:
{
"name": "keysPermissions",
"type": "Microsoft.Common.DropDown",
A secretsPermissions
:
{
"name": "secretsPermissions",
"type": "Microsoft.Common.DropDown",
Tato pole musí šabloně předat pole. Běžný rozevírací seznam nebude fungovat, protože umožňuje vybrat jenom jednu hodnotu. Pokud chcete vybrat více než jednu hodnotu a předat ji jako pole, přidejte multiselect
pole a nastavte na true
.
{
"name": "keysPermissions",
"type": "Microsoft.Common.DropDown",
"label": "Keys Permissions",
"multiselect": true,
{
"name": "secretsPermissions",
"type": "Microsoft.Common.DropDown",
"label": "Secrets Permissions",
"multiselect": true,
Nakonec musíte zadat povolené hodnoty pro rozevírací seznam a výchozí hodnotu.
{
"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
}
Vytvořte novou verzi specifikace šablony.
Pomocí PowerShellu:
New-AzTemplateSpec `
-name keyvaultspec `
-version 2 `
-ResourceGroupName templateSpecRG `
-location westus2 `
-templatefile keyvault.json `
-UIFormDefinitionFile keyvaultform.json
Nebo Azure CLI:
az ts create \
--name keyvaultspec \
--version 2 \
--resource-group templatespecRG \
--location westus2 \
--template-file keyvault.json \
--ui-form-definition keyvaultform.json
Znovu nasaďte specifikaci šablony pomocí vylepšeného portálového formuláře.
Všimněte si, že pole oprávnění jsou teď rozevírací seznam, který umožňuje více hodnot.
Další kroky
Další informace o nasazení specifikace šablony jako propojené šablony najdete v tématu Kurz: Nasazení specifikace šablony jako propojené šablony.