Cvičení – přidání souboru parametrů a zabezpečených parametrů
V tomto cvičení vytvoříte soubor parametrů, který poskytuje hodnoty pro soubor Bicep, který jste vytvořili dříve. Ve stejném souboru parametrů přidáte také odkazy služby Azure Key Vault, abyste mohli bezpečně poskytovat citlivé informace.
Během tohoto procesu provedete následující úlohy:
- Přidejte některé zabezpečené parametry.
- Vytvořte soubor parametrů.
- Otestujte nasazení a ujistěte se, že je soubor parametrů platný.
- Vytvořte trezor klíčů a tajné kódy.
- Aktualizujte soubor parametrů tak, aby odkazovat na tajné kódy trezoru klíčů.
- Znovu otestujte nasazení, abyste měli jistotu, že je soubor parametrů stále platný.
Odebrání výchozí hodnoty skladové položky plánu služby App Service
Aby šablona fungovala v různých prostředích, podrobnosti skladové položky plánu služby Aplikace Azure se do souboru parametrů zadají místo výchozí hodnoty.
V souboru main.bicep v editoru Visual Studio Code aktualizujte appServicePlanSku
parametr tak, aby odebral výchozí hodnotu.
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
Přidání nových parametrů
Teď potřebujete přidat sql server a databázi. Nejprve přidáte parametry pro přihlášení a heslo správce a skladovou položku databáze. Jejich hodnoty nastavíte později.
V souboru main.bicep v editoru Visual Studio Code přidejte sqlServerAdministratorLogin
sqlServerAdministratorPassword
pod aktuální deklarace parametrů , a sqlDatabaseSku
parametry. Po dokončení by deklarace parametrů měly vypadat jako v tomto příkladu:
@description('The name of the environment. This must be dev, test, or prod.')
@allowed([
'dev'
'test'
'prod'
])
param environmentName string = 'dev'
@description('The unique name of the solution. This is used to ensure that resource names are unique.')
@minLength(5)
@maxLength(30)
param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'
@description('The number of App Service plan instances.')
@minValue(1)
@maxValue(10)
param appServicePlanInstanceCount int = 1
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
@description('The Azure region into which the resources should be deployed.')
param location string = 'eastus'
@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string
@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorPassword string
@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object
Všimněte si, že pro parametry sqlServerAdministratorPassword
nezadáváte výchozí hodnotysqlServerAdministratorLogin
. Je to špatný postup zabezpečení přidat výchozí hodnoty pro zabezpečené parametry. Také nezadáte výchozí hodnotu pro sqlDatabaseSku
. Do souboru parametrů zadáte hodnotu.
Přidání nových proměnných
V souboru main.bicep v editoru Visual Studio Code přidejte proměnné sqlServerName
pod sqlDatabaseName
existující proměnné. Po dokončení by deklarace proměnných měly vypadat jako v tomto příkladu:
var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'
Přidání prostředků SQL Serveru a databáze
V souboru main.bicep v editoru Visual Studio Code přidejte do dolní části souboru následující kód:
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = { name: sqlServerName location: location properties: { administratorLogin: sqlServerAdministratorLogin administratorLoginPassword: sqlServerAdministratorPassword } } resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = { parent: sqlServer name: sqlDatabaseName location: location sku: { name: sqlDatabaseSku.name tier: sqlDatabaseSku.tier } }
Uložte změny souboru.
Ověření souboru Bicep
Po dokončení všech předchozích změn by soubor Bicep měl vypadat jako v tomto příkladu:
@description('The name of the environment. This must be dev, test, or prod.')
@allowed([
'dev'
'test'
'prod'
])
param environmentName string = 'dev'
@description('The unique name of the solution. This is used to ensure that resource names are unique.')
@minLength(5)
@maxLength(30)
param solutionName string = 'toyhr${uniqueString(resourceGroup().id)}'
@description('The number of App Service plan instances.')
@minValue(1)
@maxValue(10)
param appServicePlanInstanceCount int = 1
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
@description('The Azure region into which the resources should be deployed.')
param location string = 'eastus'
@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string
@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorPassword string
@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object
var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSku.name
tier: appServicePlanSku.tier
capacity: appServicePlanInstanceCount
}
}
resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-01-preview' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: {
name: sqlDatabaseSku.name
tier: sqlDatabaseSku.tier
}
}
Pokud tomu tak není, zkopírujte příklad nebo upravte šablonu tak, aby odpovídala příkladu.
Vytvoření souboru parametrů
Otevřete Visual Studio Code a otevřete složku, ve které se nachází soubor main.bicep . Ve stejné složce vytvořte nový soubor s názvem main.parameters.dev.json.
Do souboru main.parameters.dev.json přidejte následující kód:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "appServicePlanSku": { "value": { "name": "F1", "tier": "Free" } }, "sqlDatabaseSku": { "value": { "name": "Standard", "tier": "Standard" } } } }
Uložte změny souboru.
Nasazení šablony Bicep se souborem parametrů
V terminálu spusťte následující příkaz Azure CLI. Všimněte si, že pro nasazení poskytujete soubor parametrů.
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.dev.json
V terminálu spusťte následující příkaz Azure PowerShellu. Všimněte si, že pro nasazení poskytujete soubor parametrů.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Při spuštění nasazení se zobrazí výzva k zadání hodnot sqlServerAdministratorLogin
a sqlServerAdministratorPassword
parametrů. Nemusíte zadávat solutionName
, protože má výchozí hodnotu zadanou v šabloně. Ostatní hodnoty parametrů nemusíte zadávat, protože jejich hodnoty jsou zadané v souboru parametrů.
Tip
Při zadávání zabezpečených parametrů musí hodnoty, které zvolíte, dodržovat některá pravidla:
sqlServerAdministratorLogin
nesmí být snadno odhadnutelné přihlašovací jméno jakoadmin
neboroot
. Může obsahovat pouze alfanumerické znaky a musí začínat písmenem.sqlServerAdministratorPassword
musí mít aspoň osm znaků a musí obsahovat malá písmena, velká písmena, číslice a symboly. Další informace o složitosti hesel najdete v zásadách hesel SQL Azure.
Pokud hodnoty parametrů nesplňují požadavky, Azure SQL váš server nenasadí.
Nezapomeňte si také poznamenat přihlašovací jméno a heslo, které zadáte. Použijete je v další části.
Dokončení nasazení může trvat několik minut.
Vytvoření trezoru klíčů a tajných kódů
Vaše společnost toy už má trezor klíčů s tajnými kódy, které potřebuje pro svá nasazení. Pro simulaci tohoto scénáře vytvoříte nový trezor klíčů a přidáte nějaké tajné kódy, které chcete použít.
V terminálu spusťte následující příkazy, které vytvoří trezor klíčů a tajné kódy. Před spuštěním těchto příkazů aktualizujte hodnoty proměnných. Názvy trezoru klíčů musí být globálně jedinečný řetězec 3 až 24 znaků, který může obsahovat jenom velká a malá písmena, pomlčky (-
) a číslice. Například demo-kv-1234567abcdefg.
Upozornění
Ujistěte se, že používáte stejné přihlašovací jméno a heslo, které jste použili v předchozím kroku. Pokud ne, další nasazení se úspěšně nedokončí.
keyVaultName
Pro nahrazení YOUR-KEY-VAULT-NAME
názvem vašeho trezoru klíčů. Příkazy read
pro proměnné login
vás password
vyzve k zadání hodnot. Při psaní se hodnoty nezobrazují v terminálu a neukládají se do historie příkazů.
Pokud chcete chránit hodnoty proměnných v relaci terminálu Bash, mějte na paměti následující položky:
- Hodnoty proměnných se neukládají jako zabezpečený řetězec a dají se zobrazit zadáním příkazu jako
$yourVariableName
na příkazovém řádku nebo pomocíecho
příkazu. V tomto cvičení můžete po vytvoření tajných kódů trezoru odebrat existující hodnotu každé proměnné spuštěnímread
příkazů bez zadání hodnoty. - Použije
az keyvault secret set
parametr--value
k vytvoření hodnoty tajného kódu. Výstup příkazu zobrazí vlastnost s názvemvalue
, která obsahuje hodnotu tajného klíče. Celý výstup příkazu můžete potlačit parametrem--output none
, jak je znázorněno v příkladu.
Pokud chcete vytvořit keyVaultName
, login
a password
proměnné, spusťte každý příkaz samostatně. Pak můžete spustit blok příkazů a vytvořit trezor klíčů a tajné kódy.
keyVaultName='YOUR-KEY-VAULT-NAME'
read -s -p "Enter the login name: " login
read -s -p "Enter the password: " password
az keyvault create --name $keyVaultName --location eastus --enabled-for-template-deployment true
az keyvault secret set --vault-name $keyVaultName --name "sqlServerAdministratorLogin" --value $login --output none
az keyvault secret set --vault-name $keyVaultName --name "sqlServerAdministratorPassword" --value $password --output none
Poznámka:
Nastavujete --enabled-for-template-deployment
nastavení trezoru tak, aby Azure mohl během nasazení používat tajné kódy z trezoru. Pokud toto nastavení nenastavíte, nebudou vaše nasazení mít ve výchozím nastavení přístup k tajným kódům ve vašem trezoru.
Každý, kdo nasazení spustí, musí mít také oprávnění pro přístup k trezoru. Vzhledem k tomu, že jste vytvořili trezor klíčů, jste vlastníkem, takže v tomto cvičení nebudete muset oprávnění explicitně udělit. Pro vlastní trezory musíte udělit přístup k tajným kódům.
keyVaultName
Pro nahrazení YOUR-KEY-VAULT-NAME
názvem vašeho trezoru klíčů. Příkazy Read-Host
pro proměnné login
vás password
vyzve k zadání hodnot. Při psaní se hodnoty nezobrazují v terminálu a neukládají se do historie příkazů. Hodnoty se ukládají jako zabezpečený řetězec.
Pokud chcete vytvořit keyVaultName
, login
a password
proměnné, spusťte každý příkaz samostatně. Pak můžete spustit blok příkazů a vytvořit trezor klíčů a tajné kódy.
$keyVaultName = 'YOUR-KEY-VAULT-NAME'
$login = Read-Host "Enter the login name" -AsSecureString
$password = Read-Host "Enter the password" -AsSecureString
New-AzKeyVault -VaultName $keyVaultName -Location eastus -EnabledForTemplateDeployment
Set-AzKeyVaultSecret -VaultName $keyVaultName -Name 'sqlServerAdministratorLogin' -SecretValue $login
Set-AzKeyVaultSecret -VaultName $keyVaultName -Name 'sqlServerAdministratorPassword' -SecretValue $password
Poznámka:
Nastavujete -EnabledForTemplateDeployment
nastavení trezoru tak, aby Azure mohl během nasazení používat tajné kódy z trezoru. Pokud toto nastavení nenastavíte, nebudou vaše nasazení mít ve výchozím nastavení přístup k tajným kódům ve vašem trezoru.
Každý, kdo nasazení spustí, musí mít také oprávnění pro přístup k trezoru. Vzhledem k tomu, že jste vytvořili trezor klíčů, jste vlastníkem, takže v tomto cvičení nebudete muset oprávnění explicitně udělit. Pro vlastní trezory musíte udělit přístup k tajným kódům.
Získání ID prostředku trezoru klíčů
Pokud chcete ve svém nasazení používat tajné kódy trezoru klíčů, potřebujete ID prostředku trezoru. Spuštěním následujícího příkazu načtěte ID prostředku trezoru klíčů:
az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId
ID prostředku bude vypadat přibližně takto:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets
Zkopírujte ID prostředku. Použijete ho v dalším kroku.
Přidání odkazu na trezor klíčů do souboru parametrů
V souboru main.parameters.dev.json připojte následující kód za pravou složenou závorku parametru
sqlDatabaseSku
. Ujistěte se, že nahradíteYOUR-KEY-VAULT-RESOURCE-ID
hodnotou ID prostředku trezoru klíčů, které jste zkopírovali v předchozím kroku. Po dokončení by soubor parametrů měl vypadat jako v tomto příkladu:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "appServicePlanSku": { "value": { "name": "F1", "tier": "Free" } }, "sqlDatabaseSku": { "value": { "name": "Standard", "tier": "Standard" } }, "sqlServerAdministratorLogin": { "reference": { "keyVault": { "id": "YOUR-KEY-VAULT-RESOURCE-ID" }, "secretName": "sqlServerAdministratorLogin" } }, "sqlServerAdministratorPassword": { "reference": { "keyVault": { "id": "YOUR-KEY-VAULT-RESOURCE-ID" }, "secretName": "sqlServerAdministratorPassword" } } } }
Uložte změny souboru.
Nasazení šablony Bicep s odkazy na soubor parametrů a azure Key Vault
V terminálu spusťte následující příkaz Azure CLI. Poskytujete soubor parametrů společně se souborem Bicep.
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.dev.json
V terminálu spusťte následující příkaz Azure PowerShellu. Poskytujete soubor parametrů společně se souborem Bicep.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Při tomto spuštění nasazení se nezobrazí výzva k zadání hodnot sqlServerAdministratorLogin
a sqlServerAdministratorPassword
parametrů. Azure místo toho načte hodnoty z trezoru klíčů.
Nasazení se tentokrát dokončí rychleji, protože prostředky Azure už existují.
Kontrola nasazení
V prohlížeči se vraťte na web Azure Portal. Přejděte do skupiny prostředků. Stále uvidíte jedno úspěšné nasazení, protože nasazení použilo stejný název jako první nasazení.
Vyberte odkaz 1 Úspěch.
Vyberte nasazení s názvem main.
V nabídce vlevo vyberte Vstupy.
Všimněte si, že
appServicePlanSku
sqlDatabaseSku
obě hodnoty parametrů jsou nastavené na hodnoty v souboru parametrů. Všimněte si také, žesqlServerAdministratorLogin
hodnoty parametrů sesqlServerAdministratorPassword
nezobrazují, protože jste na ně použili@secure()
dekorátor.