Øvelse – Tilføj en parameterfil og sikre parametre

Fuldført

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, sqlServerAdministratorPasswordog 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

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

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

  2. 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"
          }
        }
      }
    }
    
  3. 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 eller root. 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 kommandoen echo. I denne øvelse kan du fjerne hver variabels eksisterende værdi ved at køre kommandoerne read 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 navnet value, 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, loginog 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, loginog 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

  1. I filen main.parameters.dev.json skal du tilføje følgende kode efter den sqlDatabaseSku parameters slutparentes. Sørg for, at du erstatter YOUR-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"
          }
        }
      }
    }
    
  2. 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

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

  2. Vælg linket 1 Lykkedes.

  3. Vælg den installation, der kaldes hoved.

  4. Vælg Inputi menuen til venstre.

  5. Bemærk, at parameterværdierne appServicePlanSku og sqlDatabaseSku begge er angivet til værdierne i parameterfilen. Bemærk også, at parameterværdierne sqlServerAdministratorLogin og sqlServerAdministratorPassword ikke vises, fordi du har anvendt @secure() dekoratøren på dem.

    Skærmbillede af Azure Portal-grænsefladen for den specifikke installation, der viser parameterværdierne.