Ćwiczenie — dodawanie pliku parametrów i bezpiecznych parametrów
W tym ćwiczeniu utworzysz plik parametrów zawierający wartości utworzonego wcześniej pliku Bicep. W tym samym pliku parametrów dodasz również odwołania do usługi Azure Key Vault, aby bezpiecznie udostępniać poufne informacje.
Podczas tego procesu wykonasz następujące zadania:
- Dodaj kilka bezpiecznych parametrów.
- Utwórz plik parametrów.
- Przetestuj wdrożenie, aby upewnić się, że plik parametrów jest prawidłowy.
- Utwórz magazyn kluczy i wpisy tajne.
- Zaktualizuj plik parametrów, aby odwoływać się do wpisów tajnych magazynu kluczy.
- Ponownie przetestuj wdrożenie, aby upewnić się, że plik parametrów jest nadal prawidłowy.
Usuwanie wartości domyślnej jednostki SKU planu usługi App Service
Aby szablon działał w środowiskach, szczegóły jednostki SKU planu usługi aplikacja systemu Azure zostaną podane w pliku parametrów, a nie wartością domyślną.
W pliku main.bicep w programie Visual Studio Code zaktualizuj appServicePlanSku
parametr , aby usunąć jego wartość domyślną.
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
Dodawanie nowych parametrów
Teraz musisz dodać serwer SQL i bazę danych. Najpierw dodasz parametry identyfikatora logowania i hasła administratora oraz jednostkę SKU bazy danych. Później ustawisz ich wartości.
W pliku main.bicep w programie Visual Studio Code dodaj sqlServerAdministratorLogin
parametry , sqlServerAdministratorPassword
i sqlDatabaseSku
poniżej bieżących deklaracji parametrów. Po zakończeniu deklaracje parametrów powinny wyglądać następująco:
@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
Zwróć uwagę, że nie określasz wartości domyślnych parametrów sqlServerAdministratorLogin
i sqlServerAdministratorPassword
. Dobrym rozwiązaniem jest dodanie wartości domyślnych dla bezpiecznych parametrów. Ponadto nie określasz wartości domyślnej dla elementu sqlDatabaseSku
. Określisz wartość w pliku parametrów.
Dodawanie nowych zmiennych
W pliku main.bicep w programie Visual Studio Code dodaj sqlServerName
zmienne i sqlDatabaseName
poniżej istniejących zmiennych. Po zakończeniu deklaracje zmiennych powinny wyglądać następująco:
var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'
Dodawanie zasobów serwera SQL i bazy danych
W pliku main.bicep w programie Visual Studio Code dodaj następujący kod w dolnej części pliku:
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 } }
Zapisz zmiany w pliku.
Weryfikowanie pliku Bicep
Po zakończeniu wszystkich powyższych zmian plik Bicep powinien wyglądać następująco:
@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
}
}
Jeśli tak nie jest, skopiuj przykład lub dostosuj szablon tak, aby był zgodny z przykładem.
Tworzenie pliku parametrów
Otwórz program Visual Studio Code i otwórz folder, w którym znajduje się plik main.bicep . W tym samym folderze utwórz nowy plik o nazwie main.parameters.dev.json.
W pliku main.parameters.dev.json dodaj następujący kod:
{ "$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" } } } }
Zapisz zmiany w pliku.
Wdrażanie szablonu Bicep przy użyciu pliku parametrów
Uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure w terminalu. Zwróć uwagę, że udostępniasz plik parametrów dla wdrożenia.
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.dev.json
Uruchom następujące polecenie programu Azure PowerShell w terminalu. Zwróć uwagę, że udostępniasz plik parametrów dla wdrożenia.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Podczas wykonywania wdrożenia zostanie wyświetlony monit o wprowadzenie wartości parametrów sqlServerAdministratorLogin
i .sqlServerAdministratorPassword
Nie musisz określać solutionName
, ponieważ ma ona wartość domyślną określoną w szablonie. Nie musisz określać innych wartości parametrów, ponieważ ich wartości są określone w pliku parametrów.
Napiwek
Po wprowadzeniu bezpiecznych parametrów wybrane wartości muszą być zgodne z kilkoma regułami:
sqlServerAdministratorLogin
nie może być łatwą do odgadnięcia nazwą logowania, taką jakadmin
lubroot
. Może zawierać tylko znaki alfanumeryczne i musi zaczynać się literą.sqlServerAdministratorPassword
musi zawierać co najmniej osiem znaków i zawierać małe litery, wielkie litery, cyfry i symbole. Aby uzyskać więcej informacji na temat złożoności hasła, zobacz zasady Usługi SQL Azure haseł.
Jeśli wartości parametrów nie spełniają wymagań, usługa Azure SQL nie wdroży serwera.
Upewnij się również, że zanotujesz wprowadzone dane logowania i hasło. Będą one używane w następnej sekcji.
Ukończenie wdrożenia może potrwać kilka minut.
Tworzenie magazynu kluczy i wpisów tajnych
Twoja firma z toy ma już magazyn kluczy z wpisami tajnymi, których potrzebuje do swoich wdrożeń. Aby zasymulować ten scenariusz, utworzysz nowy magazyn kluczy i dodasz niektóre wpisy tajne do użycia.
W terminalu wykonaj następujące polecenia, aby utworzyć magazyn kluczy i wpisy tajne. Zaktualizuj wartości zmiennych przed wykonaniem tych poleceń. Nazwy magazynów kluczy muszą być globalnie unikatowym ciągiem od 3 do 24 znaków, które mogą zawierać tylko wielkie i małe litery, łączniki (-
) i cyfry. Na przykład demo-kv-1234567abcdefg.
Uwaga
Upewnij się, że używasz tego samego identyfikatora logowania i hasła użytego w poprzednim kroku. Jeśli tego nie zrobisz, następne wdrożenie nie zakończy się pomyślnie.
keyVaultName
Zastąp YOUR-KEY-VAULT-NAME
ciąg nazwą magazynu kluczy. Polecenia read
dla login
zmiennych i password
spowodują wyświetlenie monitu o podanie wartości. Podczas wpisywania wartości nie są wyświetlane w terminalu i nie są zapisywane w historii poleceń.
Aby chronić wartości zmiennych w sesji terminalu powłoki Bash, należy pamiętać o następujących elementach:
- Wartości zmiennych nie są przechowywane jako bezpieczny ciąg i mogą być wyświetlane przez wprowadzenie polecenia, takiego jak
$yourVariableName
w wierszu polecenia lub zaecho
pomocą polecenia. W tym ćwiczeniu po utworzeniu wpisów tajnych magazynu można usunąć istniejącą wartość każdej zmiennej, uruchamiającread
polecenia bez wprowadzania wartości. - Parametr
az keyvault secret set
używa parametru--value
do utworzenia wartości wpisu tajnego. Dane wyjściowe polecenia wyświetla właściwość o nazwievalue
, która zawiera wartość wpisu tajnego. Całe dane wyjściowe polecenia można pominąć za pomocą parametru--output none
, jak pokazano w przykładzie.
Aby utworzyć keyVaultName
zmienne , login
i password
, uruchom każde polecenie oddzielnie. Następnie możesz uruchomić blok poleceń, aby utworzyć magazyn kluczy i wpisy tajne.
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
Uwaga
Ustawiasz --enabled-for-template-deployment
ustawienie w magazynie, aby platforma Azure mogła używać wpisów tajnych z magazynu podczas wdrożeń. Jeśli to ustawienie nie zostanie ustawione, domyślnie wdrożenia nie będą mogły uzyskiwać dostępu do wpisów tajnych w magazynie.
Ponadto każdy, kto wykonuje wdrożenie, musi mieć również uprawnienia dostępu do magazynu. Ponieważ utworzono magazyn kluczy, jesteś właścicielem, więc nie musisz jawnie udzielać uprawnień w tym ćwiczeniu. W przypadku własnych magazynów musisz udzielić dostępu do wpisów tajnych.
keyVaultName
Zastąp YOUR-KEY-VAULT-NAME
ciąg nazwą magazynu kluczy. Polecenia Read-Host
dla login
zmiennych i password
spowodują wyświetlenie monitu o podanie wartości. Podczas wpisywania wartości nie są wyświetlane w terminalu i nie są zapisywane w historii poleceń. Wartości są przechowywane jako bezpieczny ciąg.
Aby utworzyć keyVaultName
zmienne , login
i password
, uruchom każde polecenie oddzielnie. Następnie możesz uruchomić blok poleceń, aby utworzyć magazyn kluczy i wpisy tajne.
$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
Uwaga
Ustawiasz -EnabledForTemplateDeployment
ustawienie w magazynie, aby platforma Azure mogła używać wpisów tajnych z magazynu podczas wdrożeń. Jeśli to ustawienie nie zostanie ustawione, domyślnie wdrożenia nie będą mogły uzyskiwać dostępu do wpisów tajnych w magazynie.
Ponadto każdy, kto wykonuje wdrożenie, musi mieć również uprawnienia dostępu do magazynu. Ponieważ utworzono magazyn kluczy, jesteś właścicielem, więc nie musisz jawnie udzielać uprawnień w tym ćwiczeniu. W przypadku własnych magazynów musisz udzielić dostępu do wpisów tajnych.
Uzyskiwanie identyfikatora zasobu magazynu kluczy
Aby używać wpisów tajnych magazynu kluczy we wdrożeniu, potrzebny jest identyfikator zasobu magazynu. Uruchom następujące polecenie, aby pobrać identyfikator zasobu magazynu kluczy:
az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId
Identyfikator zasobu będzie wyglądać mniej więcej tak:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets
Skopiuj identyfikator zasobu. Będzie on używany w następnym kroku.
Dodawanie odwołania do magazynu kluczy do pliku parametrów
W pliku main.parameters.dev.json dołącz następujący kod po zamykającym nawiasie klamrowym parametru
sqlDatabaseSku
. Upewnij się, że zastąpiszYOUR-KEY-VAULT-RESOURCE-ID
wartość identyfikatora zasobu magazynu kluczy skopiowaną w poprzednim kroku. Po zakończeniu plik parametrów powinien wyglądać następująco:{ "$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" } } } }
Zapisz zmiany w pliku.
Wdrażanie szablonu Bicep z plikami parametrów i odwołaniami do usługi Azure Key Vault
Uruchom następujące polecenie interfejsu wiersza polecenia platformy Azure w terminalu. Udostępniasz plik parametrów wraz z plikiem Bicep.
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.dev.json
Uruchom następujące polecenie programu Azure PowerShell w terminalu. Udostępniasz plik parametrów wraz z plikiem Bicep.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Nie zostanie wyświetlony monit o wprowadzenie wartości parametrów sqlServerAdministratorLogin
i podczas sqlServerAdministratorPassword
wykonywania wdrożenia tym razem. Platforma Azure pobiera zamiast tego wartości z magazynu kluczy.
Wdrożenie zostanie ukończone szybciej tym razem, ponieważ zasoby platformy Azure już istnieją.
Sprawdzanie wdrożenia
W przeglądarce wróć do witryny Azure Portal. Przejdź do grupy zasobów. Nadal zobaczysz jedno pomyślne wdrożenie, ponieważ wdrożenie używało tej samej nazwy co pierwsze wdrożenie.
Wybierz link 1 Powodzenie.
Wybierz wdrożenie o nazwie main.
W menu po lewej stronie wybierz pozycję Dane wejściowe.
Zwróć uwagę, że wartości parametrów
appServicePlanSku
isqlDatabaseSku
zostały ustawione na wartości w pliku parametrów. Zwróć również uwagę, że wartości parametrówsqlServerAdministratorLogin
isqlServerAdministratorPassword
nie są wyświetlane, ponieważ do nich zastosowano@secure()
dekorator.