Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article est la deuxième partie d’une série de tutoriels qui en compte quatre. La première partie donne un aperçu des clés gérées par le client, de leurs caractéristiques et des aspects à prendre en considération avant d’en activer une dans votre registre. Cet article vous guide tout au long des étapes d’activation d’une clé gérée par le client à l’aide d’Azure CLI, du portail Azure ou d’un modèle Azure Resource Manager.
Prérequis
- Installez Azure CLI ou préparez-vous à utiliser Azure Cloud Shell.
- Connectez-vous au portail Azure.
Activer une clé gérée par le client à l’aide d’Azure CLI
Créer un groupe de ressources
Exécutez la commande az group create pour créer un groupe de ressources qui contient votre coffre de clés, registre de conteneurs et autres ressources requises :
az group create --name <resource-group-name> --location <location>
Créer une identité managée attribuée par l’utilisateur
Configurez une identité managée affectée par l’utilisateur pour le Registre afin qu’elle puisse accéder à la clé de chiffrement :
Exécutez la commande az identity create pour créer l’identité managée :
az identity create \ --resource-group <resource-group-name> \ --name <managed-identity-name>Dans la sortie de la commande, notez les valeurs
idetprincipalIdpour configurer l’accès au registre avec le coffre de clés :{ "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecretUrl": "https://control-eastus.identity.azure.net/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myidentityname/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444", "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/myresourcegroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myresourcegroup", "location": "eastus", "name": "myidentityname", "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resourceGroup": "myresourcegroup", "tags": {}, "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }Par souci pratique, stockez les valeurs
idetprincipalIddans des variables d’environnement :identityID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'id' --output tsv) identityPrincipalID=$(az identity show --resource-group <resource-group-name> --name <managed-identity-name> --query 'principalId' --output tsv)
Créer et configurer un coffre de clés
Exécutez la commande az keyvault create pour créer un coffre de clés dans lequel vous pouvez stocker une clé gérée par le client à des fins de chiffrement du registre.
Par défaut, le nouveau coffre de clés active automatiquement le paramètre de suppression réversible. Pour éviter toute perte de données résultant de la suppression accidentelle de clés ou de coffres de clés, nous vous recommandons d’activer le paramètre de protection contre la suppression définitive :
az keyvault create --name <key-vault-name> \ --resource-group <resource-group-name> \ --enable-purge-protectionPour plus de commodité, notez l’ID de ressource du coffre de clés et stockez la valeur dans des variables d’environnement :
keyvaultID=$(az keyvault show --resource-group <resource-group-name> --name <key-vault-name> --query 'id' --output tsv)
Permettre aux services approuvés d’accéder au coffre de clés
Si le coffre de clés est sous la protection d’un pare-feu ou d’un réseau virtuel (point de terminaison privé), vous devez activer les paramètres réseau pour autoriser l’accès par les services Azure approuvés. Pour plus d’informations, consultez Configurer les paramètres de mise en réseau d’Azure Key Vault.
Permettre aux identités managées d’accéder au coffre de clés
Il existe deux façons de permettre aux identités managées d’accéder à votre coffre de clés.
La première consiste à configurer la stratégie d’accès pour le coffre de clés et à définir des autorisations de clé pour l’accès à l’aide d’une identité managée affectée par l’utilisateur :
Exécutez la commande az keyvault set policy. Passez la valeur
principalIDde la variable d’environnement précédemment créée et stockée.Définissez les autorisations de clé sur
get,unwrapKeyetwrapKey:az keyvault set-policy \ --resource-group <resource-group-name> \ --name <key-vault-name> \ --object-id $identityPrincipalID \ --key-permissions get unwrapKey wrapKey
La deuxième façon consiste à utiliser le contrôle d’accès en fonction du rôle Azure (RBAC) pour attribuer des autorisations à l’identité managée affectée par l’utilisateur afin d’accéder au coffre de clés. Exécutez la commande az role assignment create et attribuez le rôle Key Vault Crypto Service Encryption User à une identité managée affectée par l’utilisateur :
az role assignment create --assignee $identityPrincipalID \
--role "Key Vault Crypto Service Encryption User" \
--scope $keyvaultID
Créer une clé dans Key Vault et obtenir l’ID de clé
Exécutez la commande az keyvault key create pour créer une clé dans le coffre de clés :
az keyvault key create \ --name <key-name> \ --vault-name <key-vault-name>Dans la sortie de la commande, notez l’ID de la clé (
kid) :[...] "key": { "crv": null, "d": null, "dp": null, "dq": null, "e": "AQAB", "k": null, "keyOps": [ "encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey" ], "kid": "https://mykeyvault.vault.azure.net/keys/mykey/<version>", "kty": "RSA", [...]Pour des raisons pratiques, stockez le format que vous choisissez pour l’ID de la clé dans la variable d’environnement
$keyID. Vous pouvez utiliser un ID de clé avec ou sans version.
Rotation des clés
Vous pouvez choisir une rotation manuelle ou automatique des clés.
Le chiffrement d’un registre de conteneurs à l’aide d’une clé gérée par le client qui possède une version de clé autorise uniquement une rotation manuelle des clés dans Azure Container Registry. Cet exemple stocke la propriété kid de la clé :
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
Le chiffrement d’un registre avec une clé gérée par le client en omettant une version de clé permet une rotation de clé automatique pour détecter une nouvelle version de clé dans Azure Key Vault. Cet exemple supprime la version de la propriété kid de la clé :
keyID=$(az keyvault key show \
--name <keyname> \
--vault-name <key-vault-name> \
--query 'key.kid' --output tsv)
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Créer et configurer un HSM managé
Vous devez provisionner et activer un Managed HSM avant de pouvoir créer des clés ou attribuer des rôles de plan de données. Suivez le guide de démarrage rapide : Provisionnez et activez un HSM managé à l’aide du Azure CLI, puis revenez à cet article.
Si le pare-feu HSM managé est activé, configurez des services approuvés ou un autre accès réseau avant de créer le registre. Pour plus d’informations, consultez Sécurité réseau pour le HSM managé.
L’utilisateur qui crée la clé de chiffrement a besoin d’un rôle HSM managé qui autorise la création de clé, tel que Managed HSM Crypto User. Pour plus d’informations, consultez Gestion des rôles de plan de données HSM managé.
Créez une clé RSA-HSM qui prend en charge le wrapping de clé :
az keyvault key create \
--hsm-name <managed-hsm-name> \
--name <key-name> \
--kty RSA-HSM \
--ops wrapKey unwrapKey
Le HSM managé utilise le contrôle d’accès en fonction du rôle local au lieu des stratégies d’accès de Key Vault. Attribuez le rôle Managed HSM Crypto Service Encryption User à l’identité attribuée par l’utilisateur. L’exemple suivant limite l’affectation à la clé utilisée par le registre :
az keyvault role assignment create \
--hsm-name <managed-hsm-name> \
--role "Managed HSM Crypto Service Encryption User" \
--assignee-object-id $identityPrincipalID \
--assignee-principal-type MSI \
--scope /keys/<key-name>
Stockez l’ID de clé avec sa version pour la rotation manuelle :
keyID=$(az keyvault key show \
--hsm-name <managed-hsm-name> \
--name <key-name> \
--query 'key.kid' --output tsv)
Pour activer la rotation automatique des clés, supprimez la version de l’ID de clé :
keyID=$(echo $keyID | sed -e "s/\/[^/]*$//")
Note
Un URI de clé HSM managé utilise le format https://<managed-hsm-name>.managedhsm.azure.net/keys/<key-name>/<version>. Le suffixe DNS peut varier selon le cloud Azure.
Créer un registre avec une clé gérée par le client
Exécutez la commande az acr create pour créer un registre dans le niveau de service Premium et activer la clé gérée par le client.
Passez les valeurs de l’ID de l’identité managée (
id) et de l’ID de la clé (kid) stockées dans les variables d’environnement lors des étapes précédentes :az acr create \ --resource-group <resource-group-name> \ --name <container-registry-name> \ --identity $identityID \ --key-encryption-key $keyID \ --sku Premium
Afficher l’état de chiffrement
Exécutez la commande az acr encryption show pour montrer l’état du chiffrement du registre avec une clé gérée par le client :
az acr encryption show --name <container-registry-name>
Selon la clé utilisée pour chiffrer le registre, la sortie est similaire à celle-ci :
{
"keyVaultProperties": {
"identity": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"keyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
"keyRotationEnabled": true,
"lastKeyRotationTimestamp": xxxxxxxx
"versionedKeyIdentifier": "https://myvault.vault.azure.net/keys/myresourcegroup/abcdefg123456789...",
},
"status": "enabled"
}
Activer une clé gérée par le client à l’aide du portail Azure
Créer une identité managée attribuée par l’utilisateur
Pour créer une identité gérée attribuée par l’utilisateur pour des ressources Azure dans le portail Azure :
Suivez les étapes permettant de créer une identité attribuée par l’utilisateur.
Enregistrez le nom de l’identité pour l’utiliser dans les étapes ultérieures.
Création d’un coffre de clés
Suivez les étapes décrites dans Démarrage rapide : Créer un coffre de clés à l’aide du portail Azure.
Quand vous créez un coffre de clés pour une clé gérée par le client, sous l’onglet Informations de base, activez le paramètre Protection contre la suppression définitive. Ce paramètre permet d’empêcher toute perte de données suite à une suppression accidentelle de clés ou coffres de clés.
Permettre aux services de confiance d’accéder au coffre de clés
Si le coffre de clés est sous la protection d’un pare-feu ou d’un réseau virtuel (point de terminaison privé), activez le paramètre réseau pour autoriser l’accès par les services Azure approuvés. Pour plus d’informations, consultez Configurer les paramètres de mise en réseau du Coffre de clés Azure.
Permettre aux identités managées d’accéder au coffre de clés
Il existe deux façons de permettre aux identités managées d’accéder à votre coffre de clés.
La première consiste à configurer la stratégie d’accès pour le coffre de clés et à définir des autorisations de clé pour l’accès à l’aide d’une identité managée affectée par l’utilisateur :
- Accédez à votre Key Vault.
- Sélectionnez Paramètres>Stratégies d’accès > +Ajouter une stratégie d’accès.
- Sélectionnez Autorisations de clé, puis Obtenir, Ne pas inclure la clé et Inclure la clé.
- Dans Sélectionner le principal, sélectionnez le nom de ressource de votre identité managée affectée par l’utilisateur.
- Sélectionnez Ajouter, puis sélectionnez Enregistrer.
Une autre option consiste à attribuer le rôle RBAC Key Vault Crypto Service Encryption User à l’identité managée affectée par l’utilisateur au niveau de l’étendue du coffre de clés. Pour connaître les étapes détaillées, consultez Attribuer des rôles Azure à l’aide du portail Azure.
Créer et configurer un HSM managé
- Suivez le guide de démarrage rapide : Approvisionner et activer un HSM managé à l’aide du portail Azure.
- Assurez-vous que l’utilisateur qui crée la clé de chiffrement a un rôle Managed HSM qui autorise la création de clé, tel que Managed HSM Crypto User.
- DansParamètres, sélectionnez Clés, puis créez ou importez une clé RSA-HSM prenant en charge les opérations
wrapKeyetunwrapKey. - Sous Paramètres, sélectionnez RBAC local.
- Ajoutez l’attribution de rôle Managed HSM Crypto Service Encryption User pour l’identité attribuée par l’utilisateur. Pour le privilège minimum, attribuez le rôle à l’étendue de la clé de chiffrement. Pour plus d’informations, consultez Gestion des rôles de plan de données HSM managé.
- Si le pare-feu HSM managé est activé, configurez des services approuvés ou d’autres accès réseau. Pour plus d’informations, consultez Sécurité réseau pour le HSM managé.
Important
Azure Container Registry ne crée pas ou ne met pas à jour les attributions de rôles HSM managées. Configurez l’attribution de rôle avant de créer le Registre ou de modifier sa clé de chiffrement.
Créer une clé dans un coffre de clés
Créez une clé dans le coffre de clés et utilisez-la pour chiffrer le registre. Procédez comme suit si vous souhaitez sélectionner une version de clé spécifique en tant que clé gérée par le client. Vous devrez peut-être également créer une clé avant de créer le registre de conteneurs si l’accès au coffre de clés est limité à un point de terminaison privé ou à des réseaux sélectionnés.
- Accédez à votre coffre de clés.
- Sélectionnez Paramètres>Touches.
- Sélectionnez +Générer/Importer et entrez un nom unique pour la clé.
- Acceptez les valeurs par défaut restantes, puis sélectionnez Créer.
- Après la création, sélectionnez la clé, puis sélectionnez la version actuelle. Copiez l’identificateur de clé de la version de la clé.
Créer un registre de conteneurs
Sélectionnez Créer une ressource>Conteneurs>Container Registry.
Sous l’onglet Informations de base, sélectionnez ou créez un groupe de ressources, puis entrez un nom de registre. Dans Référence (SKU) , sélectionnez Premium.
Sous l’onglet Chiffrement, pour Clé gérée par le client, sélectionnez Activée.
Pour Identité, sélectionnez l’identité managée que vous avez créée.
Pour chiffrement, choisissez l’une des options suivantes :
- Choisissez Sélectionner dans Key Vault, puis sélectionnez une key vault existante ou un HSM managé et une clé. Sélectionnez Création pour créer un coffre de clés et une clé. La clé que vous sélectionnez est non versionnée et permet la rotation automatique des clés.
- Sélectionnez Saisir l’URI de clé et indiquez l’identificateur d’une clé Key Vault ou HSM managée existante. Vous pouvez fournir soit un URI de clé versionnée (pour une clé dont vous devez effectuer manuellement la rotation), soit un URI de clé sans version (qui active la rotation automatique des clés).
Si un pare-feu HSM managé empêche le portail de répertorier les clés, autorisez votre adresse IP cliente ou sélectionnez Entrer l’URI de la clé. Autoriser les services approuvés permet à Azure Container Registry d’atteindre le HSM managé, mais il n’autorise pas un client en dehors de la limite réseau configurée à utiliser le sélecteur de clés.
Sélectionnez Vérifier et créer.
Sélectionnez Créer pour déployer l’instance du registre.
Montrer l’état de chiffrement
Pour voir l’état de chiffrement de votre registre dans le portail, accédez à votre registre. Sous Paramètres, sélectionnez Chiffrement.
Activer une clé gérée par le client à l’aide d’un modèle Resource Manager
Vous pouvez utiliser un modèle Resource Manager pour créer un registre de conteneurs et activer le chiffrement avec une clé gérée par le client stockée dans Key Vault ou un HSM managé.
Avant de déployer le modèle, créez l’identité affectée par l’utilisateur et configurez son accès à la clé :
- Pour Key Vault, accordez à l’identité les autorisations
get,wrapKeyetunwrapKeyà l’aide d’une stratégie d’accès ou du rôle Azure RBAC Utilisateur du service de chiffrement de Key Vault. - Pour HSM managé, affectez l’identité au rôle RBAC local Utilisateur du service de chiffrement du HSM managé au niveau de l’étendue de clé.
Le modèle déclare l’identité existante afin que le registre puisse s’y référer. Déployez le modèle sur le même groupe de ressources que l’identité.
Copiez le contenu suivant d’un modèle Resource Manager dans un nouveau fichier, puis enregistrez-le sous CMKtemplate.json :
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "registry_name": { "type": "String" }, "identity_name": { "type": "String" }, "kek_id": { "type": "String" } }, "resources": [ { "type": "Microsoft.ContainerRegistry/registries", "apiVersion": "2019-12-01-preview", "name": "[parameters('registry_name')]", "location": "[resourceGroup().location]", "sku": { "name": "Premium", "tier": "Premium" }, "identity": { "type": "UserAssigned", "userAssignedIdentities": { "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]": {} } }, "dependsOn": [ "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name'))]" ], "properties": { "adminUserEnabled": false, "encryption": { "status": "enabled", "keyVaultProperties": { "identity": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identity_name')), '2018-11-30').clientId]", "keyIdentifier": "[parameters('kek_id')]" } }, "networkRuleSet": { "defaultAction": "Allow", "virtualNetworkRules": [], "ipRules": [] }, "policies": { "quarantinePolicy": { "status": "disabled" }, "trustPolicy": { "type": "Notary", "status": "disabled" }, "retentionPolicy": { "days": 7, "status": "disabled" } } } }, { "type": "Microsoft.ManagedIdentity/userAssignedIdentities", "apiVersion": "2018-11-30", "name": "[parameters('identity_name')]", "location": "[resourceGroup().location]" } ] }Suivez les étapes décrites dans les sections précédentes pour créer les ressources suivantes :
- Identité managée affectée par l’utilisateur, identifiée par son nom
- Key Vault ou clé Managed HSM, identifiée par l’ID de clé
- Autorisations de Key Vault requises ou attribution locale d’un rôle RBAC pour Managed HSM
Exécutez la commande az deployment group create pour créer le registre à l’aide du fichier de modèle précédent. Fournissez un nouveau nom de Registre, le nom d’identité managée affectée par l’utilisateur existant et l’ID de clé que vous avez créé.
az deployment group create \ --resource-group <resource-group-name> \ --template-file CMKtemplate.json \ --parameters \ registry_name=<registry-name> \ identity_name=<managed-identity> \ kek_id=<key-id>Exécutez la commandeaz acr encryption show pour montrer l’état de chiffrement du registre :
az acr encryption show --name <registry-name>
Étapes suivantes
Passez à l’article suivant pour découvrir la rotation des clés gérées par le client, la mise à jour des versions de clé et la révocation d’une clé gérée par le client.