Gyakorlat – Paraméterfájl és biztonságos paraméterek hozzáadása
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
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 } }
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
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.
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" } } } }
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áuladmin
vagyroot
. 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 aecho
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 aread
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ágotvalue
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
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áltYOUR-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" } } } }
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
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.
Válassza az 1 sikeres hivatkozást.
Válassza ki a főként hívott üzembe helyezést.
A bal oldali menüben válassza a Bemenetek lehetőséget.
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 éssqlServerAdministratorPassword
asqlServerAdministratorLogin
paraméterek nem jelennek meg, mert a dekorátort@secure()
alkalmazta rájuk.