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.

AKS | Attack matrix for Kubernetes

[English below]

Bonjour,

Dans cet article, je souhaite vous partager la matrice d’attaque d’une plateforme Kubernetes comme AKS basée sur le framework MITRE.

Dans un premier temps, permettez moi de redéfinir le framework MITRE. Ce framework est une base de connaissances incluant des tactiques et techniques connues et impliquées dans des cyberattaques. Ces matrices aident les organisations à comprendre la surface d’attaque de leur environnement et à s’assurer qu’elles disposent des contrôles de sécurité détectifs et préventifs adéquats à leurs différents risques. Le framework s’appuie sur les catégories suivantes:

  • Accès initial (Initial access)
  • Exécution (Execution)
  • Persistance (Persistence)
  • Escalade de privilèges (Privilege Escalation)
  • Évasion de la défense (Defense evasion)
  • Accès aux informations d’identification (Credential access)
  • Découverte (Discovery)
  • Mouvement latéral (Lateral movement)
  • Impact (Impact)

Vous pouvez retrouver l’article original crée par Yossi Weizman à l’adresse ci-dessous: https://www.microsoft.com/security/blog/2020/04/02/attack-matrix-kubernetes/

Maxime.


Hello,

In this article, I would like to share with you the attack matrix for Kubernetes based on MITRE framework.

The MITRE ATT&CK™ framework is a comprehensive matrix of tactics and techniques used by threat hunters, red teamers, and defenders to better classify attacks and assess an organization’s risk.

The aim of the framework is to improve post-compromise detection of adversaries in enterprises by illustrating the actions an attacker may have taken. How did the attacker get in? How are they moving around? The knowledge base is designed to help answer those questions that while contributing to the awareness of an organization’s security posture at the perimeter and beyond. Organizations can use the framework to identify holes in defenses, and prioritize them based on risk.

This framework uses the following categories:

  • Initial access
  • Execution
  • Persistence
  • Privilege Escalation
  • Defense evasion
  • Credential access
  • Discovery
  • Lateral movement
  • Impact
L’attribut alt de cette image est vide, son nom de fichier est k8s-matrix-1024x545.png.

Please find the following article created by Yossi Weizman: https://www.microsoft.com/security/blog/2020/04/02/attack-matrix-kubernetes/

Maxime.

AKS | Azure Spot Instances

[English below]

Salut,

Dans cet article, nous allons voir ensemble comment créer un cluster AKS utilisant un pool de spot instances. L’intérêt est d’utiliser des instances de type spot afin de pouvoir bénéficier de puissance de calcul non utilisé par le fournisseur de cloud et ainsi obtenir un rabais important sur le prix de cette instance.

Azure ChannelsAzure Spot VMs Disponibilité
Enterprise AgreementYes
Pay As You GoYes
Cloud Service Provider (CSP)Contact your partner
BenefitsNot available
SponsoredNot available
Free TrialNot available

L’objectif de cet article est de vous présenter comment créer un pool d’instances de type spot pour vos workloads AKS qui sont non critiques. Au moment où j’écris cet article, cette fonctionnalité est encore en public preview et nous n’avons pas de SLA disponible pour les instances de type spot.

# - Create a Ressource Group
az group create --name aksspot --location eastus

# - Create an AKS cluster
az aks create --resource-group aksspot --name aksdemospot --node-vm-size Standard_A2_v2 --node-count 2 --generate-ssh-keys

# - Register Spotpoolpreview
az feature register --namespace "Microsoft.ContainerService" --name "spotpoolpreview"

az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}"

# - Install the aks-preview extension
az extension add --name aks-preview
 
# - Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

# - Add spot pool to an existing AKS Cluster
az aks nodepool add \
    --resource-group aksspot \
    --cluster-name aksdemospot \
    --name spotnodepool \
    --priority Spot \
    --eviction-policy Delete \
    --spot-max-price -1 \
    --enable-cluster-autoscaler \
    --node-vm-size Standard_D2_v3 \
    --min-count 1 \
    --max-count 3 \
    --no-wait

# - Show AKS NodePool
az aks nodepool show --resource-group aksspot --cluster-name aksdemospot --name spotnodepool

Dans cet exemple, vous avez pu constater que le paramètre « spot-max-price » est à « -1 ». Le prix maximal sera le prix actuel (au maximum, le prix des machines virtuelles standards). 

Vous pouvez tout à fait remplacer ce paramètre directement par le prix maximum que vous souhaitez payer. Par exemple pour 0.98765, vous vous engagez à payer au maximum un prix de 0.98765$USD par heure.

Si le prix de votre machine dépasse le prix définit, votre machine virtuelle sera supprimée « –eviction-policy Delete ». Dans le cas où vous ne souhaitez pas que celle-ci soit supprimée mais désallouée, vous pouvez remplacer « –eviction-policy Delete » par « eviction-policy Deallocate ».

Maxime.


Hello,

In this article, I am explaining how you can create an AKS cluster with a pool of spot instances. The principal advantage here is to use unallocated compute ressources with a low price.

Azure ChannelsAzure Spot VMs Availability
Enterprise AgreementYes
Pay As You GoYes
Cloud Service Provider (CSP)Contact your partner
BenefitsNot available
SponsoredNot available
Free TrialNot available

The goal of this article is to explain how to create a spot pool for your non critical workloads. This feature is available only in preview and we don’t have SLA support at the time I am writing this article.

# - Create a Ressource Group
az group create --name aksspot --location eastus

# - Create an AKS cluster
az aks create --resource-group aksspot --name aksdemospot --node-vm-size Standard_A2_v2 --node-count 2 --generate-ssh-keys

# - Register Spotpoolpreview
az feature register --namespace "Microsoft.ContainerService" --name "spotpoolpreview"

az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}"

# - Install the aks-preview extension
az extension add --name aks-preview

# - Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

# - Add spot pool to an existing AKS Cluster
az aks nodepool add \
--resource-group aksspot \
--cluster-name aksdemospot \
--name spotnodepool \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--enable-cluster-autoscaler \
--node-vm-size Standard_D2_v3 \
--min-count 1 \
--max-count 3 \
--no-wait

# - Show AKS NodePool
az aks nodepool show --resource-group aksspot --cluster-name aksdemospot --name spotnodepool

In this example, the parameter « spot-max-price » is set to: « -1 ». The maximum price of this virtual machine will match the current price on the market.

If you want, you can replace this parameter by the maximum price you want to paid. For example, if you indicate 0.98765, in this case your maximum price will be 0.98765$USD per hour.

In the case of different prices, i.e. the maximum price is higher than the define one, your virtual machine will be deleted « –eviction-policy Delete ». If you don’t want to delete the virtual machine but only desallocate it, you can replace « –eviction-policy Delete » by « eviction-policy Deallocate ».

Maxime.