Exercice : Mise à jour et gestions des versions d’un spec de modèle
Votre spec de modèle Azure Cosmos DB est maintenant utilisé dans toute votre organisation pour approvisionner un grand nombre de nouveaux comptes Azure Cosmos DB. En conséquence, ils sont tous configurés pour utiliser la sauvegarde continue.
Votre équipe de sécurité a récemment examiné les fonctionnalités de sécurité d’Azure Cosmos DB. Elle a décidé que les nouveaux comptes devaient utiliser l’authentification Microsoft Entra et le contrôle d’accès en fonction du rôle Azure Cosmos DB.
Dans cet exercice, vous mettez à jour votre spec de modèle avec une nouvelle version qui comprend la configuration d’authentification mise à jour.
Pendant ce processus, vous allez :
- Mettez à jour votre modèle pour reconfigurer la stratégie de sauvegarde.
- Publiez une nouvelle version de votre spec de modèle.
- Vérifiez que le spec de modèle a été mis à jour.
- Testez la nouvelle version de votre spec de modèle en déployant un autre compte Azure Cosmos DB.
Mettre à jour le modèle
Dans Visual Studio Code, ouvrez le fichier azuredeploy.json.
Mettez à jour le fichier azuredeploy.json pour inclure les modifications suivantes :
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "The Azure region into which the Cosmos DB resources should be deployed." } }, "cosmosDBAccountName": { "type": "string", "defaultValue": "[concat('toy-', uniqueString(resourceGroup().id))]", "maxLength": 44, "minLength": 3, "metadata": { "description": "The name of the Cosmos DB account. This name must be globally unique, and it must only include lowercase letters, numbers, and hyphens." } }, "roleDefinitionFriendlyName": { "type": "string", "defaultValue": "Read and Write", "metadata": { "description": "A descriptive name for the role definition." } }, "roleDefinitionDataActions": { "type": "array", "defaultValue": [ "Microsoft.DocumentDB/databaseAccounts/readMetadata", "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*" ], "metadata": { "description": "The list of actions that the role definition permits." } }, "roleAssignmentPrincipalId": { "type": "string", "metadata": { "description": "The object ID of the Azure AD principal that should be granted access using the role definition." } } }, "variables": { "roleDefinitionName": "[guid('sql-role-definition', resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBAccountName')))]", "roleAssignmentName": "[guid('sql-role-assignment', resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBAccountName')))]" }, "resources": [ { "type": "Microsoft.DocumentDB/databaseAccounts", "apiVersion": "2021-04-15", "name": "[parameters('cosmosDBAccountName')]", "kind": "GlobalDocumentDB", "location": "[parameters('location')]", "properties": { "consistencyPolicy": { "defaultConsistencyLevel": "Session" }, "locations": [ { "locationName": "[parameters('location')]", "failoverPriority": 0, "isZoneRedundant": false } ], "databaseAccountOfferType": "Standard", "enableAutomaticFailover": false, "enableMultipleWriteLocations": false, "backupPolicy": { "type": "Continuous" } } }, { "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions", "apiVersion": "2021-04-15", "name": "[format('{0}/{1}', parameters('cosmosDBAccountName'), variables('roleDefinitionName'))]", "properties": { "roleName": "[parameters('roleDefinitionFriendlyName')]", "type": "CustomRole", "assignableScopes": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBAccountName'))]" ], "permissions": [ { "dataActions": "[parameters('roleDefinitionDataActions')]" } ] }, "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBAccountName'))]" ] }, { "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments", "apiVersion": "2021-04-15", "name": "[format('{0}/{1}', parameters('cosmosDBAccountName'), variables('roleAssignmentName'))]", "properties": { "roleDefinitionId": "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions', parameters('cosmosDBAccountName'), variables('roleDefinitionName'))]", "principalId": "[parameters('roleAssignmentPrincipalId')]", "scope": "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBAccountName'))]" }, "dependsOn": [ "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('cosmosDBAccountName'))]", "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions', parameters('cosmosDBAccountName'), variables('roleDefinitionName'))]" ] } ] }
Enregistrez le fichier .
Dans Visual Studio Code, ouvrez le fichier main.bicep.
Mettez à jour le fichier main.bicep pour inclure les modifications suivantes :
@description('The Azure region into which the Cosmos DB resources should be deployed.') param location string = resourceGroup().location @description('The name of the Cosmos DB account. This name must be globally unique, and it must only include lowercase letters, numbers, and hyphens.') @minLength(3) @maxLength(44) param cosmosDBAccountName string = 'toy-${uniqueString(resourceGroup().id)}' @description('A descriptive name for the role definition.') param roleDefinitionFriendlyName string = 'Read and Write' @description('The list of actions that the role definition permits.') param roleDefinitionDataActions array = [ 'Microsoft.DocumentDB/databaseAccounts/readMetadata' 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*' ] @description('The object ID of the Azure AD principal that should be granted access using the role definition.') param roleAssignmentPrincipalId string var roleDefinitionName = guid('sql-role-definition', cosmosDBAccount.id) var roleAssignmentName = guid('sql-role-assignment', cosmosDBAccount.id) resource cosmosDBAccount 'Microsoft.DocumentDB/databaseAccounts@2021-04-15' = { name: cosmosDBAccountName kind: 'GlobalDocumentDB' location: location properties: { consistencyPolicy: { defaultConsistencyLevel: 'Session' } locations: [ { locationName: location failoverPriority: 0 isZoneRedundant: false } ] databaseAccountOfferType: 'Standard' enableAutomaticFailover: false enableMultipleWriteLocations: false } } resource roleDefinition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2021-04-15' = { parent: cosmosDBAccount name: roleDefinitionName properties: { roleName: roleDefinitionFriendlyName type: 'CustomRole' assignableScopes: [ cosmosDBAccount.id ] permissions: [ { dataActions: roleDefinitionDataActions } ] } } resource roleAssignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2021-04-15' = { parent: cosmosDBAccount name: roleAssignmentName properties: { roleDefinitionId: roleDefinition.id principalId: roleAssignmentPrincipalId scope: cosmosDBAccount.id } }
Enregistrez le fichier .
Publier une nouvelle version du spec de modèle
Publiez le spec de modèle en utilisant cette cmdlet Azure PowerShell dans le terminal Visual Studio Code :
New-AzTemplateSpec `
-ResourceGroupName <rgn>[sandbox resource group name]</rgn> `
-Name ToyCosmosDBAccount `
-Version '2.0' `
-VersionDescription 'Adds Cosmos DB role-based access control.' `
-TemplateFile main.bicep
New-AzTemplateSpec `
-ResourceGroupName <rgn>[sandbox resource group name]</rgn> `
-Name ToyCosmosDBAccount `
-Version '2.0' `
-VersionDescription 'Adds Cosmos DB role-based access control.' `
-TemplateFile azuredeploy.json
Publiez le spec de modèle en utilisant cette commande Azure CLI dans le terminal Visual Studio Code :
az ts create \
--name ToyCosmosDBAccount \
--version 2.0 \
--version-description "Adds Cosmos DB role-based access control." \
--template-file main.bicep
az ts create \
--name ToyCosmosDBAccount \
--version 2.0 \
--version-description "Adds Cosmos DB role-based access control." \
--template-file azuredeploy.json
Vérifier le spec de modèle
Dans votre navigateur, retournez au portail Azure. Accédez à votre groupe de ressources.
Sélectionnez le spec de modèle. Notez que la version la plus récente est maintenant répertoriée en tant que 2.0.
Sélectionnez l’élément de menu Versions. Notez que les deux versions sont maintenant répertoriées.
Les versions de spec de modèle vous permettent de revenir aux versions précédentes de votre spec de modèle si nécessaire.
Déployer la nouvelle version du spec de modèle
Obtenez l’ID de ressource de la nouvelle version du spec de modèle en exécutant la commande Azure PowerShell suivante :
$templateSpecVersionResourceId = ( ` Get-AzTemplateSpec ` -ResourceGroupName <rgn>[sandbox resource group name]</rgn> ` -Name ToyCosmosDBAccount ` -Version 2.0 ` ).Versions[0].Id
Notez que vous utilisez la propriété
Versions
pour récupérer l’ID de ressource de la version du spec de modèle.Votre nouvelle version de spec de modèle a un paramètre pour l’ID d’utilisateur principal. Utilisez les commandes suivantes pour récupérer l’ID du principal d’un compte d’utilisateur :
$token = (Get-AzAccessToken -ResourceUrl "https://graph.windows.net/").Token $userObjectId = (Invoke-RestMethod -Uri 'https://graph.windows.net/me?api-version=1.6' -Headers @{ 'Authorization' = "Bearer $token"}).objectID
Les commandes utilisent l’API Microsoft Graph pour interroger votre propre profil utilisateur.
Déployez le spec de modèle en utilisant cette commande Azure PowerShell dans le terminal Visual Studio Code :
New-AzResourceGroupDeployment ` -TemplateSpecId $templateSpecVersionResourceId ` -roleAssignmentPrincipalId $userObjectId
Obtenez l’ID de ressource de la version du spec de modèle en exécutant la commande Azure CLI suivante :
id=$(az ts show \ --name ToyCosmosDBAccount \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --version "2.0" \ --query "id")
Déployez le spec de modèle en utilisant cette commande Azure CLI dans le terminal Visual Studio Code :
az deployment group create \ --template-spec $id \ --parameters roleAssignmentPrincipalId="d68d19b3-d7ef-4ae9-9ee4-90695a4e417d"
Le déploiement peut prendre une minutes ou deux.
Vérifier le déploiement
Dans votre navigateur, retournez au portail Azure. Accédez à votre groupe de ressources.
En regard de Déploiements, sélectionnez 2 réussis.
Sélectionnez le déploiement le plus récent.
Sélectionnez Détails du déploiement pour le développer. Confirmez que les ressources pour le contrôle d’accès en fonction du rôle Azure Cosmos DB sont déployées.