Cvičení – přidání souboru parametrů a zabezpečených parametrů

Dokončeno

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 sqlServerAdministratorLoginsqlServerAdministratorPasswordpod 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

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

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

  2. 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"
          }
        }
      }
    }
    
  3. 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 jako admin nebo root. 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ím read 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ázvem value , 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, logina 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, logina 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/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/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ů

  1. V souboru main.parameters.dev.json za pravou složenou závorku parametru sqlDatabaseSku připojte následující kód. Ujistěte se, že nahradíte YOUR-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"
          }
        }
      }
    }
    
  2. 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í

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

  2. Vyberte odkaz 1 Úspěch.

  3. Vyberte nasazení s názvem main.

  4. V nabídce vlevo vyberte Vstupy.

  5. Všimněte si, že appServicePlanSku sqlDatabaseSku obě hodnoty parametrů jsou nastavené na hodnoty v souboru parametrů. Všimněte si také, že sqlServerAdministratorLogin hodnoty parametrů se sqlServerAdministratorPassword nezobrazují, protože jste na ně použili @secure() dekorátor.

    Screenshot of the Azure portal interface for the specific deployment showing the parameter values.