Øvelse – Tilføj en parameterfil og sikre parametre
I denne øvelse skal du oprette en parameterfil, der indeholder værdier for den Bicep-fil, du tidligere har oprettet. I den samme parameterfil skal du også tilføje Azure Key Vault-referencer for sikkert at levere følsomme oplysninger.
Under processen skal du udføre følgende opgaver:
- Tilføj nogle sikre parametre.
- Opret en parameterfil.
- Test installationen for at sikre, at parameterfilen er gyldig.
- Opret en key vault og hemmeligheder.
- Opdater parameterfilen for at referere til hemmelighederne for key vault.
- Test installationen igen for at sikre, at parameterfilen stadig er gyldig.
Fjern standardværdien for App Service-abonnements-SKU'en
For at få din skabelon til at fungere på tværs af miljøer, leveres SKU-oplysningerne for Azure App Service-planen i en parameterfil i stedet for af en standardværdi.
Opdater parameteren appServicePlanSku
i main.bicep i Visual Studio Code for at fjerne standardværdien.
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
Tilføj nye parametre
Nu skal du tilføje en SQL-server og -database. Først skal du tilføje parametre for administratorlogon og adgangskode samt database-SKU'en. Du skal angive deres værdier senere.
I filen main.bicep i Visual Studio Code skal du tilføje parametrene sqlServerAdministratorLogin
, sqlServerAdministratorPassword
og sqlDatabaseSku
under de aktuelle parametererklæringer. Når du er færdig, skal dine parametererklæringer se ud som i dette eksempel:
@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
Bemærk, at du ikke angiver standardværdier for parametrene sqlServerAdministratorLogin
og sqlServerAdministratorPassword
. Det er dårlig sikkerhedspraksis at tilføje standardværdier for sikre parametre. Du angiver heller ikke en standardværdi for sqlDatabaseSku
. Du skal angive en værdi i en parameterfil.
Tilføj nye variabler
I filen main.bicep i Visual Studio Code skal du tilføje variablerne sqlServerName
og sqlDatabaseName
under de eksisterende variabler. Når du er færdig, bør dine variabelerklæringer se ud som i dette eksempel:
var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'
Tilføj SQL-server- og databaseressourcer
I filen main.bicep i Visual Studio Code skal du tilføje følgende kode nederst i filen:
resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = { name: sqlServerName location: location properties: { administratorLogin: sqlServerAdministratorLogin administratorLoginPassword: sqlServerAdministratorPassword } } resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = { parent: sqlServer name: sqlDatabaseName location: location sku: { name: sqlDatabaseSku.name tier: sqlDatabaseSku.tier } }
Gem ændringerne i filen.
Bekræft din Bicep-fil
Når du har fuldført alle de foregående ændringer, bør din Bicep-fil se ud som i dette eksempel:
@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@2024-04-01' = {
name: appServicePlanName
location: location
sku: {
name: appServicePlanSku.name
tier: appServicePlanSku.tier
capacity: appServicePlanInstanceCount
}
}
resource appServiceApp 'Microsoft.Web/sites@2024-04-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
}
}
resource sqlServer 'Microsoft.Sql/servers@2024-05-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: {
name: sqlDatabaseSku.name
tier: sqlDatabaseSku.tier
}
}
Hvis den ikke gør det, skal du enten kopiere eksemplet eller justere skabelonen, så den passer til eksemplet.
Opret en parameterfil
Åbn Visual Studio Code, og åbn den mappe, hvor filen main.bicep er placeret. Opret en ny fil med navnet main.parameters.dev.jsoni den samme mappe.
Tilføj følgende kode i filen main.parameters.dev.json:
{ "$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" } } } }
Gem ændringerne i filen.
Udrul Bicep-skabelonen med parameterfilen
Kør følgende Azure CLI-kommando i terminalen. Bemærk, at du angiver en parameterfil til installationen.
az deployment group create \
--name main \
--template-file main.bicep \
--parameters main.parameters.dev.json
Kør følgende Azure PowerShell-kommando i terminalen. Bemærk, at du angiver en parameterfil til installationen.
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Du bliver bedt om at angive værdierne for sqlServerAdministratorLogin
og sqlServerAdministratorPassword
parametre, når du udfører installationen. Du behøver ikke at angive solutionName
, fordi der er angivet en standardværdi i skabelonen. Du behøver ikke at angive de andre parameterværdier, fordi deres værdier er angivet i parameterfilen.
Drikkepenge
Når du angiver de sikre parametre, skal de værdier, du vælger, følge nogle regler:
-
sqlServerAdministratorLogin
må ikke være et let gætbart logonnavn, f.eks.admin
ellerroot
. Den kan kun indeholde alfanumeriske tegn og skal starte med et bogstav. -
sqlServerAdministratorPassword
skal være mindst otte tegn lange og indeholde små bogstaver, store bogstaver, tal og symboler. Du kan få flere oplysninger om kompleksiteten af adgangskoder i SQL Azure-adgangskodepolitik.
Hvis parameterværdierne ikke opfylder kravene, udruller Azure SQL ikke din server.
også sørge for, at du noterer dig det logon og den adgangskode, du angiver. Du skal bruge dem i næste afsnit.
Installationen kan tage et par minutter at fuldføre.
Opret en key vault og hemmeligheder
Dit legetøjsfirma har allerede en key vault med de hemmeligheder, det har brug for til sine installationer. Hvis du vil simulere dette scenarie, skal du oprette en ny key vault og tilføje nogle hemmeligheder, der skal bruges.
Udfør følgende kommandoer i terminalen for at oprette key vault og hemmeligheder. Opdater variabelværdierne, før du udfører disse kommandoer. Key vault-navne skal være en globalt entydig streng på 3 til 24 tegn, der kun må indeholde store og små bogstaver, bindestreger (-
) og tal.
f.eks. demo-kv-1234567abcdefg.
Forsigtighed
Sørg for at bruge det samme logon og den samme adgangskode, som du brugte i det forrige trin. Hvis du ikke gør det, fuldføres den næste installation ikke.
For keyVaultName
erstatte YOUR-KEY-VAULT-NAME
med et navn til din key vault. De read
kommandoer for login
og password
variabler beder dig om værdier. Mens du skriver, vises værdierne ikke i terminalen og gemmes ikke i kommandooversigten.
Hvis du vil beskytte variabelværdierne i din Bash-terminalsession, skal du være opmærksom på følgende elementer:
- Variabelværdier gemmes ikke som en sikker streng og kan vises ved at angive en kommando som
$yourVariableName
på kommandolinjen eller med kommandoenecho
. I denne øvelse kan du fjerne hver variabels eksisterende værdi ved at køre kommandoerneread
uden at angive en værdi, når dine vault-hemmeligheder er oprettet. -
az keyvault secret set
bruger parameteren--value
til at oprette en hemmeligheds værdi. Kommandoens output viser en egenskab med navnetvalue
, der indeholder hemmelighedens værdi. Du kan undertrykke hele kommandoens output med parameteren--output none
som vist i eksemplet.
Hvis du vil oprette variablerne keyVaultName
, login
og password
, skal du køre hver kommando separat. Derefter kan du køre kommandoblokken for at oprette key vault og hemmeligheder.
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
Seddel
Du angiver indstillingen --enabled-for-template-deployment
i vaulten, så Azure kan bruge hemmelighederne fra din vault under udrulninger. Hvis du ikke angiver denne indstilling, kan dine installationer som standard ikke få adgang til hemmeligheder i din vault.
Den person, der udfører udrulningen, skal også have tilladelse til at få adgang til vaulten. Da du har oprettet key vault, er du ejer, så du behøver ikke udtrykkeligt at give tilladelsen i denne øvelse. For dine egne vaults skal du give adgang til hemmelighederne.
For keyVaultName
erstatte YOUR-KEY-VAULT-NAME
med et navn til din key vault. De Read-Host
kommandoer for login
og password
variabler beder dig om værdier. Mens du skriver, vises værdierne ikke i terminalen og gemmes ikke i kommandooversigten. Værdierne gemmes som en sikker streng.
Hvis du vil oprette variablerne keyVaultName
, login
og password
, skal du køre hver kommando separat. Derefter kan du køre kommandoblokken for at oprette key vault og hemmeligheder.
$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
Seddel
Du angiver indstillingen -EnabledForTemplateDeployment
i vaulten, så Azure kan bruge hemmelighederne fra din vault under udrulninger. Hvis du ikke angiver denne indstilling, kan dine installationer som standard ikke få adgang til hemmeligheder i din vault.
Den person, der udfører udrulningen, skal også have tilladelse til at få adgang til vaulten. Da du har oprettet key vault, er du ejer, så du behøver ikke udtrykkeligt at give tilladelsen i denne øvelse. For dine egne vaults skal du give adgang til hemmelighederne.
Hent ressource-id'et for key vault
Hvis du vil bruge hemmelighederne for key vault i din installation, skal du bruge ressource-id'et for vaulten. Kør følgende kommando for at hente ressource-id'et for key vault:
az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId
Ressource-id'et ser nogenlunde sådan ud i dette eksempel:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets
Kopiér ressource-id'et. Du skal bruge den i næste trin.
Føj en key vault-reference til en parameterfil
I filen main.parameters.dev.json skal du tilføje følgende kode efter den
sqlDatabaseSku
parameters slutparentes. Sørg for, at du erstatterYOUR-KEY-VAULT-RESOURCE-ID
med værdien af det key vault-ressource-id, du kopierede i det forrige trin. Når du er færdig, skal parameterfilen se ud som i dette eksempel:{ "$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" } } } }
Gem ændringerne i filen.
Udrul Bicep-skabelonen med parameterfil og Referencer til Azure Key Vault
Kør følgende Azure CLI-kommando i terminalen. Du angiver en parameterfil sammen med en Bicep-fil.
az deployment group create \
--name main \
--template-file main.bicep \
--parameters main.parameters.dev.json
Kør følgende Azure PowerShell-kommando i terminalen. Du angiver en parameterfil sammen med en Bicep-fil.
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Du bliver ikke bedt om at angive værdierne for sqlServerAdministratorLogin
og sqlServerAdministratorPassword
parametre, når du udfører installationen denne gang. Azure henter værdierne fra din key vault i stedet.
Udrulningen fuldføres hurtigere denne gang, fordi Azure-ressourcerne allerede findes.
Kontrollér din installation
Gå tilbage til Azure Portal i din browser. Gå til din ressourcegruppe. Du får stadig vist én vellykket installation, fordi installationen brugte det samme navn som den første installation.
Vælg linket 1 Lykkedes.
Vælg den installation, der kaldes hoved.
Vælg Inputi menuen til venstre.
Bemærk, at parameterværdierne
appServicePlanSku
ogsqlDatabaseSku
begge er angivet til værdierne i parameterfilen. Bemærk også, at parameterværdiernesqlServerAdministratorLogin
ogsqlServerAdministratorPassword
ikke vises, fordi du har anvendt@secure()
dekoratøren på dem.