Harjoitus – Parametritiedoston ja suojattujen parametrien lisääminen

Valmis

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

  1. 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
      }
    }
    
  2. 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

  1. Avaa Visual Studio Code ja avaa kansio, jossa main.bicep-tiedosto sijaitsee. Luo samaan kansioon uusi tiedosto nimeltä main.parameters.dev.json.

  2. 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"
          }
        }
      }
    }
    
  3. 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ä:

  • sqlServerAdministratorLogin ei saa olla helposti arvattava kirjautumisnimi, kuten admin tai root. Se voi sisältää vain aakkosnumeerisia merkkejä, ja sen täytyy alkaa kirjaimella.
  • sqlServerAdministratorPassword on 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 $yourVariableName komentoriville tai echo-komennolla. Tässä harjoituksessa, kun vaultin salaisuudet on luotu, voit poistaa kunkin muuttujan olemassa olevan arvon suorittamalla read -komennot syöttämättä arvoa.
  • az keyvault secret set luo salaisen koodin arvon --value-parametrin avulla. Komennon tuloste näyttää ominaisuuden nimeltä value joka sisältää salaisen koodin arvon. Voit estää komennon koko tuloksen parametrin --output none esimerkin 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

  1. Liitä main.parameters.dev.json-tiedostoon seuraava koodi parametrin sqlDatabaseSku sulkeen jälkeen. Varmista, että korvaat YOUR-KEY-VAULT-RESOURCE-ID edellisessä 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"
          }
        }
      }
    }
    
  2. 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

  1. 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.

  2. Valitse 1 onnistui -linkki.

  3. Valitse käyttöönotto nimeltä main.

  4. Valitse vasemmasta valikosta Tulot.

  5. Huomaa, että sekä appServicePlanSku- että sqlDatabaseSku-parametriarvot on määritetty parametritiedoston arvoihin. Huomaa myös, että sqlServerAdministratorLogin- ja sqlServerAdministratorPassword-parametriarvoja ei näytetä, koska käytit niihin @secure() decorator-elementtiä.

    Näyttökuva tietyn käyttöönoton Azure-portaalin käyttöliittymästä, jossa näkyvät parametriarvot.