ACR | Chiffrement avec une Customer Managed Key (CMK)!

[English version below]

Bonjour!

Dans cet article, j’ai le plaisir de vous présenter une nouvelle fonctionnalité portant sur le chiffrement de votre Azure Container Registry. Par défaut, lorsque que vous stockez des images dans votre registry de containers Azure, Microsoft chiffre automatiquement le contenu de la registry avec des clés générées par le service lui meme.

Il est désormais possible (en preview à l’heure où j’écris cet article) de rajouter une couche de chiffrement en utilisant une clé que vous générez et stockez dans Azure Key Vault. On parle alors de Customer Managed Key (CMK) – je ne connais pas de traduction française pour ce terme, si vous en avez une, n’hésitez pas à m’en faire part.

Dans un premier temps, nous allons créer ensemble un ressource group:

az group create --name acrcmk --location canadacentral

Puis créez une identité managée de type: user-assigned

az identity create --resource-group acrcmk --name acrcmk-msi

identityID=$(az identity show --resource-group acrcmk --name acrcmk-msi --query 'id' --output tsv)

identityPrincipalID=$(az identity show --resource-group acrcmk --name acrcmk-msi --query 'principalId' --output tsv)

Nous créons notre Azure Key Vault avec la politique d’accès:

az keyvault create --name keyvaultmaxime --resource-group acrcmk --enable-soft-delete --enable-purge-protection

az keyvault set-policy --resource-group acrcmk --name keyvaultmaxime --object-id $identityPrincipalID --key-permissions get unwrapKey wrapKey

Nous générons notre clé depuis cet Azure Key Vault:

az keyvault key create --name keyacr --vault-name keyvaultmaxime
keyID=$(az keyvault key show --name keyacr --vault-name keyvaultmaxime --query 'key.kid' --output tsv)

Enfin, nous créons notre Azure Container Registry avec cette customer-managed key.

az acr create --resource-group acrcmk --name acrcmkmax --identity $identityID --key-encryption-key $keyID --sku Premium

Nous pouvons constater que le chiffrement est désormais activé sur notre registry de containers:

az acr encryption show --name acrcmkmax

Créer des clés et appliquer du chiffrement est une bonne chose, mais réaliser des rotations de ses clés est encore mieux! Je vous recommande donc d’automatiser cette action, tous les 90 jours.

az keyvault key create --name keyacr2 --vault-name keyvaultmaxime

keyID=$(az keyvault key show --name keyacr2 --vault-name keyvaultmaxime --query 'key.kid' --output tsv)

az acr encryption rotate-key --name acrcmkmax --key-encryption-key $keyID --identity acrcmk-msi

Enfin, si vous souhaitez révoquer l’accès d’une clé existante

az keyvault delete-policy --resource-group acrcmk --name keyvaultmaxime --object-id $identityPrincipalID

Pour conclure, cette fonctionnalité nous permet de rajouter une couche de chiffrement pour notre registry de containers (ACR).

Maxime.


Hello,

In this article, I would like to share with you a new security feature of Azure Container Registry : ACR CMK

By default, when you store a container image in ACR, Microsoft applies this own encryption with encrypted generated by the Azure Platform and managed by Microsoft. The goal of this new feature is to allow the use of your own key for the ACR encryption : Customer Managed Key (or CMK).

Please create a ressource group:

az group create --name acrcmk --location canadacentral

Create then a user-assigned managed identity

az identity create --resource-group acrcmk --name acrcmk-msi

identityID=$(az identity show --resource-group acrcmk --name acrcmk-msi --query 'id' --output tsv)

identityPrincipalID=$(az identity show --resource-group acrcmk --name acrcmk-msi --query 'principalId' --output tsv)

Next, create a KeyVault with an access policy

az keyvault create --name keyvaultmaxime --resource-group acrcmk --enable-soft-delete --enable-purge-protection

az keyvault set-policy --resource-group acrcmk --name keyvaultmaxime --object-id $identityPrincipalID --key-permissions get unwrapKey wrapKey

Subsequently, generate a key from our Key Vault

az keyvault key create --name keyacr --vault-name keyvaultmaxime
keyID=$(az keyvault key show --name --vault-name --query 'key.kid' --output tsv)

Finally, create a new Azure Container Registry with CMK feature

az acr create --resource-group acrcmk --name acrcmkmax --identity $identityID --key-encryption-key $keyID --sku Premium

Now, we can check if the encryption is enabled

az acr encryption show --name acrcmkmax

A security best practice is to rotate security key every 90 days. To do so, I recommend you to automate this process.

az keyvault key create --name keyacr2 --vault-name keyvaultmaxime

keyID=$(az keyvault key show --name keyacr2 --vault-name keyvaultmaxime --query 'key.kid' --output tsv)

az acr encryption rotate-key --name acrcmkmax --key-encryption-key $keyID --identity acrcmk-msi

And if you want to revoke the access of an existing key, please use this command

az keyvault delete-policy --resource-group acrcmk --name keyvaultmaxime --object-id $identityPrincipalID

In conclusion, this new security feature adds a new security layer on the top of AKS, and allows you to manage your own key for the encryption of your container images.

Maxime.

Démarrez une conversation

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *