Exercice – ajouter un fichier de paramètres et des paramètres sécurisés
Dans cet exercice, vous allez créer un fichier de paramètres qui fournit des valeurs pour le fichier Bicep que vous avez créé précédemment. Dans le même fichier de paramètres, vous ajouterez également des références Azure Key Vault pour fournir des informations sensibles en toute sécurité.
Au cours du processus, vous allez effectuer les tâches suivantes :
- Ajoutez des paramètres sécurisés.
- Créez un fichier de paramètres.
- Tester le déploiement pour vous assurer que le fichier de paramètres est valide.
- Créez un coffre de clés et des secrets.
- Mettez à jour le fichier de paramètres pour faire référence aux secrets du coffre de clés.
- Testez à nouveau le déploiement pour vous assurer que le fichier de paramètres est toujours valide.
Supprimer la valeur par défaut de la référence SKU du plan App Service
Pour que votre modèle fonctionne dans différents environnements, les détails de la référence SKU du plan Azure App Service sont fournis dans un fichier de paramètres plutôt que par une valeur par défaut.
Dans le fichier main.bicep dans Visual Studio Code, mettez à jour le paramètre appServicePlanSku
pour supprimer sa valeur par défaut.
@description('The name and tier of the App Service plan SKU.')
param appServicePlanSku object
Ajouter de nouveaux paramètres
Vous devez maintenant ajouter une instance et une base de données SQL Server. Tout d’abord, vous allez ajouter des paramètres pour les informations de connexion et le mot de passe d’administrateur, ainsi que pour la référence SKU de base de données. Vous définirez leurs valeurs ultérieurement.
Dans le fichier main.bicep dans Visual Studio Code, ajoutez les paramètres sqlServerAdministratorLogin
, sqlServerAdministratorPassword
et sqlDatabaseSku
sous les déclarations de paramètre actuelles. Quand vous avez terminé, vos déclarations de paramètres doivent ressembler à cet exemple :
@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
Notez que vous ne spécifiez pas de valeurs par défaut pour les paramètres sqlServerAdministratorLogin
et sqlServerAdministratorPassword
. Pour des raisons de sécurité, il est déconseillé d’ajouter des valeurs par défaut aux paramètres sécurisés. En outre, vous ne spécifiez pas de valeur par défaut pour sqlDatabaseSku
. Vous allez spécifier une valeur dans un fichier de paramètres.
Ajouter de nouvelles variables
Dans le fichier main.bicep dans Visual Studio Code, ajoutez les variables sqlServerName
et sqlDatabaseName
sous les variables existantes. Quand vous avez terminé, vos déclarations de variables doivent ressembler à cet exemple :
var appServicePlanName = '${environmentName}-${solutionName}-plan'
var appServiceAppName = '${environmentName}-${solutionName}-app'
var sqlServerName = '${environmentName}-${solutionName}-sql'
var sqlDatabaseName = 'Employees'
Ajouter des ressources d’instance et de base de données SQL Server
Dans le fichier main.bicep dans Visual Studio Code, ajoutez le code suivant en bas du fichier :
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 } }
Enregistrez les modifications du fichier.
Vérifier votre fichier Bicep
Une fois que vous avez effectué toutes les modifications précédentes, votre fichier Bicep doit ressembler à l’exemple suivant :
@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
}
}
Si ce n’est pas le cas, copiez l’exemple ou ajustez votre modèle pour qu’il corresponde à l’exemple.
Créer un fichier de paramètres
Ouvrez Visual Studio Code, puis ouvrez le dossier où se trouve le fichier main.bicep. Dans le même dossier, créez un nouveau fichier appelé main.parameters.dev.json.
Dans le fichier main.parameters.dev.json, ajoutez le code suivant :
{ "$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" } } } }
Enregistrez les modifications du fichier.
Déployer le modèle Bicep avec le fichier de paramètres
Exécutez la commande Azure CLI suivante dans le terminal. Notez que vous fournissez un fichier de paramètres pour le déploiement.
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.dev.json
Exécutez la commande Azure PowerShell suivante dans le terminal. Notez que vous fournissez un fichier de paramètres pour le déploiement.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Vous êtes invité à entrer les valeurs des paramètres sqlServerAdministratorLogin
et sqlServerAdministratorPassword
quand vous exécutez le déploiement. Vous n’avez pas besoin de spécifier solutionName
car ce paramètre a une valeur par défaut spécifiée dans le modèle. Vous n’avez pas besoin de spécifier les autres valeurs de paramètres, car ces valeurs sont spécifiées dans le fichier de paramètres.
Conseil
Quand vous entrez les paramètres sécurisés, les valeurs que vous choisissez doivent respecter certaines règles :
sqlServerAdministratorLogin
ne doit pas être un nom de connexion facile à deviner, tel queadmin
ouroot
. Ce paramètre doit contenir uniquement des caractères alphanumériques et commencer par une lettre.sqlServerAdministratorPassword
doit comporter au moins huit caractères et inclure des lettres minuscules, des lettres majuscules, des chiffres et des symboles. Pour plus d’informations sur la complexité des mots de passe, consultez la Stratégie de mot de passe pour Azure SQL.
Si les valeurs de paramètres ne satisfont pas aux exigences, Azure SQL ne déploiera pas votre serveur.
Veillez également à bien noter les informations de connexion et le mot de passe que vous entrez. Vous les utiliserez dans la section suivante.
Le déploiement peut prendre quelques minutes.
Créer un coffre de clés et des secrets
Votre entreprise de jouets dispose déjà d’un coffre de clés avec les secrets nécessaires aux déploiements. Pour simuler ce scénario, vous allez créer un coffre de clés et ajouter des secrets à utiliser.
Dans le terminal, exécutez les commandes suivantes pour créer le coffre de clés et les secrets. Mettez à jour les valeurs des variables avant d’exécuter ces commandes. Les noms de coffre de clés doivent être une chaîne globale unique de 3 à 24 caractères qui peut contenir uniquement des lettres majuscules et minuscules, des traits d’union (-
) et des nombres. Par exemple, demo-kv-1234567abcdefg.
Attention
Veillez à utiliser les mêmes informations de connexion et le même mot de passe qu’à l’étape précédente. Si ce n’est pas le cas, le prochain déploiement ne s’effectuera pas correctement.
Pour le keyVaultName
, remplacez YOUR-KEY-VAULT-NAME
par un nom pour votre coffre de clés. Les commandes read
pour les variables login
et password
vous invitent à entrer des valeurs. Lors de votre saisie, les valeurs ne sont pas affichées dans le terminal et ne sont pas enregistrées dans votre historique de commandes.
Pour protéger les valeurs de variable dans votre session de terminal Bash, tenez compte des éléments suivants :
- Les valeurs de variable ne sont pas stockées sous forme de chaîne sécurisée et peuvent être affichées en entrant une commande comme
$yourVariableName
sur la ligne de commande ou avec la commandeecho
. Dans cet exercice, une fois que les secrets de votre coffre ont été créés, vous pouvez supprimer la valeur existante de chaque variable en exécutant les commandesread
sans insérer de valeur. az keyvault secret set
utilise le paramètre--value
pour créer la valeur d’un secret. La sortie de la commande affiche une propriété nomméevalue
qui contient la valeur du secret. Vous pouvez supprimer l’intégralité de la sortie de la commande avec le paramètre--output none
, comme indiqué dans l’exemple.
Pour créer les variables keyVaultName
, login
et password
, exécutez chaque commande séparément. Ensuite, vous pouvez exécuter le bloc de commandes pour créer le coffre de clés et les secrets.
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
Notes
Vous définissez le paramètre --enabled-for-template-deployment
sur le coffre pour qu’Azure puisse utiliser les secrets de votre coffre lors des déploiements. Si vous ne définissez pas ce paramètre, par défaut, vos déploiements ne peuvent ensuite pas accéder aux secrets de votre coffre.
En outre, toute personne qui exécute le déploiement doit également avoir l’autorisation d’accéder au coffre. Étant donné que vous avez créé le coffre de clés, vous êtes le propriétaire, vous n’aurez donc pas à accorder explicitement l’autorisation dans cet exercice. Pour vos propres coffres, vous devez accorder l’accès aux secrets.
Pour le keyVaultName
, remplacez YOUR-KEY-VAULT-NAME
par un nom pour votre coffre de clés. Les commandes Read-Host
pour les variables login
et password
vous invitent à entrer des valeurs. Lors de votre saisie, les valeurs ne sont pas affichées dans le terminal et ne sont pas enregistrées dans votre historique de commandes. Les valeurs sont stockées sous forme de chaîne sécurisée.
Pour créer les variables keyVaultName
, login
et password
, exécutez chaque commande séparément. Ensuite, vous pouvez exécuter le bloc de commandes pour créer le coffre de clés et les secrets.
$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
Notes
Vous définissez le paramètre -EnabledForTemplateDeployment
sur le coffre pour qu’Azure puisse utiliser les secrets de votre coffre lors des déploiements. Si vous ne définissez pas ce paramètre, par défaut, vos déploiements ne peuvent ensuite pas accéder aux secrets de votre coffre.
En outre, toute personne qui exécute le déploiement doit également avoir l’autorisation d’accéder au coffre. Étant donné que vous avez créé le coffre de clés, vous êtes le propriétaire, vous n’aurez donc pas à accorder explicitement l’autorisation dans cet exercice. Pour vos propres coffres, vous devez accorder l’accès aux secrets.
Récupération de l’ID de ressource du coffre de clés
Pour utiliser les secrets de coffre de clés dans votre déploiement, vous avez besoin de l’ID de ressource du coffre. Exécutez la commande suivante pour récupérer l’ID de ressource du coffre de clés :
az keyvault show --name $keyVaultName --query id --output tsv
(Get-AzKeyVault -Name $keyVaultName).ResourceId
L’ID de la ressource ressemble à l’exemple suivant :
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/PlatformResources/providers/Microsoft.KeyVault/vaults/toysecrets
Copiez l’ID de la ressource. Vous l’utiliserez à l’étape suivante.
Ajouter une référence de coffre de clés à un fichier de paramètres
Dans le fichier main.parameters.dev.json, ajoutez le code suivant après l’accolade fermante du paramètre
sqlDatabaseSku
. Veillez à remplacerYOUR-KEY-VAULT-RESOURCE-ID
par la valeur de l’ID de la ressource du coffre de clés que vous avez copié à l’étape précédente. Une fois que vous avez terminé, votre fichier de paramètres doit ressembler à cet exemple :{ "$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" } } } }
Enregistrez les modifications du fichier.
Déployer le modèle Bicep avec un fichier de paramètres et des références Azure Key Vault
Exécutez la commande Azure CLI suivante dans le terminal. Vous fournissez un fichier de paramètres avec un fichier Bicep.
az deployment group create \
--template-file main.bicep \
--parameters main.parameters.dev.json
Exécutez la commande Azure PowerShell suivante dans le terminal. Vous fournissez un fichier de paramètres avec un fichier Bicep.
New-AzResourceGroupDeployment `
-TemplateFile main.bicep `
-TemplateParameterFile main.parameters.dev.json
Cette fois, vous n’êtes pas invité à entrer les valeurs des paramètres sqlServerAdministratorLogin
et sqlServerAdministratorPassword
quand vous exécutez le déploiement. Azure récupère les valeurs à partir de votre coffre de clés à la place.
Le déploiement se termine plus rapidement cette fois, car les ressources Azure existent déjà.
Vérifier votre déploiement
Dans votre navigateur, retournez au portail Azure. Accédez à votre groupe de ressources. Vous verrez toujours un déploiement réussi parce que le déploiement a utilisé le même nom que le premier déploiement.
Sélectionnez le lien 1 Réussi.
Sélectionnez le déploiement nommé main.
Dans le menu de gauche, sélectionnez Entrées.
Notez que les valeurs de paramètres
appServicePlanSku
etsqlDatabaseSku
ont toutes les deux été définies sur la valeur du fichier de paramètres. Notez également que les valeurs de paramètressqlServerAdministratorLogin
etsqlServerAdministratorPassword
ne sont pas affichées, car vous leur avez appliqué l’élément décoratif@secure()
.