Gyakorlat – Paraméterfájl és biztonságos paraméterek hozzáadása

Befejeződött

Ebben a gyakorlatban létrehoz egy paraméterfájlt, amely a korábban létrehozott Bicep-fájl értékeit tartalmazza. Ugyanabban a paraméterfájlban az Azure Key Vault-hivatkozásokat is hozzáadja a bizalmas információk biztonságos biztosításához.

A folyamat során a következő feladatokat fogja elvégezni:

  • Adjon hozzá néhány biztonságos paramétert.
  • Hozzon létre egy paraméterfájlt.
  • Tesztelje az üzembe helyezést annak ellenőrzéséhez, hogy a paraméterfájl érvényes-e.
  • Hozzon létre egy kulcstartót és titkos kulcsokat.
  • Frissítse a paraméterfájlt, hogy a kulcstartó titkos kulcsára hivatkozzon.
  • Tesztelje újra az üzembe helyezést, hogy a paraméterfájl továbbra is érvényes legyen.

Az App Service-csomag termékváltozatának alapértelmezett értékének eltávolítása

Ahhoz, hogy a sablon több környezetben is működjön, a Azure-alkalmazás szolgáltatáscsomag termékváltozatának részletei nem alapértelmezett érték, hanem paraméterfájlban lesznek megadva.

A Visual Studio Code main.bicep fájljában frissítse a paramétert az appServicePlanSku alapértelmezett érték eltávolításához.

@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object

Új paraméterek hozzáadása

Most hozzá kell adnia egy SQL Servert és egy adatbázist. Először hozzáadja a rendszergazdai bejelentkezési és jelszó- és adatbázis-termékváltozat paramétereit. Az értékek később lesznek beállítva.

A Visual Studio Code main.bicep fájljában adja hozzá a sqlServerAdministratorLogin, sqlServerAdministratorPasswordés sqlDatabaseSku paramétereket az aktuális paraméterdeklarációk alá. Ha végzett, a paraméterdeklarációknak az alábbi példához hasonlóan kell kinéznie:

@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

Figyelje meg, hogy nem adja meg a paraméterek és sqlServerAdministratorPassword a sqlServerAdministratorLogin paraméterek alapértelmezett értékeit. Helytelen biztonsági gyakorlat a biztonságos paraméterek alapértelmezett értékeinek hozzáadása. Emellett nem ad meg alapértelmezett értéket a következőhöz sqlDatabaseSku: . Egy paraméterfájlban meg kell adnia egy értéket.

Új változók hozzáadása

A Visual Studio Code main.bicep fájljában adja hozzá a sqlServerName meglévő változók alá a változókat és sqlDatabaseName a változókat. Ha végzett, a változódeklarációknak az alábbi példához hasonlóan kell kinéznie:

var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'

SQL Server- és adatbázis-erőforrások hozzáadása

  1. A Visual Studio Code main.bicep fájljában adja hozzá a következő kódot a fájl aljára:

    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. Mentse a fájl módosításait.

A Bicep-fájl ellenőrzése

Miután elvégezte az összes fenti módosítást, a Bicep-fájlnak az alábbi példához hasonlóan kell kinéznie:

@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
  }
}

Ha nem, másolja ki a példát, vagy módosítsa a sablont a példának megfelelően.

Paraméterfájl létrehozása

  1. Nyissa meg a Visual Studio Code-ot, és nyissa meg azt a mappát, amelyben a main.bicep fájl található. Ugyanebben a mappában hozzon létre egy main.parameters.dev.json nevű új fájlt.

  2. A main.parameters.dev.json fájlban adja hozzá a következő kódot:

    {
      "$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. Mentse a fájl módosításait.

A Bicep-sablon üzembe helyezése a paraméterfájllal

Futtassa a következő Azure CLI-parancsot a terminálon. Figyelje meg, hogy egy paraméterfájlt ad meg az üzembe helyezéshez.

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.dev.json

Futtassa a következő Azure PowerShell-parancsot a terminálon. Figyelje meg, hogy egy paraméterfájlt ad meg az üzembe helyezéshez.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.dev.json

Az üzembe helyezés végrehajtásakor a rendszer kéri, hogy adja meg az értékek és sqlServerAdministratorPassword paraméterek értékétsqlServerAdministratorLogin. Nem kell megadnia solutionName , mert a sablonban alapértelmezett érték van megadva. Nem kell megadnia a többi paraméterértéket, mert az értékek a paraméterfájlban vannak megadva.

Tipp.

A biztonságos paraméterek megadásakor a választott értékeknek bizonyos szabályokat kell követnie:

  • sqlServerAdministratorLogin nem lehet könnyen kitalálható bejelentkezési név, például admin vagy root. Csak alfanumerikus karaktereket tartalmazhat, és betűvel kell kezdődnie.
  • sqlServerAdministratorPassword Legalább nyolc karakter hosszúnak kell lennie, és kisbetűket, nagybetűket, számokat és szimbólumokat kell tartalmaznia. A jelszó összetettségéről további információt az SQL Azure jelszószabályzatában talál.

Ha a paraméterértékek nem felelnek meg a követelményeknek, az Azure SQL nem fogja üzembe helyezni a kiszolgálót.

Ügyeljen arra is, hogy jegyezze fel a beírt bejelentkezést és jelszót. Ezeket a következő szakaszban fogja használni.

Az üzembe helyezés befejezése eltarthat néhány percig.

Kulcstartó és titkos kulcsok létrehozása

A toy cég már rendelkezik egy kulcstartóval az üzembe helyezéshez szükséges titkos kódokkal. A forgatókönyv szimulálásához létrehoz egy új kulcstartót, és hozzáad néhány használandó titkos kulcsot.

A terminálban hajtsa végre a következő parancsokat a kulcstartó és a titkos kulcsok létrehozásához. A parancsok végrehajtása előtt frissítse a változóértékeket. A kulcstartó nevének 3–24 karakterből álló, globálisan egyedi sztringnek kell lennie, amely csak nagybetűket és kisbetűket, kötőjeleket (-) és számokat tartalmazhat. Például demo-kv-1234567abcdefg.

Figyelem

Győződjön meg arról, hogy ugyanazt a bejelentkezési és jelszót használja, amelyet az előző lépésben használt. Ha nem, a következő üzembe helyezés nem fejeződik be sikeresen.

keyVaultName A kulcstartó nevének lecseréléseYOUR-KEY-VAULT-NAME. A read parancsok és password a login változók értékek megadását kérik. A beírás során az értékek nem jelennek meg a terminálban, és nem lesznek mentve a parancselőzményekbe.

A Bash-terminálmunkamenet változóértékeinek védelméhez vegye figyelembe a következő elemeket:

  • A változó értékek nem biztonságos sztringként lesznek tárolva, és megjeleníthetők úgy, hogy beírnak egy parancsot, például $yourVariableName a parancssorba vagy a echo parancsba. Ebben a gyakorlatban a tároló titkos kulcsainak létrehozása után eltávolíthatja az egyes változók meglévő értékét úgy, hogy a read parancsokat egy érték beírása nélkül futtatja.
  • A az keyvault secret set paraméter egy --value titkos kód értékének létrehozására használja. A parancs kimenete egy olyan tulajdonságot value jelenít meg, amely tartalmazza a titkos kód értékét. A parancs teljes kimenetét letilthatja a példában látható paraméterrel --output none .

A keyVaultName, loginés password változók létrehozásához futtassa az egyes parancsokat külön-külön. Ezután futtathatja a parancsblokkot a kulcstartó és a titkos kulcsok létrehozásához.

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

Megjegyzés:

Beállítja a --enabled-for-template-deployment tároló beállításait, hogy az Azure az üzembe helyezés során használhassa a tároló titkos kulcsait. Ha nem állítja be ezt a beállítást, akkor alapértelmezés szerint az üzemelő példányok nem férnek hozzá a tároló titkos kulcsaihoz.

Továbbá, aki végrehajtja az üzembe helyezést, engedéllyel is kell rendelkeznie a tároló eléréséhez. Mivel ön hozta létre a kulcstartót, Ön a tulajdonos, ezért nem kell explicit módon megadnia az engedélyt ebben a gyakorlatban. A saját tárolókhoz hozzáférést kell adnia a titkos kódokhoz.

keyVaultName A kulcstartó nevének lecseréléseYOUR-KEY-VAULT-NAME. A Read-Host parancsok és password a login változók értékek megadását kérik. A beírás során az értékek nem jelennek meg a terminálban, és nem lesznek mentve a parancselőzményekbe. Az értékek biztonságos sztringként vannak tárolva.

A keyVaultName, loginés password változók létrehozásához futtassa az egyes parancsokat külön-külön. Ezután futtathatja a parancsblokkot a kulcstartó és a titkos kulcsok létrehozásához.

$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

Megjegyzés:

Beállítja a -EnabledForTemplateDeployment tároló beállításait, hogy az Azure az üzembe helyezés során használhassa a tároló titkos kulcsait. Ha nem állítja be ezt a beállítást, akkor alapértelmezés szerint az üzemelő példányok nem férnek hozzá a tároló titkos kulcsaihoz.

Továbbá, aki végrehajtja az üzembe helyezést, engedéllyel is kell rendelkeznie a tároló eléréséhez. Mivel ön hozta létre a kulcstartót, Ön a tulajdonos, ezért nem kell explicit módon megadnia az engedélyt ebben a gyakorlatban. A saját tárolókhoz hozzáférést kell adnia a titkos kódokhoz.

A kulcstartó erőforrás-azonosítójának lekérése

A kulcstartó titkos kulcsainak az üzembe helyezésben való használatához szüksége van a tároló erőforrás-azonosítójára. Futtassa a következő parancsot a kulcstartó erőforrás-azonosítójának lekéréséhez:

az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId

Az erőforrás-azonosító a következő példához hasonlóan fog kinézni:

/subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets

Másolja ki az erőforrás-azonosítót. A következő lépésben használni fogja.

Kulcstartó-hivatkozás hozzáadása paraméterfájlhoz

  1. A main.parameters.dev.json fájlban fűzze hozzá a következő kódot a sqlDatabaseSku paraméter záró zárójele után. Győződjön meg arról, hogy az előző lépésben másolt kulcstartó erőforrás-azonosítójának értékére vált YOUR-KEY-VAULT-RESOURCE-ID . Miután végzett, a paraméterfájlnak a következő példához hasonlóan kell kinéznie:

    {
      "$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. Mentse a fájl módosításait.

A Bicep-sablon üzembe helyezése paraméterfájllal és Azure Key Vault-hivatkozásokkal

Futtassa a következő Azure CLI-parancsot a terminálon. Egy paraméterfájlt és egy Bicep-fájlt ad meg.

az deployment group create \
  --template-file main.bicep \
  --parameters main.parameters.dev.json

Futtassa a következő Azure PowerShell-parancsot a terminálon. Egy paraméterfájlt és egy Bicep-fájlt ad meg.

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -TemplateParameterFile main.parameters.dev.json

Az üzembe helyezés végrehajtásakor a rendszer nem kéri az értékek sqlServerAdministratorLogin és sqlServerAdministratorPassword paraméterek megadását. Az Azure ehelyett lekéri az értékeket a kulcstartóból.

Az üzembe helyezés ezúttal gyorsabban befejeződik, mert az Azure-erőforrások már léteznek.

Az üzemelő példány ellenőrzése

  1. A böngészőben lépjen vissza az Azure Portalra. Lépjen az erőforráscsoportra. Továbbra is egy sikeres üzembe helyezést fog látni, mert az üzembe helyezés ugyanazt a nevet használta, mint az első üzembe helyezés.

  2. Válassza az 1 sikeres hivatkozást.

  3. Válassza ki a főként hívott üzembe helyezést.

  4. A bal oldali menüben válassza a Bemenetek lehetőséget.

  5. Figyelje meg, hogy a appServicePlanSku sqlDatabaseSku paraméterfájlban a paraméterértékek és a paraméterértékek is be vannak állítva. Figyelje meg azt is, hogy a paraméterértékek és sqlServerAdministratorPassword a sqlServerAdministratorLogin paraméterek nem jelennek meg, mert a dekorátort @secure() alkalmazta rájuk.

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