Tutorial: Verwenden einer Workloadidentität mit einer Anwendung in Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) ist ein verwalteter Kubernetes-Dienst, mit dem Sie schnell Kubernetes-Cluster bereitstellen und verwalten können. In diesem Tutorial:
- Stellen Sie einen AKS-Cluster über die Azure CLI mit OpenID Connect-(OIDC-)Aussteller und verwalteter Identität bereit.
- Erstellen einer Azure Key Vault-Instanz und eines Geheimnisses
- Erstellen Sie eine Microsoft Entra-Workload-ID und ein Kubernetes-Dienstkonto.
- Konfigurieren der verwalteten Identität für den Tokenverbund
- Bereitstellen der Workload und Überprüfen der Authentifizierung mit der Workloadidentität
Voraussetzungen
- In diesem Tutorial werden grundlegende Kenntnisse von Kubernetes-Konzepten vorausgesetzt. Weitere Informationen finden Sie unter Grundlegende Kubernetes-Konzepte für Azure Kubernetes Service (AKS).
- Wenn Sie mit der Microsoft Entra-Workload-ID noch nicht vertraut sind, lesen Sie die Übersicht über Microsoft Entra-Workload-ID.
- Beim Erstellen eines AKS-Clusters wird automatisch eine zweite Ressourcengruppe erstellt, um die AKS-Ressourcen zu speichern. Weitere Informationen finden Sie unter Warum werden zwei Ressourcengruppen mit AKS erstellt?.
Voraussetzungen
- Sollten Sie über kein Azure-Abonnement verfügen, können Sie zunächst ein kostenloses Azure-Konto erstellen.
- Für diesen Artikel ist mindestens Version 2.47.0 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.
- Die Identität, die Sie zum Erstellen Ihres Clusters verwenden, muss über die erforderlichen Mindestberechtigungen verfügen. Weitere Informationen zu Zugriff und Identität für AKS finden Sie unter Zugriffs- und Identitätsoptionen für Azure Kubernetes Service (AKS).
- Wenn Sie über mehrere Azure-Abonnements verfügen, wählen Sie mithilfe des Befehls az account set die ID des Abonnements aus, in dem die Ressourcen fakturiert werden sollen.
Erstellen einer Ressourcengruppe
Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden. Wenn Sie eine Ressourcengruppe erstellen, werden Sie zur Angabe eines Speicherorts aufgefordert. An diesem Speicherort werden die Metadaten Ihrer Ressourcengruppe gespeichert. Darüber hinaus werden dort die Ressourcen in Azure ausgeführt, wenn Sie während der Ressourcenerstellung keine andere Region angeben.
Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus.
Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.
az group create --name myResourceGroup --location eastus
Das folgende Ausgabebeispiel ähnelt der erfolgreichen Erstellung der Ressourcengruppe:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null }
Exportieren von Umgebungsvariablen
Um die Schritte zum Konfigurieren der erforderlichen Identitäten zu vereinfachen, werden in den folgenden Schritten Umgebungsvariablen zum Verweisen auf den Cluster definiert.
Führen Sie die folgenden Befehle aus, um diese Variablen zu erstellen. Ersetzen Sie die Standardwerte für
RESOURCE_GROUP
,LOCATION
,SERVICE_ACCOUNT_NAME
,SUBSCRIPTION
,USER_ASSIGNED_IDENTITY_NAME
undFEDERATED_IDENTITY_CREDENTIAL_NAME
.export RESOURCE_GROUP="myResourceGroup" export LOCATION="westcentralus" export SERVICE_ACCOUNT_NAMESPACE="default" export SERVICE_ACCOUNT_NAME="workload-identity-sa" export SUBSCRIPTION="$(az account show --query id --output tsv)" export USER_ASSIGNED_IDENTITY_NAME="myIdentity" export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity" export KEYVAULT_NAME="azwi-kv-tutorial" export KEYVAULT_SECRET_NAME="my-secret"
Erstellen eines AKS-Clusters
Erstellen Sie einen AKS-Cluster über den Befehl az aks create mit dem Parameter
--enable-oidc-issuer
, um den OIDC-Aussteller zu verwenden.az aks create --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben.
Rufen Sie die URL des OIDC-Ausstellers ab und speichern Sie sie mithilfe des folgenden Befehls in einer Umgebungsvariablen ab. Ersetzen Sie den Standardwert für das Argument
-n
(Name des Clusters).export AKS_OIDC_ISSUER="$(az aks show --name myAKSCluster --resource-group "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
Die Variable sollte die URL des Ausstellers enthalten, ähnlich wie im folgenden Beispiel:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/
Standardmäßig ist der Aussteller so eingestellt, dass er die Basis-URL
https://{region}.oic.prod-aks.azure.com
verwendet, wobei der Wert für{region}
dem Speicherort entspricht, an dem der AKS-Cluster eingesetzt wird.
Erstellen einer Azure Key Vault-Instanz und eines Geheimnisses
Erstellen Sie mithilfe des Befehls az keyvault create eine Azure Key Vault-Instanz in der Ressourcengruppe, die Sie in diesem Tutorial erstellt haben.
az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}" --enable-rbac-authorization false
In der Ausgabe dieses Befehls werden die Eigenschaften des neu erstellten Schlüsseltresors angezeigt. Beachten Sie die beiden folgenden Eigenschaften:
Name
: Der Tresorname, den Sie als Parameter--name
angegeben haben.vaultUri
: In dem Beispiel ist dieshttps://<your-unique-keyvault-name>.vault.azure.net/
. Anwendungen, die Ihren Tresor über die zugehörige REST-API nutzen, müssen diesen URI verwenden.
An diesem Punkt ist nur Ihr Azure-Konto zum Ausführen von Vorgängen für den neuen Tresor autorisiert.
Fügen Sie dem Tresor mit dem Befehl az keyvault secret set ein Geheimnis hinzu. Das Kennwort ist der Wert, den Sie für die Umgebungsvariable
KEYVAULT_SECRET_NAME
angegeben haben. Darin ist der Wert Hello! gespeichert.az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
Fügen Sie der Umgebungsvariablen
KEYVAULT_URL
mithilfe des Befehls az keyvault show die Key Vault-URL hinzu.export KEYVAULT_URL="$(az keyvault show --resource-group "${RESOURCE_GROUP}" --name ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
Erstellen einer verwalteten Identität und Erteilen von Berechtigungen zum Zugriff auf das Geheimnis
Legen Sie mit dem Befehl az account set ein bestimmtes Abonnement als aktuelles aktives Abonnement fest.
az account set --subscription "${SUBSCRIPTION}"
Erstellen Sie eine verwaltete Identität mit dem Befehl az identity create.
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
Legen Sie eine Zugriffsrichtlinie für die verwaltete Identität fest, um auf das Key Vault-Geheimnis zuzugreifen. Führen Sie dazu die folgenden Befehle aus.
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
Erstellen eines Kubernetes-Dienstkontos
Erstellen Sie mithilfe des Befehls az aks get-credentials ein Kubernetes-Dienstkonto und kommentieren Sie es mit der Client-ID der verwalteten Identität, die Sie im vorherigen Schritt erstellt haben. Ersetzen Sie den Standardwert für den Clusternamen und den Ressourcengruppennamen.
az aks get-credentials --name myAKSCluster --resource-group "${RESOURCE_GROUP}"
Kopieren Sie die folgende mehrzeilige Eingabe in Ihr Terminal, und führen Sie den Befehl zum Erstellen des Dienstkontos aus.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID} name: ${SERVICE_ACCOUNT_NAME} namespace: ${SERVICE_ACCOUNT_NAMESPACE} EOF
Die folgende Ausgabe ähnelt der erfolgreichen Erstellung der Identität:
Serviceaccount/workload-identity-sa created
Einrichten von Anmeldeinformationen für eine Verbundidentität
Erstellen Sie mit dem Befehl az identity federated-credential create die Verbundidentitätsberechtigung zwischen der verwalteten Identität, dem Aussteller des Servicekontos und dem Antragsteller.
az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
Hinweis
Es dauert einige Sekunden, bis die Verbundidentitäts-Anmeldeinformationen nach dem erstmaligen Hinzufügen weitergegeben werden. Wenn eine Tokenanforderung unmittelbar nach dem Hinzufügen der Verbundidentitäts-Anmeldeinformationen zur Verfügung steht, kann dies einige Minuten lang zu Fehlern führen, da der Cache im Verzeichnis noch mit alten Daten befüllt ist. Um dieses Problem zu vermeiden, können Sie eine kleine Verzögerung nach dem Hinzufügen der Verbundidentitäts-Anmeldeinformationen hinzufügen.
Bereitstellen der Workload
Stellen Sie mithilfe des folgende Befehls einen Pod bereit, der auf das im vorherigen Schritt erstellte Dienstkonto verweist.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: quick-start namespace: ${SERVICE_ACCOUNT_NAMESPACE} labels: azure.workload.identity/use: "true" spec: serviceAccountName: ${SERVICE_ACCOUNT_NAME} containers: - image: ghcr.io/azure/azure-workload-identity/msal-go name: oidc env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEYVAULT_SECRET_NAME} nodeSelector: kubernetes.io/os: linux EOF
Die folgende Ausgabe zeigt eine erfolgreiche Erstellung des Pods:
pod/quick-start created
Überprüfen Sie mit dem Befehl kubectl describe, ob mit dem Webhook alle Eigenschaften ordnungsgemäß eingefügt werden.
kubectl describe pod quick-start
Vergewissern Sie sich, dass der Pod mithilfe des Befehls kubectl logs ein Token abrufen und über die Key Vault auf das Geheimnis zugreifen kann.
kubectl logs quick-start
Die folgende Ausgabe zeigt einen erfolgreichen Zugriff des Tokens:
I1013 22:49:29.872708 1 main.go:30] "successfully got secret" secret="Hello!"
Bereinigen von Ressourcen
Möglicherweise möchten Sie diese Ressourcen beibehalten. Wenn Sie diese Ressourcen nicht mehr benötigen, verwenden Sie die folgenden Befehle, um sie zu löschen.
Löschen Sie den Pod mit dem Befehl
kubectl delete pod
.kubectl delete pod quick-start
Löschen Sie das Dienstkonto mit dem Befehl
kubectl delete sa
.kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
Löschen Sie die Azure-Ressourcengruppe und alle zugehörigen Ressourcen mithilfe des Befehls az group delete.
az group delete --name "${RESOURCE_GROUP}"
Nächste Schritte
In diesem Tutorial haben Sie einen Kubernetes-Cluster und dann eine einfache Containeranwendung bereitgestellt, um die Arbeit mit einer Microsoft Entra-Workload ID zu testen.
Dieses Tutorial dient nur zur Einführung. Anleitungen zum Erstellen vollständiger Lösungen mit AKS für die Produktion finden Sie unter AKS-Lösungsleitfaden.