Démarrage rapide : apportez votre propre stockage pour créer et publier une définition d’application managée Azure
Ce guide de démarrage rapide décrit comment apporter votre propre stockage (BYOS) à une application managée Azure. Vous créez et publiez une définition d’application managée dans votre catalogue de services pour les membres de votre organisation. Lorsque vous utilisez votre propre compte de stockage, la définition de votre application managée peut dépasser la limite de 120 Mo du catalogue de services.
Pour publier une définition d’application managée dans votre catalogue de services, exécutez les tâches suivantes :
- Créez un modèle Azure Resource Manager (modèle ARM) qui définit les ressources Azure déployées par l’application managée.
- Définir les éléments d’interface utilisateur du portail lors du déploiement de l’application managée.
- Créez un package .zip qui contient les fichiers JSON nécessaires.
- Créez un compte de stockage dans lequel vous stockez la définition d’application managée.
- Déployez la définition d’application managée sur votre propre compte de stockage afin qu’elle soit disponible dans votre catalogue de services.
Si la définition de votre application managée est inférieure à 120 Mo et que vous ne souhaitez pas utiliser votre propre compte de stockage, accédez à Démarrage rapide : créer et publier une définition d’application managée Azure.
Vous pouvez utiliser Bicep pour développer une définition d’application managée mais elle doit être convertie en modèle ARM JSON avant de pouvoir publier la définition dans Azure. Si vous souhaitez en savoir plus, veuillez consulter la rubrique Démarrage rapide : utiliser Bicep pour créer, puis publier une définition d’application managée Azure.
Vous pouvez également utiliser Bicep pour déployer une définition d’application managée depuis votre catalogue de services. Pour plus d’informations, consultez Démarrage rapide : utiliser Bicep pour déployer une définition d’application managée Azure.
Prérequis
Pour suivre ce guide de démarrage rapide, vous devez disposer des éléments suivants :
- Un compte Azure avec un abonnement actif et des autorisations d’accès à des ressources Microsoft Entra telles que des utilisateurs, des groupes ou des principaux de service. Si vous n’avez pas de compte, créez-en un gratuitement avant de commencer.
- Visual Studio Code avec la dernière version de l’extension Outils Azure Resource Manager Pour les fichiers Bicep, installez l’extension Bicep pour Visual Studio Code.
- Installez la version la plus récente d’Azure PowerShell ou Azure CLI.
Créer le modèle ARM
Chaque définition d’application managée contient un fichier nommé mainTemplate.json. Le modèle définit les ressources Azure à déployer, et n’est pas différent d’un modèle ARM standard.
Ouvrez Visual Studio Code, créez un fichier avec le nom mainTemplate.json (avec respect de la casse) et enregistrez-le.
Ajoutez le code JSON suivant et enregistrez le fichier. Il définit les ressources de l’application managée nécessaires pour déployer un App Service, plan App Service, et un compte de stockage.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"maxLength": 40,
"metadata": {
"description": "App Service plan name."
}
},
"appServiceNamePrefix": {
"type": "string",
"maxLength": 47,
"metadata": {
"description": "App Service name prefix."
}
}
},
"variables": {
"appServicePlanSku": "B1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
"linuxFxVersion": "DOTNETCORE|8.0"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2023-01-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
},
"kind": "linux",
"properties": {
"zoneRedundant": false,
"reserved": true
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2023-01-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"httpsOnly": true,
"redundancyMode": "None",
"siteConfig": {
"linuxFxVersion": "[variables('linuxFxVersion')]",
"minTlsVersion": "1.2",
"ftpsState": "Disabled"
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
]
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2023-01-01').defaultHostName]"
}
}
}
Définissez votre expérience du portail
En tant qu’éditeur, vous définissez l’expérience du portail pour créer l’application managée. Le fichier createUiDefinition.json génère l’interface utilisateur du portail. Vous définissez comment les utilisateurs fournissent une entrée pour chaque paramètre à l’aide d’éléments de contrôle tels que des listes déroulantes et des zones de texte.
Dans cet exemple, l’interface utilisateur vous invite à entrer le préfixe de nom App Service et le nom du plan App Service. Pendant le déploiement de mainTemplate.json, les variables appServiceName
utilisent la fonction uniqueString
pour ajouter une chaîne de 13 caractères au préfixe de nom afin de rendre le nom globalement unique dans Azure.
Ouvrez Visual Studio Code, créez un fichier avec le nom createUiDefinition.json (avec respect de la casse) et enregistrez-le.
Ajoutez le code JSON suivant au fichier, puis enregistrez-le.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "webAppSettings",
"label": "Web App settings",
"subLabel": {
"preValidation": "Configure the web app settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "appServicePlanName",
"type": "Microsoft.Common.TextBox",
"label": "App Service plan name",
"placeholder": "App Service plan name",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{1,40}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
},
"visible": true
},
{
"name": "appServiceName",
"type": "Microsoft.Common.TextBox",
"label": "App Service name prefix",
"placeholder": "App Service name prefix",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{2,47}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]"
}
}
}
Pour en savoir plus, accédez à la page Démarrage avec CreateUiDefinition.
Empaqueter les fichiers
Ajoutez les deux fichiers au fichier de package nommé app.zip. Les deux fichiers doivent se trouver au niveau racine du fichier .zip. Si les fichiers sont dans un dossier, lorsque vous créez la définition d’application managée, une erreur vous indique que les fichiers nécessaires ne sont pas présents.
Chargez app.zip sur un compte de stockage Azure afin de pouvoir l’utiliser lorsque vous déployez la définition de l’application managée. Le nom du compte de stockage doit être globalement unique dans Azure, et la longueur doit être comprise entre trois et 24 caractères avec uniquement des lettres minuscules et des chiffres. Dans la commande, remplacez l’espace réservé <pkgstorageaccountname>
, y compris les chevrons (<>
), par le nom de votre compte de stockage unique.
New-AzResourceGroup -Name packageStorageGroup -Location westus
$pkgstorageparms = @{
ResourceGroupName = "packageStorageGroup"
Name = "<pkgstorageaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $false
}
$pkgstorageaccount = New-AzStorageAccount @pkgstorageparms
La variable $pkgstorageparms
utilise PowerShell splatting pour améliorer la lisibilité des valeurs de paramètres utilisées dans la commande pour créer le nouveau compte de stockage. Splatting est utilisé dans d’autres commandes PowerShell qui utilisent plusieurs valeurs de paramètres.
Après avoir créé le compte de stockage, ajoutez l’attribution de rôle Contributeur aux données blob du stockage à l’étendue du compte de stockage. Attribuez l’accès à votre compte d’utilisateur Microsoft Entra. Selon votre niveau d’accès dans Azure, vous devrez peut-être disposer d’autres autorisations attribuées par votre administrateur. Pour plus d’informations, consultez Attribuer un rôle Azure pour accéder aux données blob et Attribuer des rôles Azure en utilisant le portail Azure.
Une fois que vous avez ajouté le rôle au compte de stockage, il faut quelques minutes pour qu’il soit actif dans Azure. Ensuite, vous pouvez créer le contexte nécessaire pour créer le conteneur et charger le fichier.
$pkgstoragecontext = New-AzStorageContext -StorageAccountName $pkgstorageaccount.StorageAccountName -UseConnectedAccount
New-AzStorageContainer -Name appcontainer -Context $pkgstoragecontext -Permission blob
$blobparms = @{
File = "app.zip"
Container = "appcontainer"
Blob = "app.zip"
Context = $pkgstoragecontext
}
Set-AzStorageBlobContent @blobparms
Utilisez la commande suivante pour stocker l’URI du fichier de package dans une variable nommée packageuri
. Vous utilisez la valeur de la variable lorsque vous déployez la définition de l’application managée.
$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext).ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri
Apporter votre propre stockage pour la définition de l’application managée
Vous stockez la définition de votre application managée dans votre compte de stockage afin de pouvoir gérer son emplacement et son accès conformément aux obligations réglementaires de votre organisation. L’utilisation de votre propre compte de stockage vous permet d’avoir une application qui dépasse la limite de 120 Mo d’une définition d’application managée d’un catalogue de services.
Notes
L’apport de votre propre stockage est uniquement pris en charge avec les déploiements de modèles ARM ou d’API REST de la définition de l’application managée.
Créer le compte de stockage
Créez le compte de stockage de votre définition d’application managée. Le nom du compte de stockage doit être globalement unique dans Azure, et la longueur doit être comprise entre trois et 24 caractères avec uniquement des lettres minuscules et des chiffres.
Cet exemple crée un groupe de ressources nommé byosDefinitionStorageGroup
. Dans la commande, remplacez l’espace réservé <byosaccountname>
, y compris les chevrons (<>
), par le nom de votre compte de stockage unique.
New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus
$byostorageparms = @{
ResourceGroupName = "byosDefinitionStorageGroup"
Name = "<byosaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $true
}
$byosstorageaccount = New-AzStorageAccount @byostorageparms
Après avoir créé le compte de stockage, ajoutez l’attribution de rôle Contributeur aux données blob du stockage à l’étendue du compte de stockage. Attribuez l’accès à votre compte d’utilisateur Microsoft Entra. Vous avez besoin d’un accès pour une étape ultérieurement dans le processus.
Une fois que vous avez ajouté le rôle au compte de stockage, il faut quelques minutes pour qu’il soit actif dans Azure. Ensuite, vous pouvez créer le contexte nécessaire pour créer le conteneur et charger le fichier.
$byosstoragecontext = New-AzStorageContext -StorageAccountName $byosstorageaccount.StorageAccountName -UseConnectedAccount
Utilisez la commande suivante pour stocker l’ID de ressource du compte de stockage dans une variable nommée byosstorageid
. Vous utilisez la valeur de la variable lorsque vous déployez la définition de l’application managée.
$byosstorageid = (Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).Id
Définir l’attribution de rôle pour votre compte de stockage
Avant de déployer votre définition d’application managée sur votre compte de stockage, attribuez le rôle Contributeur à l’utilisateur Fournisseur de ressources de l’appliance dans l’étendue du compte de stockage. Cette attribution permet à l’identité d’écrire les fichiers de définition dans le conteneur de votre compte de stockage.
Vous pouvez utiliser des variables pour configurer l’attribution de rôle. Cet exemple utilise la variable$byosstorageid
que vous avez créée à l’étape précédente et crée la variable $arpid
.
$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id
New-AzRoleAssignment -ObjectId $arpid -RoleDefinitionName Contributor -Scope $byosstorageid
Le fournisseur de ressources d’appliance est un principal de service dans votre locataire Microsoft Entra. À partir du portail Azure, vous pouvez vérifier s’il est inscrit en accédant à Microsoft Entra ID>Applications d’entreprise et en remplaçant le filtre de recherche par Applications Microsoft. Recherchez Appliance Resource Provider. S’il est introuvable, inscrivez le fournisseur de ressources Microsoft.Solutions
.
Obtenir l’ID du groupe et l’ID de définition de rôle
L’étape suivante consiste à sélectionner un utilisateur, un groupe de sécurité ou une application afin de gérer les ressources pour le client. Cette identité dispose des autorisations sur le groupe de ressources managées en fonction du rôle attribué. Le rôle peut être n’importe quel rôle intégré Azure comme Propriétaire ou Contributeur.
Cet exemple utilise un groupe de sécurité et votre compte Microsoft Entra doit être membre du groupe. Pour obtenir l’ID d’objet du groupe, remplacez l’espace réservé <managedAppDemo>
, y compris les chevrons (<>
), par le nom de votre groupe. Vous utilisez la valeur de la variable lorsque vous déployez la définition de l’application managée.
Pour créer un groupe Microsoft Entra, accédez à Gérer les groupes Microsoft Entra et l’appartenance aux groupes.
$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id
Obtenez ensuite l’ID de définition de rôle du rôle intégré Azure auquel vous souhaitez accorder l’accès à l’utilisateur, au groupe ou à l’application. Vous utilisez la valeur de la variable lorsque vous déployez la définition de l’application managée.
$roleid=(Get-AzRoleDefinition -Name Owner).Id
Créer le modèle de déploiement de définition
Utilisez un fichier Bicep pour déployer la définition d’application managée dans votre catalogue de services. Après le déploiement, les fichiers de définition sont stockés dans votre propre compte de stockage.
Ouvrez Visual Studio Code, créez un fichier nommé deployDefinition.bicep et enregistrez-le.
Ajoutez le code Bicep suivant et enregistrez le fichier.
param location string = resourceGroup().location
@description('Name of the managed application definition.')
param managedApplicationDefinitionName string
@description('Resource ID for the bring your own storage account where the definition is stored.')
param definitionStorageResourceID string
@description('The URI of the .zip package file.')
param packageFileUri string
@description('Publishers Principal ID that needs permissions to manage resources in the managed resource group.')
param principalId string
@description('Role ID for permissions to the managed resource group.')
param roleId string
var definitionLockLevel = 'ReadOnly'
var definitionDisplayName = 'Sample BYOS managed application'
var definitionDescription = 'Sample BYOS managed application that deploys web resources'
resource managedApplicationDefinition 'Microsoft.Solutions/applicationDefinitions@2021-07-01' = {
name: managedApplicationDefinitionName
location: location
properties: {
lockLevel: definitionLockLevel
description: definitionDescription
displayName: definitionDisplayName
packageFileUri: packageFileUri
storageAccountId: definitionStorageResourceID
authorizations: [
{
principalId: principalId
roleDefinitionId: roleId
}
]
}
}
Pour plus d’informations sur les propriétés du modèle, accédez àMicrosoft.Solutions/applicationDefinitions.
Le lockLevel
du groupe de ressources managées empêche le client d’effectuer des opérations indésirables sur ce groupe de ressources. Actuellement, ReadOnly
est le seul niveau de verrou pris en charge. ReadOnly
spécifie que le client peut uniquement lire les ressources présentes dans le groupe de ressources managées. Les identités de l’éditeur dont l’accès est octroyé au groupe de ressources managées sont exemptées du niveau verrou.
Créer le fichier de paramètres
Le modèle de déploiement de la définition d’application managée a besoin d’une entrée pour plusieurs paramètres. La commande de déploiement vous invite à entrer les valeurs ou vous pouvez créer un fichier de paramètres pour les valeurs. Dans cet exemple, nous utilisons un fichier de paramètres pour passer les valeurs des paramètres à la commande de déploiement.
Dans Visual Studio Code, créez un nouveau fichier nommé deployDefinition-parameters.bicepparam et enregistrez-le.
Ajoutez le code suivant à votre fichier de paramètres et enregistrez-le. Ensuite, remplacez le <placeholder values>
, y compris les chevrons (<>
), par vos valeurs.
using './deployDefinition.bicep'
param managedApplicationDefinitionName = 'sampleByosManagedApplication'
param definitionStorageResourceID = '<placeholder for you BYOS storage account ID>'
param packageFileUri = '<placeholder for the packageFileUri>'
param principalId = '<placeholder for principalid value>'
param roleId = '<placeholder for roleid value>'
Le tableau suivant décrit les valeurs de paramètre de la définition d’application managée.
Paramètre | Valeur |
---|---|
managedApplicationDefinitionName |
Nom de la définition d’application managée. Pour cet exemple, utilisez sampleByosManagedApplication. |
definitionStorageResourceID |
ID de ressource du compte de stockage où est stockée la définition. Utilisez la valeur de votre variable byosstorageid . |
packageFileUri |
Entrez l’URI de votre fichier de package .zip. Utilisez la valeur de votre variable packageuri . |
principalId |
ID du principal des éditeurs nécessitant des autorisations pour gérer les ressources du groupe de ressources managées. Utilisez la valeur de votre variable principalid . |
roleId |
ID de rôle pour les autorisations du groupe de ressources managées. Par exemple Propriétaire, Contributeur, Lecteur. Utilisez la valeur de votre variable roleid . |
Pour obtenir vos valeurs de variable :
- Azure PowerShell : dans PowerShell, tapez
$variableName
pour afficher la valeur d’une variable. - Azure CLI : dans Bash, tapez
echo $variableName
pour afficher la valeur d’une variable.
Déployer la définition
Lorsque vous déployez la définition de l’application managée, elle est mise à disposition dans votre catalogue de services. Ce processus ne déploie pas les ressources de l’application managée.
Créez un groupe de ressources nommé byosAppDefinitionGroup et déployez la définition d’application managée sur votre compte de stockage.
New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus
$deployparms = @{
ResourceGroupName = "byosAppDefinitionGroup"
TemplateFile = "deployDefinition.bicep"
TemplateParameterFile = "deployDefinition-parameters.bicepparam"
Name = "deployDefinition"
}
New-AzResourceGroupDeployment @deployparms
Vérifier le stockage des fichiers de définition
Pendant le déploiement, la propriété storageAccountId
du modèle utilise l’ID de ressource de votre compte de stockage et crée un conteneur nommé applicationdefinitions
(avec respect de la casse). Les fichiers du package .zip que vous avez spécifié pendant le déploiement sont stockés dans le nouveau conteneur.
Vous pouvez utiliser les commandes suivantes pour vérifier que les fichiers de définition d’application managée sont enregistrés dans le conteneur de votre compte de stockage.
Get-AzStorageContainer -Name applicationdefinitions -Context $byosstoragecontext |
Get-AzStorageBlob | Select-Object -Property Name | Format-List
Remarque
Pour renforcer la sécurité, vous pouvez créer une définition de l’application managée et la stocker dans un objet blob de compte de stockage Azure où le chiffrement est activé. Le contenu de la définition est chiffré selon les options de chiffrement du compte de stockage. Seuls les utilisateurs disposant d’autorisations d’accès au fichier peuvent accéder à la définition dans votre catalogue de services.
Mettre à jour la sécurité du compte de stockage
Après un déploiement réussi, désactivez la propriété de clé d’accès partagé pour améliorer la sécurité du compte de stockage. Lorsque le compte de stockage a été créé, vous avez ajouté une attribution de rôle pour Contributeur aux données blob de stockage qui vous donne accès au conteneur et aux objets blob sans utiliser de clés de stockage.
Pour vérifier et mettre à jour les paramètres de clé d’accès partagé du compte de stockage, utilisez les commandes suivantes :
(Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).AllowSharedKeyAccess
Set-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName -AllowSharedKeyAccess $false
Assurez-vous que les utilisateurs peuvent accéder à votre définition
Vous avez accès à la définition de l’application managée, mais vous souhaitez vous assurer que d’autres utilisateurs de votre organisation peuvent y accéder. Accordez-leur au moins le rôle Lecteur dans la définition. Ils ont peut-être hérité de ce niveau d’accès depuis l’abonnement ou le groupe de ressources. Pour vérifier qui a accès à la définition et ajouter des utilisateurs ou des groupes, accédez à Attribuer des rôles Azure à l’aide du portail Azure.
Nettoyer les ressources
Si vous prévoyez de déployer la définition, passez à la section Étapes suivantes qui établit un lien vers l’article pour déployer la définition.
Si vous avez terminé la définition d’application managée, vous pouvez supprimer les groupes de ressources que vous avez créés et qui se nomment packageStorageGroup, byosDefinitionStorageGroup et byosAppDefinitionGroup.
La commande vous invite à confirmer que vous souhaitez supprimer le groupe de ressources.
Remove-AzResourceGroup -Name packageStorageGroup
Remove-AzResourceGroup -Name byosDefinitionStorageGroup
Remove-AzResourceGroup -Name byosAppDefinitionGroup
Étapes suivantes
Vous avez publié la définition d’application managée. Découvrez maintenant comment déployer une instance de cette définition.