Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können die Workload-Identitätsfunktion auf einem Azure Arc-fähigen Kubernetes Cluster aktivieren, indem Sie Azure CLI verwenden. Der Prozess folgt diesen allgemeinen Schritten:
- Aktivieren Sie die Workload-Identitätsfunktion auf einem neuen oder bestehenden Arc-fähigen Kubernetes Cluster.
- Erstellen Sie eine verwaltete Identität (oder eine App-Registrierung) und ein Kubernetes Dienst-Konto.
- Konfigurieren der verwalteten Identität für den Tokenverbund
- Konfigurieren Sie die Annotationen des Dienstkontos und die Kennzeichnungen der Anwendungs-Pods für die Verwendung der Workload-Identität.
- Konfigurieren Sie die Workload-Identitätseinstellungen auf dem Kubernetes-Cluster.
- Deaktivieren Sie die Workload-Identität auf dem Cluster.
Eine Übersicht über dieses Feature finden Sie unter Workload Identity Federation in Azure Arc-fähigen Kubernetes.
Tipp
Dieser Artikel beschreibt die Schritte, die erforderlich sind, um die Workload-Identität auf einem Arc-fähigen Kubernetes Cluster bereitzustellen und zu konfigurieren. Um zu erfahren, wie Sie die Workload-Identität auf anderen Arten von Clustern aktivieren, lesen Sie die folgenden Artikel:
Voraussetzungen
- Workload-Identität für Azure Arc-aktivierte Kubernetes-Cluster unterstützt die folgenden Kubernetes-Distributionen:
- Ubuntu Linux Cluster, der K3s ausführt
- AKS durch Azure Arc aktiviert
- Red Hat OpenShift
- VMware Tanzu TKGm
- AKS auf Edge Essentials
Um die Funktion der Workload-Identität zu nutzen, benötigen Sie Azure CLI Version 2.64 oder höher und az connectedk8s Version 1.10.0 oder höher. Aktualisieren Sie Ihre Azure CLI-Version, bevor Sie Ihre az connectedk8s-Version aktualisieren. Wenn Sie Azure Cloud Shell verwenden, wird die neueste Version von Azure CLI installiert.
Aktivieren Sie die Workload-Identität auf Ihrem Cluster
Führen Sie die entsprechenden Schritte aus, um die Funktion Workload-Identität entweder für einen neuen Arc-fähigen Kubernetes Cluster oder für einen bestehenden Cluster zu aktivieren. Ersetzen Sie in beiden Fällen den Namen und die Ressourcengruppe durch Ihre Werte, und konfigurieren Sie Die Parameter nach Bedarf.
| Parameter | BESCHREIBUNG | Erforderlich |
|---|---|---|
--enable-oidc-issuer |
Generiert und hostt die OIDC-Aussteller-URL, bei der es sich um eine öffentlich zugängliche URL handelt, mit der der API-Server öffentliche Signaturschlüssel für die Überprüfung von Token finden kann. | Erforderlich |
--enable-workload-identity |
Installiert einen Mutating Admission Webhook, der ein signiertes Dienstkonto-Token in einen bekannten Pfad projiziert und authentifizierungsbezogene Umgebungsvariablen basierend auf den Einstellungen des annotierten Dienstkontos in die Anwendungspods eingibt. Wenn Sie diesen Parameter für einen neuen Cluster nicht aktivieren, müssen Sie ein projiziertes Volume an einem bekannten Pfad bereitstellen, der das signierte Dienstkontotoken für den Pfad verfügbar macht. | Optional |
Festlegen von Umgebungsvariablen
Aus Gründen der Einfachheit beziehen sich die Beispiele in diesem Artikel auf die im folgenden Abschnitt definierten Umgebungsvariablen. Ersetzen Sie diese Werte durch Ihre eigenen Werte:
export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
Um einen Azure Arc-fähigen Cluster mit aktivierter Workload-Identität zu erstellen, verwenden Sie den folgenden Befehl:
az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
Um die Workload-Identität auf einem bestehenden Arc-fähigen Kubernetes Cluster zu aktivieren, verwenden Sie den update-Befehl.
az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
Abrufen der OIDC-Zertifikataussteller-URL
Rufen Sie die OIDC-Aussteller-URL ab, und speichern Sie sie in einer Umgebungsvariable. Verwenden Sie diese Aussteller-URL im folgenden Schritt.
export OIDC_ISSUER="$(az connectedk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
Um die Umgebungsvariable anzuzeigen, geben Sie echo ${OIDC_ISSUER} ein. Die Umgebungsvariable sollte die URL des Zertifikatausstellers enthalten, ähnlich wie im folgenden Beispiel:
https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/
Standardmäßig verwendet der Ausgeber die Basis-URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}, wobei der Wert für {region} dem Speicherort entspricht, an dem Sie den Arc-aktivierten Kubernetes-Cluster erstellt haben. Der Wert {uuid} stellt den OpenID Connect (OIDC)-Schlüssel dar, bei dem es sich um eine unveränderliche, zufällig generierte GUID für jeden Cluster handelt.
Erstellen einer verwalteten Identität
Verwenden Sie den Befehl az identity create zum Erstellen einer benutzerseitig zugewiesenen verwaltete Identität. Mithilfe der Workload-Identität richten Sie eine Vertrauensstellung zwischen dem Token der vom Benutzer zugewiesenen verwalteten Identität und dem Dienstkontotoken des Kubernetes-Clusters ein.
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
Rufen Sie die Client-ID der verwalteten Identität ab, und speichern Sie sie in einer Umgebungsvariable.
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Erstellen eines Kubernetes-Dienstkontos
Erstellen Sie ein Kubernetes-Dienstkonto, und kommentieren Sie es mit der Client-ID der verwalteten Identität, die Sie im vorherigen Schritt erstellt haben. Nachdem Sie die Vertrauensstellung zwischen den beiden hergestellt haben, werden die signierten Token, die dem Kubernetes-Dienstkonto zugeordnet sind, für ein Microsoft Entra ID-Token ausgetauscht.
Wenden Sie den folgenden YAML-Codeausschnitt an, um ein Dienstkonto mit der hinzugefügten Workloadidentitätsanmerkung zu erstellen.
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}"
name: "${SERVICE_ACCOUNT_NAME}"
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
Erstellen von Anmeldeinformationen für eine Verbundidentität
Verwenden Sie den az identity federated-credential create-Befehl, um die Verbundidentitäts-Anmeldeinformationen zwischen der verwalteten Identität, dem Aussteller des Servicekontos und dem Subjekt zu erstellen. Dieser Schritt stellt die Vertrauensbeziehung zwischen dem Kubernetes Cluster und Microsoft Entra für den Austausch von Token her. Weitere Informationen zu Anmeldeinformationen für eine Verbundidentität in Microsoft Entra finden Sie unter Übersicht über die Anmeldeinformationen für Verbundidentitäten in Microsoft Entra ID.
az identity federated-credential create \
--name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \
--identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--issuer "${OIDC_ISSUER}" \
--subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \
--audience api://AzureADTokenExchange
Hinweis
Nachdem Sie die Verbundidentitätsanmeldeinformationen hinzugefügt haben, dauert es einige Sekunden, bis sie weitergegeben werden. Wenn Sie eine Tokenanforderung unmittelbar nach dem Hinzufügen der Verbundidentitätsanmeldeinformationen vornehmen, schlägt die Anforderung möglicherweise fehl, bis der Cache aktualisiert wird. Um dieses Problem zu vermeiden, fügen Sie in Ihren Skripten eine leichte Verzögerung ein, nachdem Sie die Anmeldeinformationen für die Verbundidentität hinzugefügt haben.
Konfigurieren Sie Annotationen für Dienstkonten und Pod-Bezeichnungen
Für die Konfiguration der Workload-Identität auf der Grundlage der Anwendungsanforderungen stehen die folgenden Annotationen für Dienstkonten und Pods zur Verfügung. Die im folgenden Abschnitt angegebene Pod-Bezeichnung ist obligatorisch, wenn Sie --enable-workload-identity auf true setzen.
Dienstkontoanmerkungen
Alle Annotationen zum Dienstkonto sind optional. Wenn Sie keine Anmerkung angeben, wird der Standardwert verwendet.
| Anmerkung | BESCHREIBUNG | Standard |
|---|---|---|
azure.workload.identity/client-id |
Microsoft Entra Anwendungsclient-ID für die Verwendung mit dem Pod. | |
azure.workload.identity/tenant-id |
Azure-Mandanten-ID, unter der die Microsoft Entra-Anwendung registriert ist. |
AZURE_TENANT_ID Umgebungsvariable, die aus der azure-wi-webhook-config ConfigMap extrahiert wurde. |
azure.workload.identity/service-account-token-expiration |
expirationSeconds Feld für das Token des geplanten Dienstkontos. Konfigurieren Sie dieses Feld, um Ausfallzeiten aufgrund von Fehlern bei der Aktualisierung des Tokens für das Dienstkonto zu vermeiden. Ablaufdatum des Kubernetes-Dienstkontotokens korreliert nicht mit Microsoft Entra-Token. Microsoft Entra Token laufen 24 Stunden nach ihrer Ausgabe ab. |
3600 (unterstützter Bereich: 3600-86400) |
Podbezeichnungen
| Etikett | BESCHREIBUNG | Empfohlener Wert | Erforderlich |
|---|---|---|---|
azure.workload.identity/use |
Erforderlich in der Pod-Vorlagenspezifikation. Wenn Sie --enable-workload-identity auf true festlegen, fügt der mutierende Aufnahme-Webhook die Azure-spezifischen Umgebungsvariablen und das projizierte Dienstkonto-Token-Volume nur zu Pods mit diesem Label hinzu. |
true |
Ja |
Podanmerkungen
Alle Pod Annotationen sind optional. Wenn Sie keine Anmerkung angeben, wird der Standardwert verwendet.
| Anmerkung | BESCHREIBUNG | Standard |
|---|---|---|
azure.workload.identity/service-account-token-expiration |
expirationSeconds Feld für das Token des geplanten Dienstkontos. Konfigurieren Sie dieses Feld, um Ausfallzeiten aufgrund von Fehlern bei der Aktualisierung des Tokens für das Dienstkonto zu vermeiden. Ablaufdatum des Kubernetes-Dienstkontotokens korreliert nicht mit Microsoft Entra-Token. Microsoft Entra Token laufen 24 Stunden nach ihrer Ausgabe ab. |
3600 (unterstützter Bereich: 3600-86400) |
azure.workload.identity/skip-containers |
Stellt eine durch Semikolons getrennte Liste von Containern dar, um das Hinzufügen eines projizierten Dienstkonto-Token-Volumens zu vermeiden. Beispiel: container1;container2. |
Standardmäßig wird das projizierte Dienstkontotokenvolume allen Containern hinzugefügt, wenn Sie den Pod mit azure.workload.identity/use: truebeschriften. |
Konfigurieren Sie die Workload-Identitätseinstellungen auf dem Kubernetes-Cluster
Der API-Server auf dem Kubernetes Cluster muss so konfiguriert werden, dass er Token für Dienstkonten ausgibt, die die öffentlich zugängliche URL des OIDC-Ausstellers enthalten (damit Entra weiß, wo die öffentlichen Schlüssel zur Validierung des Tokens zu finden sind).
Führen Sie die folgenden Schritte aus, um die Workload-Identitätseinstellungen für die verschiedenen Kubernetes-Verteilungen zu konfigurieren.
K3s-Cluster
Erstellen Sie ihre k3s-Konfigurationsdatei.
Bearbeiten Sie
/etc/rancher/k3s/config.yaml, um diese Einstellungen hinzuzufügen:kube-apiserver-arg: - "service-account-issuer=${OIDC_ISSUER}" - "service-account-max-token-expiration=24h"Speichern Sie die config.yaml.
Starten Sie den k3s-API-Server neu, indem Sie folgendes ausführen
systemctl restart k3s.Wechseln Sie die Schlüssel des Dienstkontos häufig. Weitere Informationen finden Sie unter Signierschlüssel für Servicekonten in K3s-Clustern rotieren.
Red Hat OpenShift-Cluster
Bearbeiten Sie die Authentifizierungskonfiguration für den Cluster:
Öffnen Sie die Authentifizierungskonfiguration für den Cluster:
kubectl edit authentications clusterSuchen Sie den Abschnitt für den Ausstellerwert, und aktualisieren Sie ihn.
Speichern Sie die Datei, und beenden Sie den Editor.
Starten Sie die relevanten Bereitstellungen in den erforderlichen Namespaces neu:
kubectl rollout restart deployment -n azure-arc kubectl rollout restart deployment -n arc-workload-identityAlternativ können Sie Änderungen über einen Patchbefehl anwenden, um den Ausstellerwert ohne manuelle Bearbeitung zu aktualisieren:
kubectl patch authentication cluster \ --type merge \ -p '{"spec":{"serviceAccountIssuer":"<NEW_ISSUER_VALUE>"}}' \ --kubeconfig /etc/kubernetes/admin.confBestätigen Sie Ihre Änderungen:
Überprüfen Sie den Ausstellerwert:
kubectl get authentications clusterÜberprüfen Sie den Status der neu gestarteten Bereitstellungen:
kubectl get pods -n azure-arc kubectl get pods -n arc-workload-identity
VMware Tanzu TKGm-Cluster
Verbinden Sie Ihren Cluster mit Azure Arc mit aktivierter Workloadidentität:
- Aktivieren Sie die Workload-Identität während des Arc-Verbindungsvorgangs.
- Rufen Sie nach der Verbindung die OIDC-Aussteller-URL ab.
Workload-Cluster-Konfiguration bearbeiten
Wechseln des Kontexts zum Verwaltungscluster:
kubectl config use-context mgmt-cluster-admin@mgmt-clusterCluster anzeigen
kubectl get clusterBearbeiten sie die Zielclusterkonfiguration:
- Suchen Sie nach
apiServerExtraArgs. - Wenn der Wert vorhanden ist, aktualisieren Sie ihn so, dass er die Aussteller-URL enthält.
- Wenn sie nicht vorhanden ist, fügen Sie sie unter
spec:topology:variableswie gezeigt hinzu.
name: apiServerExtraArgs value: - 'service-account-issuer=<OIDC_ISSUER_URL>'- Suchen Sie nach
Wechseln des Kontexts zurück zum Workload-Cluster:
kubectl config use-context <WORKLOAD_CLUSTER_CONTEXT>Dienstkonto und Testtoken erstellen:
Erstellen Sie ein Token für das Dienstkonto:
kubectl create token <SERVICE_ACCOUNT_NAME> -n <NAMESPACE>Stellen Sie sicher, dass der Tokenherausgeber der erwarteten OIDC-URL entspricht.
Starten Sie die Bereitstellung neu, um Ihre Änderungen anzuwenden:
kubectl rollout restart deployment -n azure-arc
Drehen des Dienstkontosignaturschlüssels auf K3s-Clustern
Für K3s-Cluster, die Sie in Azure Arc integrieren, wobei der Arbeitslast-Identitätsverbund aktiviert ist, ist die Rotation des Emittentenschlüssels für das Dienstkonto ein wichtiger Sicherheitsvorgang. Schlüsselrotation ist für die Sicherheitshygiene erforderlich und kann als Teil der Vorfallbehebung notwendig sein.
Der Emittentschlüssel des Dienstkontos (service.key) ist ein privater RSA-Schlüssel, der zum Signieren von Dienstkontotoken verwendet wird. Wenn Sie den Schlüssel drehen, behalten Sie den alten Schlüssel in der Datei bei, damit vorhandene Token gültig bleiben. Beide Schlüssel sollten koexistieren, bis alle vorhandenen Token ablaufen oder aktualisiert werden (mindestens 24 Stunden).
Als bewährte Methode sollten Sie die Emittentenschlüssel des Dienstkontos mindestens einmal alle drei Monate austauschen.
Voraussetzungen
Um den Service-Account-Ausstellerschlüssel in einem K3s-Cluster zu wechseln, stellen Sie sicher, dass Sie über die folgenden Voraussetzungen verfügen:
- K3s-Cluster in Azure Arc integriert mit aktivierter Workload-Identitätsföderation.
-
sudoStammzugriff auf den K3s-Serverknoten - OpenSSL 3 auf dem Knoten installiert
- Vertrautheit mit der K3s-Zertifikat-CLI
Generieren eines neuen Schlüssels und Ausführen der Rotation
Führen Sie die folgenden Befehle auf dem K3s-Serverknoten aus, um einen neuen Schlüssel zu generieren und ihn für die Rotation vorzubereiten.
# Create a temporary directory for staging
mkdir -p /opt/k3s/server/tls
# Check OpenSSL version (OpenSSL 3.x requires -traditional flag)
openssl version | grep -qF 'OpenSSL 3' && OPENSSL_GENRSA_FLAGS=-traditional
# Generate a new RSA key
openssl genrsa ${OPENSSL_GENRSA_FLAGS:-} -out /opt/k3s/server/tls/service.key 2048
# Append the existing (old) key to preserve validity of current tokens
cat /var/lib/rancher/k3s/server/tls/service.key >> /opt/k3s/server/tls/service.key
# Load the updated key into the K3s datastore
k3s certificate rotate-ca --path=/opt/k3s/server
# Restart K3s to apply
sudo systemctl restart k3s
Von Bedeutung
Überschreiben Sie die aktuell verwendeten Daten nicht direkt in /var/lib/rancher/k3s/server/tls. Stellen Sie immer aktualisierte Dateien in einem separaten Verzeichnis bereit, wie zum Beispiel /opt/k3s/server/tls.
Nach dem Neustart:
- Neue Token werden mithilfe des neuen Schlüssels geprägt.
- Vorhandene Token bleiben gültig, da sich der alte Schlüssel noch in der Datei befindet.
Weitere Informationen zur Rotation des Emittentenschlüssels für das Dienstkonto finden Sie in der K3s-Dokumentation unter Rotation des Dienstkonto-Emittentenschlüssels.
Entfernen des alten Emittentenschlüssels des Dienstkontos
Von Bedeutung
Um sicherzustellen, dass alle vorhandenen Token, die mit dem alten Emittentenschlüssel des Dienstkontos signiert sind, entweder ablaufen oder erneuert werden, warten Sie mindestens 24 Stunden, bevor Sie den alten Schlüssel entfernen.
Führen Sie die folgenden Befehle auf dem K3s-Serverknoten aus, um den alten Schlüssel sicher zu entfernen:
# Backup the current key file
sudo cp /var/lib/rancher/k3s/server/tls/service.key /var/lib/rancher/k3s/server/tls/service.key.bak.$(date +%s)
# Split the keys into individual files
csplit -f /tmp/service-key- /var/lib/rancher/k3s/server/tls/service.key '/BEGIN RSA PRIVATE KEY/' '{*}'
# Copy only the new key (first key in the file) to staging
sudo cp /tmp/service-key-01 /opt/k3s/server/tls/service.key
# Load the updated key into the datastore
k3s certificate rotate-ca --path=/opt/k3s/server
# Restart K3s
sudo systemctl restart k3s
Deaktivieren der Workloadidentität
Führen Sie den folgenden Befehl aus, um das Workload-Identitätsfeature in einem Azure Arc-aktivierten Kubernetes-Cluster zu deaktivieren:
az connectedk8s update \
--resource-group "${RESOURCE_GROUP}" \
--name "${CLUSTER_NAME}" \
--disable-workload-identity
Nächste Schritte
- Entdecken Sie ein Beispiel für die Konfiguration einer Anwendung zur Verwendung der Workload-Identität.
- Schützen Sie Ihren Cluster auf andere Weise, indem Sie den Anweisungen im Security Book für Azure Arc-fähige Kubernetes folgen.