Chiffrer les données de déploiement
Lorsque vous exécutez des ressources Azure Container Instances (ACI) dans le cloud, le service ACI collecte et conserve les données associées à vos conteneurs. ACI chiffre automatiquement ces données lorsqu’elles persistent dans le cloud. Ce chiffrement protège vos données et vous aide à répondre aux engagements de votre entreprise en matière de sécurité et de conformité. ACI vous donne également la possibilité de chiffrer ces données avec votre propre clé, ce qui vous permet de mieux contrôler les données relatives à vos déploiements ACI.
Chiffrement des données ACI
Dans ACI, les données sont chiffrées et déchiffrées à l’aide du chiffrement AES 256 bits. Il est activé pour tous les déploiements ACI et vous n’avez pas besoin de modifier votre déploiement ou vos conteneurs pour bénéficier de ce chiffrement. Cette couverture comprend les métadonnées sur le déploiement, les variables d’environnement, les clés passées dans vos conteneurs et les journaux conservés après l’arrêt de vos conteneurs, afin que vous puissiez toujours les voir. Le chiffrement n’a pas d’impact sur les performances de votre groupe de conteneurs et n’entraîne aucun coût supplémentaire.
Vous pouvez vous appuyer sur les clés gérées par Microsoft pour le chiffrement de vos données de conteneur, ou vous pouvez gérer le chiffrement avec vos propres clés. Le tableau suivant compare ces options :
Clés managées par Microsoft | Clés gérées par le client | |
---|---|---|
Opérations de chiffrement/déchiffrement | Azure | Azure |
Stockage des clés | Magasin de clés Microsoft | Azure Key Vault |
Responsabilité de la permutation des clés | Microsoft | Customer |
Accès aux clés | Microsoft uniquement | Microsoft, client |
Cet article passe en revue deux flux de chiffrement des données avec une clé gérée par le client :
- Chiffrer les données avec une clé gérée par le client stockée dans un coffre Azure Key Vault standard
- Chiffrez les données à l’aide d’une clé gérée par le client stockée dans un coffre de clés Azure Key Vault protégé sur le réseau avec activation des services approuvés.
Chiffrer les données avec une clé gérée par le client stockée dans un coffre Azure Key Vault standard
Prérequis
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Créer un principal de service pour ACI
La première étape consiste à s’assurer que votreclient Azure dispose d’un principal de service affecté pour accorder des autorisations au service Azure Container Instances.
Important
Pour exécuter la commande suivante et créer un principal de service avec succès, vérifiez que vous disposez des autorisations nécessaires pour créer des principaux de service dans votre locataire.
La commande CLI suivante configure le principal de service ACI dans votre environnement Azure :
az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
La sortie de l’exécution de cette commande doit vous indiquer un principal de service configuré avec « displayName » : « Azure Container Instance Service ».
Si vous ne parvenez pas à créer le principal de service :
- vérifiez que vous disposez des autorisations nécessaires pour le faire dans votre locataire
- vérifiez si un principal de service existe déjà dans votre locataire pour le déploiement dans ACI. Pour ce faire, vous pouvez exécuter
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
et utiliser ce principal de service à la place.
Créez une ressource Key Vault
Créez un coffre de clés Azure à l’aide du portail Azure, d’Azure CLI ou d’Azure PowerShell.
Pour les propriétés de votre coffre de clés, respectez les recommandations suivantes :
- Nom : un nom unique est obligatoire.
- Abonnement : Choisissez un abonnement.
- Sous Groupe de ressources, choisissez un groupe de ressources existant ou créez et entrez un nom de groupe de ressources.
- Dans le menu déroulant Emplacement, choisissez un emplacement.
- Vous pouvez conserver les valeurs par défaut ou choisir d’autres options en fonction de spécifications supplémentaires.
Important
Lorsque vous utilisez des clés gérées par le client pour chiffrer un modèle de déploiement ACI, il est recommandé de définir les deux propriétés suivantes sur le coffre de clés : Suppression réversible et Ne pas vider. Ces propriétés ne sont pas activées par défaut, mais peuvent être activées à l’aide de PowerShell ou d’Azure CLI sur un coffre de clés nouveau ou existant.
Générer une nouvelle clé
Une fois votre coffre de clés créé, accédez à la ressource dans le Portail Azure. Dans le menu de navigation de gauche du panneau des ressources, sous Paramètres, sélectionnez Clés. Dans l’affichage Clés, sélectionnez Générer/importer pour générer une nouvelle clé. Utilisez un nom unique pour cette clé et toute autre préférence en fonction de vos besoins.
Définir une stratégie d’accès
Créez une nouvelle stratégie d’accès pour autoriser le service ACI à accéder à votre clé.
- Une fois votre clé générée, revenez dans le panneau de vos ressources du coffre de clés et, sous Paramètres, sélectionnez Stratégies d’accès.
- Dans la page Stratégies d’accès de votre coffre de clés, choisissez Ajouter une stratégie d’accès.
- Définissez les Autorisations de clé pour inclure Obtenir et Ne pas inclure la clé
- Pour Sélectionner un principal, sélectionnez Service Azure Container Instances
- Sélectionnez Ajouter dans la partie inférieure.
La stratégie d’accès doit maintenant apparaître dans les stratégies d’accès de votre coffre de clés.
Modifier votre modèle de déploiement JSON
Important
Le chiffrement des données de déploiement avec une clé gérée par le client est disponible dans la dernière version de l’API (2019-12-01) qui est en cours de déploiement. Spécifiez cette version d’API dans votre modèle de déploiement. Si vous rencontrez des problèmes, contactez le support Azure.
Une fois la clé du coffre de clés et la stratégie d’accès définies, ajoutez les propriétés suivantes à votre modèle de déploiement ACI. Apprenez-en davantage sur le déploiement de ressources ACI à l’aide d’un modèle dans le Tutoriel : Déployer un groupe de plusieurs conteneurs avec un modèle Resource Manager.
- Sous
resources
, définissezapiVersion
sur2019-12-01
. - Dans la section Propriétés du groupe de conteneurs du modèle de déploiement, ajoutez une propriété
encryptionProperties
contenant les valeurs suivantes :vaultBaseUrl
: nom DNS de votre coffre de clés. Vous le trouverez dans le panneau de vue d’ensemble de la ressource Coffre de clés dans le portail.keyName
: nom de la clé générée précédemmentkeyVersion
: Version actuelle de la clé Vous trouverez ce champ en accédant à la clé (sous Clés dans la section Paramètres de votre ressource de coffre de clés).
- Sous les propriétés du groupe de conteneurs, ajoutez une propriété
sku
avec la valeurStandard
. La propriétésku
est requise dans la version 2019-12-01 de l’API.
L’extrait de modèle suivant montre ces propriétés supplémentaires pour chiffrer les données de déploiement :
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Voici un modèle complet, adapté à partir du modèle proposé dans Tutoriel : Déployer un groupe de plusieurs conteneurs avec un modèle Resource Manager.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Déployer vos ressources
Si vous avez créé et modifié le fichier de modèle sur votre Bureau, vous pouvez le télécharger dans votre répertoire Cloud Shell en y faisant glisser le fichier.
Créez un groupe de ressources avec la commande az group create.
az group create --name myResourceGroup --location eastus
Déployez ensuite le modèle avec la commande az deployment group create.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
Après quelques secondes, vous devriez recevoir une réponse initiale d’Azure. Une fois le déploiement terminé, toutes les données qui y sont associées et qui sont conservées par le service ACI sont chiffrées à l’aide de la clé que vous avez fournie.
Chiffrer les données à l’aide d’une clé gérée par le client dans un coffre de clés Azure Key Vault protégé sur le réseau avec activation des services approuvés
Créez une ressource Key Vault
Créez un coffre de clés Azure à l’aide du portail Azure, d’Azure CLI ou d’Azure PowerShell. Pour commencer, n’appliquez aucune limitation réseau pour que nous puissions ajouter les clés nécessaires au coffre. Au cours des étapes suivantes, nous allons ajouter des limitations réseau et activer les services approuvés.
Pour les propriétés de votre coffre de clés, respectez les recommandations suivantes :
- Nom : un nom unique est obligatoire.
- Abonnement : Choisissez un abonnement.
- Sous Groupe de ressources, choisissez un groupe de ressources existant ou créez et entrez un nom de groupe de ressources.
- Dans le menu déroulant Emplacement, choisissez un emplacement.
- Vous pouvez conserver les valeurs par défaut ou choisir d’autres options en fonction de spécifications supplémentaires.
Important
Lorsque vous utilisez des clés gérées par le client pour chiffrer un modèle de déploiement ACI, il est recommandé de définir les deux propriétés suivantes sur le coffre de clés : Suppression réversible et Ne pas vider. Ces propriétés ne sont pas activées par défaut, mais peuvent être activées à l’aide de PowerShell ou d’Azure CLI sur un coffre de clés nouveau ou existant.
Générer une nouvelle clé
Une fois votre coffre de clés créé, accédez à la ressource dans le Portail Azure. Dans le menu de navigation de gauche du panneau des ressources, sous Paramètres, sélectionnez Clés. Dans l’affichage Clés, choisissez Générer/importer pour générer une nouvelle clé. Utilisez un nom unique pour cette clé et toute autre préférence en fonction de vos besoins. Veillez à capturer le nom et la version de la clé pour les étapes suivantes.
Créer une identité managée affectée par l’utilisateur pour votre groupe de conteneurs
Créez une identité dans votre abonnement avec la commande az identity create. Vous pouvez utiliser le groupe de ressources utilisé pour créer le coffre de clés, ou en utiliser un autre.
az identity create \
--resource-group myResourceGroup \
--name myACIId
Pour utiliser l’identité dans les étapes suivantes, utilisez la commande az identity show pour stocker l’ID de principal de service et l’ID de ressource de l’identité dans des variables.
# Get service principal ID of the user-assigned identity
spID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
Définir une stratégie d’accès
Créez une stratégie d’accès pour permettre à l’identité affectée par l’utilisateur d’accéder à votre clé et de la déwrapper à des fins de chiffrement.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--key-permissions get unwrapKey
Modifier les autorisations réseau d’Azure Key Vault
Les commandes suivantes configurent un Pare-feu Azure pour votre coffre de clés Azure Key Vault et autorisent les services approuvés Azure tels que l’accès ACI.
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--default-action Deny
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--bypass AzureServices
Modifier votre modèle de déploiement JSON
Important
Le chiffrement des données de déploiement à l’aide d’une clé gérée par le client est disponible dans l’API version 2022-09-01 ou une version plus récente. L’API version 2022-09-01 est disponible uniquement via ARM ou REST. Si vous rencontrez des problèmes, contactez le support Azure. Une fois la clé du coffre de clés et la stratégie d’accès définies, ajoutez les propriétés suivantes à votre modèle de déploiement ACI. Apprenez-en davantage sur le déploiement de ressources ACI à l’aide d’un modèle dans le Tutoriel : Déployer un groupe de plusieurs conteneurs avec un modèle Resource Manager.
- Sous
resources
, définissezapiVersion
sur2022-09-01
. - Dans la section Propriétés du groupe de conteneurs du modèle de déploiement, ajoutez une propriété
encryptionProperties
contenant les valeurs suivantes :vaultBaseUrl
: nom DNS de votre coffre de clés. Vous trouverez cette propriété dans le panneau de vue d’ensemble de la ressource du coffre de clés du portail.keyName
: nom de la clé générée précédemmentkeyVersion
: Version actuelle de la clé Vous trouverez cette propriété en cliquant sur la clé (sous Clés dans la section Paramètres de votre ressource de coffre de clés).identity
: cette propriété est l’URI de ressource de l’instance d’identité managée créée précédemment.
- Sous les propriétés du groupe de conteneurs, ajoutez une propriété
sku
avec la valeurStandard
. La propriétésku
est obligatoire dans l’API version 2022-09-01. - Sous ressources, ajoutez l’objet
identity
nécessaire pour utiliser l’identité managée avec ACI, qui contient les valeurs suivantes :type
: type de l’identité utilisée (affectée par l’utilisateur ou par le système). Ce cas est défini sur « UserAssigned ».userAssignedIdentities
: resourceURI de la même identité affectée par l’utilisateur que celle utilisée dans l’objetencryptionProperties
.
L’extrait de modèle suivant montre ces propriétés supplémentaires pour chiffrer les données de déploiement :
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Voici un modèle complet, adapté à partir du modèle proposé dans Tutoriel : Déployer un groupe de plusieurs conteneurs avec un modèle Resource Manager.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2022-09-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Déployer vos ressources
Si vous avez créé et modifié le fichier de modèle sur votre Bureau, vous pouvez le télécharger dans votre répertoire Cloud Shell en y faisant glisser le fichier.
Créez un groupe de ressources avec la commande az group create.
az group create --name myResourceGroup --location eastus
Déployez ensuite le modèle avec la commande az deployment group create.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
Après quelques secondes, vous devriez recevoir une réponse initiale d’Azure. Une fois le déploiement terminé, toutes les données qui y sont associées et qui sont conservées par le service ACI sont chiffrées à l’aide de la clé que vous avez fournie.