Harjoitus – Parametritiedoston ja suojattujen parametrien lisääminen
Note
Tämä harjoitus on valinnainen. Jos haluat suorittaa tämän harjoituksen, sinun on luotava Azure-tilaus ennen aloittamista. Jos sinulla ei ole Azure-tiliä tai et halua luoda sellaista tällä hetkellä, voit lukea ohjeet läpi, jotta ymmärrät esitetyt tiedot.
Tässä harjoituksessa luot parametritiedoston, joka antaa arvot aiemmin luomaasi Bicep-tiedostolle. Samassa parametritiedostossa lisäät myös Azure Key Vault -viittauksia luottamuksellisten tietojen turvalliseen tarjoamiseen.
Prosessin aikana teet seuraavat tehtävät:
- Lisää suojattuja parametreja.
- Luo parametritiedosto.
- Testaa käyttöönottoa varmistaaksesi, että parametritiedosto on kelvollinen.
- Luo avainsäilö ja salaisia salaisuustietoja.
- Päivitä parametritiedosto viittaamaan key vault -salaisiin säilöihin.
- Testaa käyttöönotto uudelleen varmistaaksesi, että parametritiedosto on yhä kelvollinen.
Poista sovelluspalvelupaketin SKU:n oletusarvo
Jotta mallisi toimisi eri ympäristöissä, Azure-sovelluspalvelupaketin SKU-tiedot annetaan parametritiedostossa oletusarvon sijaan.
Päivitä parametri Visual Studio Coden appServicePlanSku poistaaksesi sen oletusarvon.
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
Lisää uusia parametreja
Nyt sinun on lisättävä SQL-palvelin ja tietokanta. Lisäät ensin järjestelmänvalvojan kirjautumisen ja salasanan sekä tietokannan SKU:n parametrit. Määrität niiden arvot myöhemmin.
Lisää Visual Studio Coden sqlServerAdministratorLogin , sqlServerAdministratorPasswordja parametrit sqlDatabaseSku nykyisten parametrimääritysten alle. Kun olet valmis, parametriesilausekkeiden pitäisi näyttää tältä:
@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
Huomaa, että et määritä sqlServerAdministratorLogin- ja sqlServerAdministratorPassword-parametrien oletusarvoja. On huono suojauskäytäntö lisätä oletusarvoja suojatuille parametreille. Et myöskään määritä oletusarvoa sqlDatabaseSku. Määrität arvon parametritiedostossa.
Lisää uusia muuttujia
Lisää Visual Studio Coden sqlServerName muuttujat ja sqlDatabaseName aiemmin luotujen muuttujien alle. Kun olet valmis, muuttujan esittelyjen pitäisi näyttää tältä:
var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'
SQL Serverin ja tietokantaresurssien lisääminen
Lisää Visual Studio Coden main.bicep-tiedostoon seuraava koodi tiedoston alareunaan:
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 } }Tallenna muutokset tiedostoon.
Vahvista Bicep-tiedostosi
Kun olet tehnyt kaikki edellä mainitut muutokset, Bicep-tiedostosi pitäisi näyttää tältä:
@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
}
}
Jos näin ei ole, kopioi esimerkki tai säädä mallisi esimerkkisi mukaiseksi.
Parametritiedoston luominen
Avaa Visual Studio Code ja avaa kansio, jossa main.bicep-tiedosto sijaitsee. Luo samaan kansioon uusi tiedosto nimeltä main.parameters.dev.json.
Lisää main.parameters.dev.json tiedostoon seuraava koodi:
{ "$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" } } } }Tallenna muutokset tiedostoon.
Ota Bicep-malli käyttöön parametritiedoston avulla
Suorita seuraava Azure CLI -komento päätteessä. Huomaa, että annat käyttöönottoon parametritiedoston.
az deployment group create \
--name main \
--template-file main.bicep \
--parameters main.parameters.dev.json
Suorita seuraava Azure PowerShell -komento päätteessä. Huomaa, että annat käyttöönottoon parametritiedoston.
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Sinua kehotetaan antamaan sqlServerAdministratorLogin- ja sqlServerAdministratorPassword-parametrien arvot, kun suoritat käyttöönoton. Sinun ei tarvitse määrittää solutionName, koska sillä on mallissa määritetty oletusarvo. Sinun ei tarvitse määrittää muita parametriarvoja, koska niiden arvot on määritetty parametritiedostossa.
Tip
Kun annat suojatut parametrit, valitsemiesi arvojen on noudatettava joitakin sääntöjä:
-
sqlServerAdministratorLoginei saa olla helposti arvattava kirjautumisnimi, kutenadmintairoot. Se voi sisältää vain aakkosnumeerisia merkkejä, ja sen täytyy alkaa kirjaimella. -
sqlServerAdministratorPasswordon oltava vähintään kahdeksan merkkiä pitkä, ja siinä on oltava pieniä kirjaimia, isoja kirjaimia, numeroita ja symboleita. Lisätietoja salasanan monimutkaisuudesta on SQL Azure -salasanakäytännössä.
Jos parametriarvot eivät täytä vaatimuksia, Azure SQL ei ota palvelintasi käyttöön.
myös varmistaa, että kirjoitat kirjautumistunnuksen ja salasanan muistiin, kun kirjoitat. Käytät niitä seuraavassa osiossa.
Käyttöönoton viimeisteleminen voi kestää muutamia minuutteja.
Avainsäilön ja salaisten koodien luominen
Leluyrityksessäsi on jo avainsäilö, joka sisältää salaisia salaisuusarvoja, joita se tarvitsee käyttöönottoaan varten. Simuloidaksesi tätä skenaariota luot uuden Key Vaultin ja lisäät joitakin salaisia salaisuustietoja käytettäväksi.
Suorita päätteessä seuraavat komennot Key Vaultin ja salaisten koodien luomiseksi. Päivitä muuttujan arvot, ennen kuin suoritat nämä komennot. Avainsäilöjen nimien on oltava yleisesti yksilöivä 3–24 merkin merkkijono, joka voi sisältää vain isoja ja pieniä kirjaimia, tavuviivoja (-) ja numeroita. Esimerkiksi demo-kv-1234567abcdefg.
Caution
Varmista, että käytät samaa kirjautumistunnusta ja salasanaa, joita käytit edellisessä vaiheessa. Jos et tee niin, seuraavan käyttöönoton suorittaminen ei onnistu.
Korvaa keyVaultNameYOUR-KEY-VAULT-NAME Key Vaultin nimellä.
read- ja login-muuttujien password-komennot kehottavat antamaan sinulle arvoja. Kun kirjoitat, arvoja ei näytetä päätteessä, eikä niitä tallenneta komentohistoriaan.
Jos haluat suojata muuttuja-arvot Bash-pääteistunnossa, ota huomioon seuraavat kohteet:
- Muuttujan arvoja ei tallenneta turvalliseksi merkkijonoksi, ja ne voidaan näyttää kirjoittamalla komento kuten
$yourVariableNamekomentoriville taiecho-komennolla. Tässä harjoituksessa, kun vaultin salaisuudet on luotu, voit poistaa kunkin muuttujan olemassa olevan arvon suorittamallaread-komennot syöttämättä arvoa. -
az keyvault secret setluo salaisen koodin arvon--value-parametrin avulla. Komennon tuloste näyttää ominaisuuden nimeltävaluejoka sisältää salaisen koodin arvon. Voit estää komennon koko tuloksen parametrin--output noneesimerkin mukaisesti.
Luo muuttujia keyVaultName, loginja password suorittamalla kukin komento erikseen. Sen jälkeen voit suorittaa komentolohkon avainsäilön ja salaisten koodien luomiseksi.
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
Note
Asetat --enabled-for-template-deployment -asetuksen säilössä, jotta Azure voi käyttää säilösi salaisia salaisuustietoja käyttöönoton aikana. Jos et määritä tätä asetusta, käyttöönotot eivät oletusarvoisesti voi käyttää salaisia salaisuusasetuksia säilössäsi.
Käyttöönoton suorittajilla on myös oltava käyttöoikeus vaultiin. Koska olet luonut Key Vaultin, olet sen omistaja, joten sinun ei tarvitse erikseen myöntää käyttöoikeutta tässä harjoituksessa. Omien vaultien sinun on myönnettävä salaisten koodien käyttöoikeus.
Korvaa keyVaultNameYOUR-KEY-VAULT-NAME Key Vaultin nimellä.
Read-Host- ja login-muuttujien password-komennot kehottavat antamaan sinulle arvoja. Kun kirjoitat, arvoja ei näytetä päätteessä, eikä niitä tallenneta komentohistoriaan. Arvot tallennetaan suojattuna merkkijonona.
Luo muuttujia keyVaultName, loginja password suorittamalla kukin komento erikseen. Sen jälkeen voit suorittaa komentolohkon avainsäilön ja salaisten koodien luomiseksi.
$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
Note
Asetat -EnabledForTemplateDeployment -asetuksen säilössä, jotta Azure voi käyttää säilösi salaisia salaisuustietoja käyttöönoton aikana. Jos et määritä tätä asetusta, käyttöönotot eivät oletusarvoisesti voi käyttää salaisia salaisuusasetuksia säilössäsi.
Käyttöönoton suorittajilla on myös oltava käyttöoikeus vaultiin. Koska olet luonut Key Vaultin, olet sen omistaja, joten sinun ei tarvitse erikseen myöntää käyttöoikeutta tässä harjoituksessa. Omien vaultien sinun on myönnettävä salaisten koodien käyttöoikeus.
Avainsäilön resurssitunnuksen hakeminen
Jotta voit käyttää säilön avainsalaisuuksia käyttöönotossa, tarvitset vaultin resurssitunnuksen. Nouda avainsäilön resurssitunnus suorittamalla seuraava komento:
az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId
Resurssitunnus näyttää suunnilleen tämän esimerkin kaltaiselta:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets
Kopioi resurssitunnus. Käytät sitä seuraavassa vaiheessa.
Key Vault -viitteen lisääminen parametritiedostoon
Liitä main.parameters.dev.json-tiedostoon seuraava koodi parametrin
sqlDatabaseSkusulkeen jälkeen. Varmista, että korvaatYOUR-KEY-VAULT-RESOURCE-IDedellisessä vaiheessa kopioimasi key vault -resurssitunnuksen arvolla. Kun olet valmis, parametritiedoston pitäisi näyttää tältä:{ "$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" } } } }Tallenna muutokset tiedostoon.
Ota Bicep-malli käyttöön parametritiedoston ja Azure Key Vault -viittausten avulla
Suorita seuraava Azure CLI -komento päätteessä. Annat parametritiedoston ja Bicep-tiedoston.
az deployment group create \
--name main \
--template-file main.bicep \
--parameters main.parameters.dev.json
Suorita seuraava Azure PowerShell -komento päätteessä. Annat parametritiedoston ja Bicep-tiedoston.
New-AzResourceGroupDeployment `
-Name main `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Sinua ei kehoteta antamaan sqlServerAdministratorLogin- ja sqlServerAdministratorPassword-parametreja, kun suoritat käyttöönoton tällä kertaa. Azure noutaa sen sijaan arvot key vaultista.
Käyttöönotto saadaan tällä kertaa valmiiksi nopeammin, koska Azure-resurssit ovat jo olemassa.
Käyttöönoton tarkistaminen
Palaa selaimessa takaisin Azure-portaaliin. Siirry resurssiryhmään. Näet edelleen yhden onnistuneen käyttöönoton, koska käyttöönotto käytti samaa nimeä kuin ensimmäinen käyttöönotto.
Valitse 1 onnistui -linkki.
Valitse käyttöönotto nimeltä main.
Valitse vasemmasta valikosta Tulot.
Huomaa, että sekä
appServicePlanSku- ettäsqlDatabaseSku-parametriarvot on määritetty parametritiedoston arvoihin. Huomaa myös, ettäsqlServerAdministratorLogin- jasqlServerAdministratorPassword-parametriarvoja ei näytetä, koska käytit niihin@secure()decorator-elementtiä.