Aller au contenu

Microsoft Azure

La meilleure méthode pour sauvegarder les clusters Kubernetes exécutés sur la plateforme Azure consiste à donner à l’agent de sauvegarde Afi l’accès nécessaire pour gérer les instantanés de volumes directement via l’API Azure, plutôt que via l’API CSI générique. Grâce à cette intégration, Afi utilise l’API de suivi des blocs modifiés fournie par Azure pour effectuer des sauvegardes incrémentielles rapides et légères.

Un cluster Azure Kubernetes Service (AKS) a besoin d’une identité pour accéder aux ressources Azure telles que les disques managés et les instantanés. Cette identité peut être de l’un des types suivants :

  • identité managée : une identité managée est un type d’identité géré par la plateforme Azure qui n’oblige pas l’utilisateur à provisionner ni à renouveler des secrets. Pour plus d’informations sur les identités managées dans Microsoft Entra ID, consultez Identités managées.
  • principal de service : un principal de service est une identité de sécurité utilisée par les applications, services et outils d’automatisation créés par l’utilisateur pour accéder aux ressources Azure. Considérez-le comme une « identité utilisateur » (identifiant et mot de passe ou certificat) dotée d’un rôle précis et d’autorisations strictement contrôlées pour accéder à vos ressources. Pour plus d’informations sur les principaux de service dans Microsoft Entra ID, consultez Objets application et principal de service.

Les identités managées sont essentiellement une enveloppe autour des principaux de service qui simplifie leur gestion. Les mêmes exigences d’autorisation s’appliquent aux principaux de service et aux identités managées.

Pour procéder à la configuration, recherchez le groupe de ressources associé à votre cluster AKS, configurez une identité managée ou un principal de service capable de gérer les instantanés et les disques dans votre cluster AKS, puis communiquez ses identifiants à l’agent de sauvegarde Afi.

Rechercher le groupe de ressources associé à votre cluster AKS

Lorsqu’un cluster AKS est créé dans un groupe de ressources donné, AKS crée un groupe de ressources supplémentaire associé à ce cluster, dans lequel se trouvent ses aks-nodepool, disks et snapshots. Pour utiliser directement l’API AKS afin de gérer les instantanés, Afi Kubernetes Backup doit accéder à ce groupe de ressources. Le nom du groupe de ressources respecte le format mc_{resource-group}_{cluster}_{zone}.

Par exemple, si votre cluster AKS se trouve dans le groupe de ressources k8s et l’emplacement Azure eastus, le groupe de ressources correspondant doit être mc_k8s_kn-0_eastus.

Configurer l’accès à l’API Azure à l’aide d’une identité managée

Prérequis

Pour utiliser cette option de configuration, le cluster AKS doit prendre en charge les identités managées. Les articles suivants de la documentation Azure expliquent comment créer un cluster AKS prenant en charge les identités managées ou mettre à niveau un cluster AKS existant afin qu’il utilise des identités managées :

Créer un rôle personnalisé

Vous trouverez ci-dessous la description JSON du rôle personnalisé Azure k8sbackup requis pour gérer les instantanés (remplacez ${SubscriptionId} par l’identifiant de votre abonnement Azure). Enregistrez-la dans un fichier nommé role.json :

{
  "Name": "k8sbackup",
  "IsCustom": true,
  "Description": "",
  "Actions": [
    "Microsoft.Compute/snapshots/write",
    "Microsoft.Compute/snapshots/read",
    "Microsoft.Compute/snapshots/delete",
    "Microsoft.Compute/snapshots/beginGetAccess/action",
    "Microsoft.Compute/snapshots/endGetAccess/action",
    "Microsoft.Compute/disks/write",
    "Microsoft.Compute/disks/read",
    "Microsoft.Compute/disks/delete",
    "Microsoft.Compute/disks/beginGetAccess/action",
    "Microsoft.Authorization/*/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/${SubscriptionId}"
  ]
}

Créez un rôle personnalisé :

az role definition create --role-definition "role.json"

Le nouveau rôle personnalisé est désormais disponible et peut être attribué aux utilisateurs, groupes ou principaux de service de la même manière que les rôles intégrés. Pour plus d’informations, consultez l’article Créer un rôle personnalisé de la documentation Azure.

Créer une identité managée

Créez une identité managée myIdentity en exécutant la commande az identity suivante :

az identity create --name myIdentity --resource-group myResourceGroup

La sortie de la commande doit ressembler à ceci :

{                                  
  "clientId": "<client-id>",
  "clientSecretUrl": "<clientSecretUrl>",
  "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
  "location": "eastus",
  "name": "myIdentity",
  "principalId": "<principal-id>",
  "resourceGroup": "myResourceGroup",                       
  "tags": {},
  "tenantId": "<tenant-id>",
  "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

Enregistrez la valeur clientId pour une utilisation ultérieure.

Ajouter une attribution de rôle pour l’identité du plan de contrôle

Attribuez le rôle k8sbackup à l’identité managée myIdentity créée à l’étape précédente. L’identité myIdentity pourra ainsi gérer les disques et instantanés Azure dans le groupe de ressources associé à votre cluster AKS (myResourceGroup).

az role assignment create --assignee ${clientId} --role "k8sbackup" \
    --scope subscriptions/${SubscriptionId}/resourceGroups/myResourceGroup

Attribuer l’identité managée au groupe de machines virtuelles identiques

Attribuez l’identité managée myIdentity au groupe de machines virtuelles identiques existant associé au cluster AKS, puis mettez à jour les instances.

az vmss identity assign -g myResourceGroup -n aks-nodepool-name \
    --identities myIdentity
az vmss update-instances -g myResourceGroup -n aks-nodepool-name \
    --instance-ids "*"

Créer le Secret azure-api-key et redémarrer l’agent de sauvegarde

Créez un Kubernetes Secret nommé azure-api-key dans l’espace de noms où l’agent de sauvegarde Afi est installé :

kubectl -n backup-agent create secret generic azure-api-key \
    --from-literal=client-id=${clientId}

Redémarrez le daemonset qui crée les instantanés des volumes persistants :

kubectl -n backup-agent rollout restart ds/pvsnapshotter

Configurer l’accès à l’API Azure à l’aide d’un principal de service

Créer un rôle personnalisé

Vous trouverez ci-dessous la description JSON du rôle personnalisé Azure k8sbackup requis pour gérer les instantanés (remplacez ${SubscriptionId} par l’identifiant de votre abonnement Azure). Enregistrez-la dans un fichier nommé role.json :

{
  "Name": "k8sbackup",
  "IsCustom": true,
  "Description": "",
  "Actions": [
    "Microsoft.Compute/snapshots/write",
    "Microsoft.Compute/snapshots/read",
    "Microsoft.Compute/snapshots/delete",
    "Microsoft.Compute/snapshots/beginGetAccess/action",
    "Microsoft.Compute/snapshots/endGetAccess/action",
    "Microsoft.Compute/disks/write",
    "Microsoft.Compute/disks/read",
    "Microsoft.Compute/disks/delete",
    "Microsoft.Compute/disks/beginGetAccess/action",
    "Microsoft.Authorization/*/read"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/${SubscriptionId}"
  ]
}

Créez un rôle personnalisé :

az role definition create --role-definition "role.json"

Le nouveau rôle personnalisé k8sbackup est désormais disponible et peut être attribué aux utilisateurs, groupes ou principaux de service de la même manière que les rôles intégrés. Pour plus d’informations, consultez l’article Créer un rôle personnalisé de la documentation Azure.

Créer un principal de service

Créez un principal de service myServicePrincipal et configurez son accès au groupe de ressources Azure myResourceGroup :

az ad sp create-for-rbac --name myServicePrincipal \
    --role k8sbackup \
    --scopes subscriptions/${SubscriptionId}/resourceGroups/myResourceGroup

La sortie de la commande doit ressembler à ceci :

{
  "appId": "<appId>",
  "displayName": "myServicePrincipal",
  "password": "<password>",
  "tenant": "<tenant>"
}

Enregistrez les valeurs appId, password et tenant pour une utilisation ultérieure.

Créer le Secret azure-api-key et redémarrer l’agent de sauvegarde

Créez un Kubernetes Secret nommé azure-api-key dans l’espace de noms où l’agent de sauvegarde Afi est installé :

kubectl -n backup-agent create secret generic azure-api-key \
    --from-literal=client-id=${appId} \
    --from-literal=client-secret=${password} \
    --from-literal=tenant-id=${tenant}

Redémarrez le daemonset qui crée les instantanés des volumes persistants :

kubectl -n k8sbackup rollout restart ds/pvsnapshotter