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.
Le fournisseur Azure Key Vault pour le pilote CSI (Secrets Store Container Storage Interface) permet l’intégration d’un coffre de clés Azure en tant que magasin de secrets à un cluster Azure Kubernetes Service (AKS) via un volume CSI.
Fonctionnalités
- Monte les secrets, les clés et les certificats dans un pod à l’aide d’un volume CSI.
- Prend en charge les volumes CSI inline.
- Prend en charge le montage de plusieurs objets de stockage de secrets en tant que volume unique.
- Prend en charge la portabilité des pods avec la
SecretProviderClassDéfinition de ressource personnalisée (CRD). - Prend en charge les conteneurs Windows.
- Se synchronise avec les secrets Kubernetes.
- Prend en charge la permutation automatique du contenu monté et des secrets Kubernetes synchronisés.
Limites
- Un conteneur utilisant un
ConfigMapouSecreten tant quesubPathne reçoit pas de mises à jour automatisées lorsque le secret est renouvelé, ce qui est une limitation de Kubernetes. Pour que les modifications prennent effet, l’application doit recharger le fichier modifié en regardant les modifications dans le système de fichiers ou en redémarrant le pod. Pour plus d’informations, consultez Limitations connues du pilote CSI du magasin de secrets. - Le module complémentaire crée une identité managée nommée
azurekeyvaultsecretsprovider-xxxxxdans le groupe de ressources de nœud (MC_) et l’affecte automatiquement à l’ensemble de machines virtuelles à échelle variable. Vous pouvez utiliser cette identité managée ou votre identité managée pour accéder au coffre de clés. Cela n’est pas pris en charge pour empêcher la création de l’identité.
Prérequis
- Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
- Vérifiez que votre version d’Azure CLI est 2.30.0 ou ultérieure. S’il s’agit d’une version antérieure, Installez la version la plus récente.
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Terraform version 1.6 ou ultérieure.
Azure CLI installé et connecté. installez la dernière version.
Autorisations pour créer des ressources AKS et Key Vault.
Définissez votre abonnement Azure dans le Azure CLI avec la commande suivante. Remplacez
<subscriptionId>par votre ID d’abonnement.az account set --subscription <subscriptionId>
Réseau
- Si vous utilisez des clusters isolés réseau, il est recommandé de configurer un point de terminaison privé pour accéder à Azure Key Vault.
- Si le cluster a un type
userDefinedRoutingsortant et utilise un appareil pare-feu capable de contrôler le trafic sortant en fonction des noms de domaine, tel que le Pare-feu Azure, assurez-vous que les règles réseau sortantes requises et les FQDN sont autorisés. - Si vous limitez l’entrée dans le cluster, vérifiez que les ports 9808 et 8095 sont ouverts.
Rôles
- Cet article utilise le rôle Agent des secrets Key Vault pour accorder à votre compte l’autorisation de créer un secret dans le coffre de clés.
- Dans l’article pour fournir un accès Azure Key Vault, l’identité utilisée avec
SecretProviderClassa besoin de l'utilisateur du certificat Key Vault pour accéderkeyauxcertificateou utilisateur des secrets de Key Vault pour accédersecretau type d’objet.
Créer un cluster AKS
Créer un cluster AKS avec le fournisseur Azure Key Vault pour la prise en charge du pilote CSI du magasin de secrets.
Créez des variables utilisées dans les commandes pour créer un cluster AKS et Key Vault.
export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM") export KEYVAULT_NAME=myKeyVault${RANDOM_STRING} export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus2Les noms Azure Key Vault doivent être globalement uniques, alphanumériques, y compris les traits d’union et 3 à 24 caractères. Le nom du coffre de clés concatène la valeur
KEYVAULT_NAMEde la variablemyKeyVaultRANDOM_STRINGavec la chaîne de 10 caractères de la variable.Créez un groupe de ressources Azure à l’aide de la commande
az group create.az group create --name $RESOURCE_GROUP --location $LOCATIONCréez un cluster AKS avec la fonctionnalité du fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets en utilisant la commande
az aks createavec le paramètre--enable-addons azure-keyvault-secrets-provider.Le paramètre
--enable-addonscrée une identité managée attribuée à l'utilisateur, nomméeazurekeyvaultsecretsprovider-xxxx, que vous pouvez utiliser pour authentifier votre accès à votre coffre de clés. L'identité gérée est stockée dans le groupe de ressources de nœud (MC_) et est automatiquement affectée à l'ensemble d'échelles de machines virtuelles. Vous pouvez utiliser cette identité managée ou votre identité managée pour accéder au coffre de clés. Cela n’est pas pris en charge pour empêcher la création de l’identité.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-addons azure-keyvault-secrets-provider \ --generate-ssh-keysConseil / Astuce
Si vous souhaitez utiliser l’ID de charge de travail Microsoft Entra, la commande
az aks createdoit inclure les paramètres--enable-oidc-issueret--enable-workload-identity.
Créer un cluster AKS
Créez un fichier main.tf avec la configuration suivante pour créer un cluster AKS avec le fournisseur Azure Key Vault pour la prise en charge du Secrets Store CSI Driver.
Créez la configuration Terraform.
terraform { required_version = ">= 1.6.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} } data "azurerm_client_config" "current" {} resource "azurerm_resource_group" "rg" { name = "aks-rg" location = "East US" }Créez le cluster AKS.
resource "azurerm_kubernetes_cluster" "aks" { name = "aks-cluster" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name dns_prefix = "akscsi" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" } identity { type = "SystemAssigned" } key_vault_secrets_provider { secret_rotation_enabled = false } }Déployez la configuration. Formez une session Bash, exécutez les commandes suivantes pour déployer les ressources :
terraform init terraform validate terraform plan terraform apply
Mettre à jour un cluster AKS existant
Mettez à jour un cluster AKS existant avec Azure Key Vault provider pour la prise en charge de Secrets Store CSI Driver.
Créez des variables utilisées dans les commandes. Remplacez les valeurs si nécessaire pour mettre à jour votre cluster AKS existant ou Key Vault.
Par exemple, si vous utilisez un coffre de clés existant, remplacez la valeur de la
KEYVAULT_NAMEvariable sans utiliser laRANDOM_STRINGvariable.Si vous n’avez pas de coffre de clés, les noms Azure Key Vault doivent être globalement uniques, alphanumériques, y compris les traits d’union et 3 à 24 caractères. Le nom du coffre de clés concatène la valeur
KEYVAULT_NAMEde la variablemyKeyVaultRANDOM_STRINGavec la chaîne de 10 caractères de la variable. Vous pouvez créer le coffre de clés plus loin dans cet article.export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM") export KEYVAULT_NAME=myKeyVault${RANDOM_STRING} export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus2Mettez à jour un cluster AKS existant avec le fournisseur Azure Key Vault pour la fonctionnalité du pilote CSI du Store de Secrets en utilisant la commande
az aks enable-addonset activez le module complémentaireazure-keyvault-secrets-provider. Le module complémentaire crée une identité gérée affectée par l’utilisateur, que vous pouvez utiliser pour vous authentifier auprès de votre coffre de clés.az aks enable-addons \ --addons azure-keyvault-secrets-provider \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPAprès avoir activé le fournisseur de secrets Azure Key Vault, AKS crée une identité managée nommée
azurekeyvaultsecretsprovider-xxxxque vous pouvez utiliser pour vous authentifier auprès de votre coffre de clés. L'identité gérée est stockée dans le groupe de ressources de nœud (MC_) et est automatiquement affectée à l'ensemble d'échelles de machines virtuelles. Vous pouvez utiliser cette identité managée ou votre identité managée pour accéder au coffre de clés. Cela n’est pas pris en charge pour empêcher la création de l’identité.
Mettre à jour un cluster AKS existant
Créez un fichier main.tf avec la configuration suivante pour mettre à jour un cluster AKS existant avec le fournisseur Azure Key Vault pour la prise en charge du Secret Store CSI Driver.
Mettre à jour un cluster AKS existant.
resource "azurerm_kubernetes_cluster" "aks" { name = "<existing-cluster>" resource_group_name = "<resource-group>" key_vault_secrets_provider { secret_rotation_enabled = false } }Déployez la configuration. Formez une session Bash, exécutez les commandes suivantes pour déployer la configuration :
Run the following commands to apply the updates: terraform init terraform validate terraform plan terraform apply
Vérifier l’installation du fournisseur d’identité gérée et de Key Vault.
Si vous avez utilisé Terraform pour créer un cluster ou mettre à jour un cluster existant, vous devez remplacer les variables comme $CLUSTER_NAME dans les commandes suivantes par les valeurs que vous avez utilisées dans votre configuration Terraform.
Vérifier l’identité managée
Procédez comme suit pour vérifier que l’identité managée a été créée et affectée au Scale Set de machines virtuelles du cluster.
Vérifiez que l’identité managée a été créée et affectée au cluster à l’aide de la
az aks showcommande.az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query addonProfiles{ "azureKeyvaultSecretsProvider": { "config": { "enableSecretRotation": "false", "rotationPollInterval": "2m" }, "enabled": true, "identity": { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "resourceId": "/subscriptions/<subscriptionID>/resourcegroups/MC_myResourceGroup_myAKSCluster_eastus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azurekeyvaultsecretsprovider-myakscluster" } } }La
resourceIdpropriété affiche le groupe de ressources et le nomazurekeyvaultsecretsprovider-myaksclusterde l’identité.Vérifiez que l’identité managée est affectée à un ensemble de machines virtuelles du groupe de ressources de nœuds.
NODE_RG=$(az aks show \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --query nodeResourceGroup --output tsv) VMSS_NAME=$(az vmss list \ --resource-group $NODE_RG \ --query [].name --output tsv) az vmss show --name $VMSS_NAME --resource-group $NODE_RG --query '[id, identity]'La sortie affiche l’ID de ressource des jeux de mise à l'échelle de machines virtuelles
Microsoft.Compute/virtualMachineScaleSetset la propriétéuserAssignedIdentitiesavec un ID de ressource pourazurekeyvaultsecretsprovider-myaksclusterqui confirme que l’identité est affectée au jeu de mise à l'échelle de machines virtuelles.
Vérifier l’installation du fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets
Obtenez les informations d’identification du cluster AKS à l’aide de la commande
az aks get-credentials.az aks get-credentials \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPVérifiez que l’installation est terminée à l’aide de la commande
kubectl get pods, qui répertorie tous les pods avec les labelssecrets-store-csi-driveretsecrets-store-provider-azuredans le namespacekube-system.kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wideL’indicateur
o wideinclut le nœud sur lequel chaque pod s’exécute dans la sortie.Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :
NAME READY STATUS RESTARTS AGE NODE aks-secrets-store-csi-driver-4vpkj 3/3 Running 2 4m25s aks-nodepool1-12345678-vmss000002 aks-secrets-store-csi-driver-ctjq6 3/3 Running 2 4m21s aks-nodepool1-12345678-vmss000001 aks-secrets-store-csi-driver-tlvlq 3/3 Running 2 4m24s aks-nodepool1-12345678-vmss000000 aks-secrets-store-provider-azure-5p4nb 1/1 Running 0 4m21s aks-nodepool1-12345678-vmss000000 aks-secrets-store-provider-azure-6pqmv 1/1 Running 0 4m24s aks-nodepool1-12345678-vmss000001 aks-secrets-store-provider-azure-f5qlm 1/1 Running 0 4m25s aks-nodepool1-12345678-vmss000002
Créer un coffre de clés
Exécutez la az keyvault create commande pour créer un coffre de clés avec Azure RBAC activé.
az keyvault create \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--enable-rbac-authorization
Azure RBAC est activé par défaut lorsque vous créez un coffre de clés même si vous n’incluez pas le --enable-rbac-authorization paramètre.
Pour plus d’informations sur les modèles d’autorisation de Key Vault et Azure RBAC, consultez Fournir l'accès aux clés, certificats et secrets de Key Vault avec un contrôle d’accès en fonction du rôle Azure.
Mettre à jour le coffre de clés existant
Exécutez la commande az keyvault update pour mettre à jour un coffre de clés existant avec Azure contrôle d’accès en fonction du rôle (Azure RBAC). Le paramètre --enable-rbac-authorization est nécessaire pour activer Azure RBAC lorsque vous mettez à jour un coffre de clés existant qui a Azure RBAC désactivé.
az keyvault update \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--enable-rbac-authorization
Pour plus d’informations sur les modèles d’autorisation key vault et Azure RBAC, consultez Fournir l’accès aux clés, certificats et secrets Key Vault avec un contrôle d’accès en fonction du rôle Azure
Ajouter l’attribution de rôle et le secret au Key Vault
Exécutez la commande
az keyvault showpour vérifier que le Key Vault dispose du RBAC Azure activé.az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.enableRbacAuthorizationLa sortie doit être
true.Ajoutez une attribution de rôle à l'étendue du coffre de clés pour votre compte d’utilisateur à l’aide de la commande
az role assignment createafin de pouvoir ajouter un secret de coffre de clés à l’étape suivante.Le rôle Agent des secrets Key Vault avec identificateur
b86a8fe4-44ce-4948-aee5-eccb2c155cd7unique est ajouté et vous pouvez utiliser le nom ou l’identificateur unique. L’utilisation de l’identificateur unique du rôle est une bonne pratique pour éviter les problèmes si le nom des rôles change.KEYVAULT_ID=$(az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query id -o tsv) MYID=$(az ad signed-in-user show --query id --output tsv) az role assignment create \ --assignee-object-id $MYID \ --role "b86a8fe4-44ce-4948-aee5-eccb2c155cd7" \ --scope $KEYVAULT_ID \ --assignee-principal-type UserL’attribution de rôle peut prendre plusieurs minutes. Vous pouvez vérifier que l’attribution de rôle a été créée avec la commande suivante :
az role assignment list \ --assignee-object-id $MYID \ --scope $KEYVAULT_ID \ --query '[].{Role:roleDefinitionName, Scope:scope}' \ --output tableCréez un secret de texte brut nommé
ExampleSecretdans le coffre de clés à l’aide de laaz keyvault secret setcommande.Votre coffre de clés peut stocker des clés, des secrets et des certificats. Le
valueparamètre utilise laRANDOM_STRINGvariable pour créer une valeur unique pour le secret.az keyvault secret set \ --vault-name $KEYVAULT_NAME \ --name ExampleSecret \ --value MyAKSExampleSecret${RANDOM_STRING}Vérifiez que le secret a été ajouté au coffre de clés en utilisant la commande
az keyvault secret show.az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
Créer un coffre de clés
Mettez à jour votre fichier main.tf pour créer un coffre de clés avec Azure contrôle d’accès en fonction du rôle (Azure RBAC) activé.
Créez un coffre de clés avec Azure RBAC activé.
data "azurerm_client_config" "current" {} resource "random_string" "suffix" { length = 5 special = false upper = false } resource "azurerm_key_vault" "kv" { name = "akskv${random_string.suffix.result}" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = "standard" enable_rbac_authorization = true }Attribuez le rôle d'agent des secrets du Key Vault.
resource "azurerm_role_assignment" "kv_role" { scope = azurerm_key_vault.kv.id role_definition_name = "Key Vault Secrets Officer" principal_id = data.azurerm_client_config.current.object_id }Créer ExampleSecret dans le coffre de clés.
resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Déployez la configuration. Formez une session Bash, exécutez les commandes suivantes pour déployer la configuration mise à jour :
terraform plan terraform applyVérifiez que ExampleSecret a été ajouté au coffre de clés à l’aide de la
az keyvault secret showcommande. Remplacez<keyvault-name>par le nom du coffre de clés que vous avez créé dans votre configuration Terraform.az keyvault secret show \ --vault-name <keyvault-name> \ --name ExampleSecret
Mettre à jour le coffre de clés existant
Mettez à jour votre fichier main.tf pour mettre à jour un coffre de clés existant avec Azure contrôle d’accès en fonction du rôle (Azure RBAC) activé.
Mettez à jour le coffre de clés existant pour activer Azure RBAC.
resource "azurerm_key_vault" "kv" { name = "<existing-kv>" resource_group_name = "<resource-group>" enable_rbac_authorization = true }Attribuez un rôle et ajoutez un secret.
resource "azurerm_role_assignment" "kv_role" { scope = azurerm_key_vault.kv.id role_definition_name = "Key Vault Secrets Officer" principal_id = data.azurerm_client_config.current.object_id } resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Déployez la configuration. Formez une session Bash, exécutez les commandes suivantes pour déployer la configuration mise à jour :
terraform plan terraform apply
Nettoyer les ressources
Si vous accédez à l’article suivant et avez besoin de ces ressources, ignorez les étapes suivantes. Sinon, si vous avez terminé et que vous n’envisagez pas de passer à l’article suivant, vous devez supprimer les ressources créées dans cet article pour éviter les coûts inutiles.
Supprimez les informations d’identification de votre cluster de votre fichier .kube/config local.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTSupprimez le groupe de ressources et toutes les ressources qu’il contient, y compris les ressources du groupe de ressources de nœud (
MC_) à l’aide de laaz group deletecommande.az group delete --name $RESOURCE_GROUP --yes --no-wait
La terraform destroy commande supprime toutes les ressources définies dans le fichier de configuration et d’état Terraform actuel. Exécutez uniquement cette commande à partir du répertoire de travail utilisé pour cet article.
Avertissement
Si vous travaillez avec des ressources existantes ou de production, passez en revue attentivement le plan d’exécution avant d’exécuter :
terraform plan -destroy
Évitez d’exécuter terraform destroy sur une infrastructure partagée ou importée, sauf si vous êtes certain qu’il est sûr de pouvoir le supprimer. Pour plus d’informations, consultez la documentation Terraform pour la commande terraform destroy .
Supprimez les informations d’identification de votre cluster de votre fichier .kube/config local.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTExécutez la commande suivante pour supprimer les ressources créées dans cet article :
terraform destroy
Étapes suivantes
Dans cet article, vous avez appris à utiliser le pilote CSI du fournisseur Azure Key Vault pour le magasin de secrets dans un cluster AKS. Vous devez désormais fournir une identité pour accéder à l’Azure Key Vault. Pour savoir comment, passez à l’article suivant.