Zum Inhalt

Microsoft Azure

Für Kubernetes-Cluster auf der Azure-Plattform empfiehlt es sich, dem Afi-Sicherungsagenten die direkte Verwaltung von Volume-Snapshots über die Azure-API zu ermöglichen, statt die generische CSI-API zu verwenden. Mit dieser Integration nutzt Afi die von Azure bereitgestellte Changed-Block-Tracking-API für schnelle und ressourcenschonende inkrementelle Sicherungen.

Ein Azure Kubernetes Service (AKS)-Cluster benötigt eine Identität, um auf Azure-Ressourcen wie verwaltete Datenträger und Snapshots zuzugreifen. Dafür kann eine der folgenden Identitäten verwendet werden:

  • Verwaltete Identität – Eine verwaltete Identität wird von der Azure-Plattform verwaltet. Benutzer müssen keine geheimen Schlüssel bereitstellen oder rotieren. Weitere Informationen finden Sie unter Verwaltete Identitäten in der Dokumentation zu Microsoft Entra ID.
  • Dienstprinzipal – Ein Dienstprinzipal ist eine Sicherheitsidentität, über die von Benutzern erstellte Apps, Dienste und Automatisierungstools auf Azure-Ressourcen zugreifen. Sie können ihn sich als „Benutzeridentität“ mit Anmeldung und Kennwort oder Zertifikat, einer bestimmten Rolle und streng kontrollierten Zugriffsberechtigungen für Ihre Ressourcen vorstellen. Weitere Informationen finden Sie unter Anwendungs- und Dienstprinzipalobjekte in der Dokumentation zu Microsoft Entra ID.

Verwaltete Identitäten sind im Wesentlichen eine Abstraktion für Dienstprinzipale und vereinfachen deren Verwaltung. Für Dienstprinzipale und verwaltete Identitäten gelten dieselben Berechtigungsanforderungen.

Um mit der Konfiguration fortzufahren, ermitteln Sie zunächst die Ihrem AKS-Cluster zugeordnete Ressourcengruppe. Konfigurieren Sie anschließend eine verwaltete Identität oder einen Dienstprinzipal, die beziehungsweise der Snapshots und Datenträger in Ihrem AKS-Cluster verwalten kann, und stellen Sie dem Afi-Sicherungsagenten die zugehörigen Anmeldedaten bereit.

Dem AKS-Cluster zugeordnete Ressourcengruppe ermitteln

Wenn Sie einen AKS-Cluster in einer bestimmten Ressourcengruppe erstellen, legt AKS eine weitere zugehörige Ressourcengruppe an. Darin befinden sich der aks-nodepool, die Datenträger und die Snapshots des Clusters. Für die direkte Snapshot-Verwaltung über die AKS-API benötigt Afi Kubernetes Backup Zugriff auf diese Ressourcengruppe. Ihr Name hat das Format mc_{resource-group}_{cluster}_{zone}.

Wenn sich Ihr AKS-Cluster beispielsweise in der Ressourcengruppe k8s und am Azure-Standort eastus befindet, sollte die zugehörige Ressourcengruppe mc_k8s_kn-0_eastus heißen.

Azure-API-Zugriff über eine verwaltete Identität einrichten

Voraussetzungen

Damit Sie diese Konfigurationsmöglichkeit verwenden können, muss der AKS-Cluster verwaltete Identitäten unterstützen. Die folgenden Artikel der Azure-Dokumentation beschreiben, wie Sie einen AKS-Cluster mit Unterstützung für verwaltete Identitäten erstellen oder einen vorhandenen AKS-Cluster auf verwaltete Identitäten umstellen:

Benutzerdefinierte Rolle erstellen

Nachfolgend finden Sie die JSON-Beschreibung der benutzerdefinierten Azure-Rolle k8sbackup, die für die Snapshot-Verwaltung erforderlich ist. Ersetzen Sie ${SubscriptionId} durch die ID Ihres Azure-Abonnements und speichern Sie die Beschreibung in einer Datei namens 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}"
  ]
}

Erstellen Sie die benutzerdefinierte Rolle:

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

Die neue benutzerdefinierte Rolle ist nun verfügbar und kann wie eine integrierte Rolle Benutzern, Gruppen oder Dienstprinzipalen zugewiesen werden. Weitere Informationen finden Sie unter Benutzerdefinierte Azure-Rolle erstellen in der Azure-Dokumentation.

Verwaltete Identität erstellen

Erstellen Sie die verwaltete Identität myIdentity, indem Sie den folgenden Befehl az identity ausführen:

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

Die Befehlsausgabe sollte wie folgt aussehen:

{                                  
  "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"
}

Speichern Sie den Wert clientId zur späteren Verwendung.

Rollenzuweisung für die Identität der Steuerungsebene hinzufügen

Weisen Sie die Rolle k8sbackup der im vorherigen Schritt erstellten verwalteten Identität myIdentity zu. Dadurch kann myIdentity die Azure-Datenträger und -Snapshots in der Ihrem AKS-Cluster zugeordneten Ressourcengruppe (myResourceGroup) verwalten.

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

Verwaltete Identität der VM-Skalierungsgruppe zuweisen

Weisen Sie die verwaltete Identität myIdentity der vorhandenen, dem AKS-Cluster zugeordneten VM-Skalierungsgruppe zu und aktualisieren Sie deren VM-Instanzen.

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

Secret azure-api-key erstellen und Sicherungsagenten neu starten

Erstellen Sie im Namespace, in dem der Afi-Sicherungsagent installiert ist, ein Kubernetes-Secret namens azure-api-key:

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

Starten Sie das DaemonSet, das Snapshots persistenter Volumes erstellt, neu:

kubectl -n backup-agent rollout restart ds/pvsnapshotter

Azure-API-Zugriff über einen Dienstprinzipal einrichten

Benutzerdefinierte Rolle erstellen

Nachfolgend finden Sie die JSON-Beschreibung der benutzerdefinierten Azure-Rolle k8sbackup, die für die Snapshot-Verwaltung erforderlich ist. Ersetzen Sie ${SubscriptionId} durch die ID Ihres Azure-Abonnements und speichern Sie die Beschreibung in einer Datei namens 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}"
  ]
}

Erstellen Sie die benutzerdefinierte Rolle:

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

Die neue benutzerdefinierte Rolle k8sbackup ist nun verfügbar und kann wie eine integrierte Rolle Benutzern, Gruppen oder Dienstprinzipalen zugewiesen werden. Weitere Informationen finden Sie unter Benutzerdefinierte Azure-Rolle erstellen in der Azure-Dokumentation.

Dienstprinzipal erstellen

Erstellen Sie den Dienstprinzipal myServicePrincipal und konfigurieren Sie seinen Zugriff auf die Azure-Ressourcengruppe myResourceGroup:

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

Die Befehlsausgabe sollte wie folgt aussehen:

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

Speichern Sie die Werte appId, password und tenant zur späteren Verwendung.

Secret azure-api-key erstellen und Sicherungsagenten neu starten

Erstellen Sie im Namespace, in dem der Afi-Sicherungsagent installiert ist, ein Kubernetes-Secret namens azure-api-key:

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}

Starten Sie das DaemonSet, das Snapshots persistenter Volumes erstellt, neu:

kubectl -n k8sbackup rollout restart ds/pvsnapshotter