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.
In diesem Artikel erfahren Sie, wie Sie einen Azure Kubernetes Service (AKS) Cluster mit Microsoft Entra Workload ID bereitstellen und konfigurieren. Die Schritte in diesem Artikel umfassen:
- Erstellen Sie einen neuen oder aktualisieren Sie einen vorhandenen AKS-Cluster mithilfe der Azure-CLI oder Terraform, wobei OpenID Connect (OIDC)-Aussteller und Microsoft Entra Workload ID aktiviert sind.
- Erstellen Sie eine Workload-Identität 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
- Gewähren Sie optional einem Pod im Cluster Zugriff auf Geheimnisse in einem Azure-Schlüsseltresor.
Voraussetzungen
- Wenn Sie kein Azure Konto haben, erstellen Sie ein free-Konto bevor Sie beginnen.
- Dieser Artikel erfordert Version 2.47.0 oder höher des Azure CLI. Wenn Sie Azure Cloud Shell verwenden, ist die neueste Version bereits installiert. Führen Sie
az --versionaus, um die Version zu ermitteln. Informationen zum Installieren oder Aktualisieren finden Sie unter Install Azure CLI. - Stellen Sie sicher, dass die Identität, die Sie zum Erstellen Ihres Clusters verwenden, über die erforderlichen Mindestberechtigungen verfügt. Weitere Informationen finden Sie unter Access und Identitätsoptionen für Azure Kubernetes Service (AKS).
- Stellen Sie sicher, dass Ihre Identität über die Berechtigung zum Erstellen von Rollenzuweisungen im Schlüsseltresorbereich verfügt, z. B. die Rollenbasierte Access Control Administratorrolle. Die Rollen "Mitwirkender" und "Key Vault Mitwirkender" können keine Rollenzuweisungen erstellen.
- Wenn Sie über mehrere Azure Abonnements verfügen, wählen Sie die entsprechende Abonnement-ID aus, in der die Ressourcen mit dem Befehl
az account setin Rechnung gestellt werden sollen.
- Terraform lokal installiert. Installationsanweisungen finden Sie unter Install Terraform.
- Die Umgebungsvariable
ARM_SUBSCRIPTION_IDwird auf die Abonnement-ID festgelegt, in der Sie die Ressourcen erstellen möchten. AzureRM 4.x erfordert die Abonnement-ID für den Plan und anwenden von Vorgängen.
Hinweis
Sie können den Dienstconnector verwenden, um einige Schritte automatisch zu konfigurieren. Weitere Informationen finden Sie unter Tutorial: Herstellen einer Verbindung mit Azure Speicherkonto in Azure Kubernetes Service (AKS) mit Service Connector mithilfe von Microsoft Entra Workload ID.
Erstellen der Terraform-Konfigurationsdatei
Die main.tf Datei enthält Definitionen für den AKS-Cluster, verwaltete Identität, Verbundidentitätsanmeldeinformationen, Azure Key Vault und Kubernetes-Ressourcen, die zum Konfigurieren und Überprüfen von Microsoft Entra Workload ID verwendet werden.
Erstellen Sie eine Datei mit dem Namen
main.tf, und fügen Sie den folgenden Code hinzu, um die Terraform-Version zu definieren und den Azure Anbieter anzugeben:terraform { required_version = ">= 1.5.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.30" } random = { source = "hashicorp/random" version = "~> 3.6" } } } provider "azurerm" { features {} } data "azurerm_client_config" "current" {}Fügen Sie den folgenden Code zu
main.tfhinzu, um wiederverwendbare Variablen zu definieren und eindeutige Namen für alle Ressourcen zu generieren.resource "random_string" "suffix" { length = 6 upper = false special = false numeric = true } locals { suffix = random_string.suffix.result resource_group_name = "rg-aks-wi-${local.suffix}" cluster_name = "akswi${local.suffix}" managed_identity_name = "uami-wi-${local.suffix}" federated_credential_name = "fic-wi-${local.suffix}" key_vault_name = lower(substr("kvwi${local.suffix}", 0, 24)) secret_name = "secret-${local.suffix}" service_account_name = "workload-sa-${local.suffix}" service_account_namespace = "default" workload_identity_subject = "system:serviceaccount:${local.service_account_namespace}:${local.service_account_name}" }
Erstellen einer Ressourcengruppe
Erstellen Sie eine Ressourcengruppe mit dem Befehl az group create.
export RANDOM_ID="$(openssl rand -hex 3)"
export RESOURCE_GROUP="myResourceGroup$RANDOM_ID"
export LOCATION="<your-preferred-region>"
az group create --name "${RESOURCE_GROUP}" --location "${LOCATION}"
Fügen Sie dem main.tf den folgenden Code hinzu, um eine Azure Ressourcengruppe zu erstellen. Aktualisieren Sie den Wert location entsprechend Ihrer bevorzugten Azure Region.
resource "azurerm_resource_group" "this" {
name = local.resource_group_name
location = "eastus"
}
Aktivieren Sie den OIDC-Aussteller und die Microsoft Entra Workload-ID auf einem AKS-Cluster
Sie können den OIDC-Aussteller und Microsoft Entra Workload ID für einen neuen oder vorhandenen AKS-Cluster aktivieren.
Erstellen Sie einen AKS-Cluster mithilfe des Befehls az aks create mit dem Parameter --enable-oidc-issuer, um den OIDC-Aussteller und den parameter --enable-workload-identity zu aktivieren, um Microsoft Entra Workload ID zu aktivieren. Im folgenden Beispiel wird ein Cluster mit einem einzelnen Knoten erstellt:
export CLUSTER_NAME="myAKSCluster$RANDOM_ID"
az aks create \
--resource-group "${RESOURCE_GROUP}" \
--name "${CLUSTER_NAME}" \
--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.
Fügen Sie den folgenden Code zu main.tf hinzu, um einen AKS-Cluster mit aktiviertem OIDC-Aussteller und Microsoft Entra Workload ID zu erstellen:
resource "azurerm_kubernetes_cluster" "this" {
name = local.cluster_name
location = azurerm_resource_group.this.location
resource_group_name = azurerm_resource_group.this.name
dns_prefix = local.cluster_name
oidc_issuer_enabled = true
workload_identity_enabled = true
role_based_access_control_enabled = true
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_B4ms"
}
identity {
type = "SystemAssigned"
}
}
Abrufen der OIDC-Zertifikataussteller-URL
Rufen Sie die OIDC-Aussteller-URL mithilfe des az aks show Befehls ab, und speichern Sie sie in einer Umgebungsvariable.
export AKS_OIDC_ISSUER="$(az aks show --name "${CLUSTER_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
Die Umgebungsvariable sollte die URL des Zertifikatausstellers enthalten, ähnlich wie im folgenden Beispiel:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/
Standardmäßig ist der Zertifikataussteller auf die Verwendung der Basis-URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}festgelegt, wobei der Wert für {region} mit dem Speicherort übereinstimmt, an dem der AKS-Cluster bereitgestellt wird. Der Wert {uuid} stellt den OIDC-Schlüssel dar, bei dem es sich um eine zufällig generierte und unveränderliche GUID für jeden Cluster handelt.
Fügen Sie den folgenden Code zu main.tf hinzu, um die OIDC-Aussteller-URL abzurufen.
output "oidc_issuer_url" {
value = azurerm_kubernetes_cluster.this.oidc_issuer_url
}
Erstellen einer verwalteten Identität
Rufen Sie Ihre Abonnement-ID ab, und speichern Sie sie mithilfe des
az account showBefehls in einer Umgebungsvariable.export SUBSCRIPTION="$(az account show --query id --output tsv)"Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität mit dem Befehl
az identity create.export USER_ASSIGNED_IDENTITY_NAME="myIdentity$RANDOM_ID" az identity create \ --name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --location "${LOCATION}" \ --subscription "${SUBSCRIPTION}"Das folgende Ausgabebeispiel zeigt die erfolgreiche Erstellung einer verwalteten Identität:
{ "clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myResourceGroupxxxxxx/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentityxxxxxx", "location": "eastus", "name": "myIdentityxxxxxx", "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "resourceGroup": "myResourceGroupxxxxxx", "systemData": null, "tags": {}, "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "type": "Microsoft.ManagedIdentity/userAssignedIdentities" }Rufen Sie die Client-ID der verwalteten Identität ab, und speichern Sie sie mithilfe des
az identity showBefehls in einer Umgebungsvariable.export USER_ASSIGNED_CLIENT_ID="$(az identity show \ --resource-group "${RESOURCE_GROUP}" \ --name "${USER_ASSIGNED_IDENTITY_NAME}" \ --query 'clientId' \ --output tsv)"
Fügen Sie den folgenden Code zu main.tf hinzu, um eine verwaltete Identität zu erstellen.
resource "azurerm_user_assigned_identity" "this" {
name = local.managed_identity_name
location = azurerm_resource_group.this.location
resource_group_name = azurerm_resource_group.this.name
}
Erstellen eines Kubernetes-Dienstkontos
Stellen Sie mithilfe des Befehls
az aks get-credentialseine Verbindung mit Ihrem AKS-Cluster her.az aks get-credentials --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}"Erstellen Sie ein Kubernetes-Dienstkonto, und kommentieren Sie es mit der Client-ID der verwalteten Identität, indem Sie das folgende Manifest mithilfe des
kubectl applyBefehls anwenden.export SERVICE_ACCOUNT_NAME="workload-identity-sa$RANDOM_ID" export SERVICE_ACCOUNT_NAMESPACE="default" 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}" EOFDie folgende Ausgabe zeigt die erfolgreiche Erstellung der Workloadidentität:
serviceaccount/workload-identity-sa created
Fügen Sie den folgenden Code zum
main.tfKonfigurieren des Kubernetes-Zugriffs hinzu, um die Erstellung von Kubernetes-Ressourcen zu ermöglichen:data "azurerm_kubernetes_cluster" "this" { name = azurerm_kubernetes_cluster.this.name resource_group_name = azurerm_resource_group.this.name } provider "kubernetes" { host = data.azurerm_kubernetes_cluster.this.kube_config[0].host client_certificate = base64decode(data.azurerm_kubernetes_cluster.this.kube_config[0].client_certificate) client_key = base64decode(data.azurerm_kubernetes_cluster.this.kube_config[0].client_key) cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.this.kube_config[0].cluster_ca_certificate) }Fügen Sie den folgenden Code zu
main.tfhinzu, um ein Kubernetes-Dienstkonto zu erstellen und mit der Client-ID der verwalteten Identität zu annotieren.resource "kubernetes_service_account" "this" { metadata { name = local.service_account_name namespace = local.service_account_namespace annotations = { "azure.workload.identity/client-id" = azurerm_user_assigned_identity.this.client_id } } }
Erstellen von Anmeldeinformationen für eine Verbundidentität
Erstellen Sie mithilfe des az identity federated-credential create-Befehls federierte Identitätsnachweise zwischen der verwalteten Identität, dem Herausgeber des Dienstkontos und dem Subjekt.
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity$RANDOM_ID"
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}" \
--audience api://AzureADTokenExchange
Hinweis
Es dauert einige Sekunden, bis die Anmeldeinformationen für die Verbundidentität nach dem Hinzufügen weitergegeben werden. Wenn eine Tokenanforderung unmittelbar nach dem Hinzufügen der Anmeldeinformationen für die Verbundidentität erfolgt, schlägt die Anforderung möglicherweise fehl, bis der Cache aktualisiert wird. Um dieses Problem zu vermeiden, können Sie eine kleine Verzögerung nach dem Hinzufügen der Verbundidentitäts-Anmeldeinformationen hinzufügen.
Warning
Die oben aufgeführte Zielgruppe ist die Standard- und empfohlene Zielgruppe für Microsoft Entra Workload Identity. Dieser Wert ist global und konsistent in allen Azure Clouds, das Ändern des Benutzergruppenwerts kann die Kompatibilität mit vorhandenen Konfigurationen unterbrechen und wird nur empfohlen, wenn explizit erforderlich.
Fügen Sie den folgenden Code zu main.tf hinzu, um eine Verbundidentität zwischen der verwalteten Identität, dem Dienstkontoaussteller und dem Subjekt zu erstellen.
resource "azurerm_federated_identity_credential" "this" {
name = local.federated_credential_name
resource_group_name = azurerm_resource_group.this.name
parent_id = azurerm_user_assigned_identity.this.id
issuer = azurerm_kubernetes_cluster.this.oidc_issuer_url
subject = local.workload_identity_subject
audience = ["api://AzureADTokenExchange"]
}
Warning
Die oben aufgeführte Zielgruppe ist die Standard- und empfohlene Zielgruppe für Microsoft Entra Workload Identity. Dieser Wert ist global und konsistent in allen Azure Clouds, das Ändern des Benutzergruppenwerts kann die Kompatibilität mit vorhandenen Konfigurationen unterbrechen und wird nur empfohlen, wenn explizit erforderlich.
Weitere Informationen zu Verbundidentitätsanmeldeinformationen in Microsoft Entra finden Sie unter Overview der Verbundidentitätsanmeldeinformationen in Microsoft Entra ID.
Erstellen einer Azure Key Vault mit Azure RBAC-Autorisierung
Die folgenden Schritte verwenden das berechtigungsmodell für die rollenbasierte Zugriffssteuerung (Azure RBAC) Azure. Hintergrundinformationen finden Sie unter Erteilen der Berechtigung für Anwendungen für den Zugriff auf einen Azure Key Vault mithilfe Azure RBAC.
Erstellen Sie einen Schlüsseltresor mit aktiviertem Bereinigungsschutz und aktivierter Azure RBAC-Autorisierung mithilfe des Befehls
az keyvault create. Sie können auch einen vorhandenen Schlüsseltresor verwenden, wenn er sowohl für den Löschschutz als auch für die Azure RBAC-Autorisierung konfiguriert ist.export KEYVAULT_NAME="kv-workload-id$RANDOM_ID" az keyvault create \ --name "${KEYVAULT_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --location "${LOCATION}" \ --enable-purge-protection \ --enable-rbac-authorizationRufen Sie die ID der Schlüsseltresorressource ab und speichern Sie sie mithilfe des
az keyvault showBefehls in einer Umgebungsvariable.export KEYVAULT_RESOURCE_ID=$(az keyvault show --resource-group "${RESOURCE_GROUP}" \ --name "${KEYVAULT_NAME}" \ --query id \ --output tsv)
Fügen Sie den folgenden Code hinzu, um einen Schlüsseltresor mit Löschschutz und aktivierter Azure RBAC-Autorisierung zu main.tf erstellen:
resource "azurerm_key_vault" "this" {
name = local.key_vault_name
location = azurerm_resource_group.this.location
resource_group_name = azurerm_resource_group.this.name
tenant_id = data.azurerm_client_config.current.tenant_id
sku_name = "standard"
enable_rbac_authorization = true
purge_protection_enabled = true
}
Zuweisen von RBAC-Berechtigungen für Azure Key Vault Verwaltung
Rufen Sie die Aufruferobjekt-ID ab, und speichern Sie sie mithilfe des
az ad signed-in-user showBefehls in einer Umgebungsvariable.export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)Weisen Sie sich selbst die rolle Azure RBAC Key Vault Secrets Officer zu, damit Sie mithilfe des Befehls
az role assignment createeinen geheimen Schlüssel im neuen key vault erstellen können.az role assignment create --assignee "${CALLER_OBJECT_ID}" \ --role "Key Vault Secrets Officer" \ --scope "${KEYVAULT_RESOURCE_ID}"Wichtig
Azure Rollenzuweisungen können bis zu 10 Minuten dauern, bis sie verteilt werden. Wenn das Erstellen des geheimen Schlüssels im nächsten Abschnitt einen
403Fehler zurückgibt, warten Sie, bis die Rollenzuweisung verteilt wird, und wiederholen Sie dann den Befehl. Weitere Informationen finden Sie unter Troubleshoot Azure RBAC.
Fügen Sie den folgenden Code zu main.tf hinzu, um sich selbst die Azure RBAC-Rolle Key Vault Secrets Officer zuzuweisen, damit Sie ein Secret im neuen Key Vault erstellen und der verwalteten Identität, die vom Benutzer zugewiesen wird, die Rolle Key Vault Secrets User zuweisen können.
resource "azurerm_role_assignment" "user" {
scope = azurerm_key_vault.this.id
role_definition_name = "Key Vault Secrets Officer"
principal_id = data.azurerm_client_config.current.object_id
}
resource "azurerm_role_assignment" "identity" {
scope = azurerm_key_vault.this.id
role_definition_name = "Key Vault Secrets User"
principal_id = azurerm_user_assigned_identity.this.principal_id
}
Erstellen und Konfigurieren des geheimen Zugriffs
Erstellen Sie ein Geheimnis im Schlüsseltresor mithilfe des Befehls
az keyvault secret set.Erstellen Sie einen geheimen Schlüssel, dessen Name in der
KEYVAULT_SECRET_NAMEVariablen gespeichert ist, und legen Sie dessen WertHello!auf den von Ihnen erstellten Schlüsseltresor fest.export KEYVAULT_SECRET_NAME="my-secret$RANDOM_ID" az keyvault secret set \ --vault-name "${KEYVAULT_NAME}" \ --name "${KEYVAULT_SECRET_NAME}" \ --value 'Hello!'Rufen Sie die Prinzipal-ID der vom Benutzer zugewiesenen verwalteten Identität ab, und speichern Sie sie mithilfe des
az identity showBefehls in einer Umgebungsvariable.export IDENTITY_PRINCIPAL_ID=$(az identity show \ --name "${USER_ASSIGNED_IDENTITY_NAME}" \ --resource-group "${RESOURCE_GROUP}" \ --query principalId \ --output tsv)Weisen Sie die Rolle Key Vault Secrets User der vom Benutzer zugewiesenen verwalteten Identität mithilfe des Befehls
az role assignment createzu. Dieser Schritt gibt der verwalteten Identität die Berechtigung, Secrets aus dem Key Vault zu lesen.az role assignment create \ --assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \ --role "Key Vault Secrets User" \ --scope "${KEYVAULT_RESOURCE_ID}" \ --assignee-principal-type ServicePrincipalErstellen Sie eine Umgebungsvariable für die Schlüsseltresor-URL mithilfe des
az keyvault showBefehls.export KEYVAULT_URL="$(az keyvault show \ --resource-group "${RESOURCE_GROUP}" \ --name ${KEYVAULT_NAME} \ --query properties.vaultUri \ --output tsv)"
Fügen Sie den folgenden Code zu main.tf hinzu, um ein Geheimnis im Schlüsseltresor zu erstellen.
resource "azurerm_key_vault_secret" "this" {
name = local.secret_name
value = "Hello from Key Vault"
key_vault_id = azurerm_key_vault.this.id
depends_on = [azurerm_role_assignment.user]
}
Wichtig
Azure Rollenzuweisungen können bis zu 10 Minuten dauern, bis sie verteilt werden. Wenn terraform apply beim Erstellen des geheimen Schlüssels ein 403 Fehler zurückgegeben wird, warten Sie, bis die Rollenzuweisung verteilt wird, und führen Sie dann den Befehl erneut aus. Weitere Informationen finden Sie unter Troubleshoot Azure RBAC.
Bereitstellen eines Überprüfungs pods und Testen des Zugriffs (Azure CLI)
Stellen Sie einen Pod bereit, um zu überprüfen, ob die Workload-Identität auf das Secret im Key Vault zugreifen kann. Im folgenden Beispiel wird das bild
ghcr.io/azure/azure-workload-identity/msal-goverwendet, das eine Beispielanwendung enthält, die einen geheimen Schlüssel aus Azure Key Vault mithilfe von Microsoft Entra Workload ID abruft:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: sample-workload-identity-key-vault 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 EOFWarten Sie mit dem Befehl
Readydarauf, dass sich der Pod imkubectl wait-Zustand befindet.kubectl wait --namespace ${SERVICE_ACCOUNT_NAMESPACE} --for=condition=Ready pod/sample-workload-identity-key-vault --timeout=120sÜberprüfen Sie, ob die
SECRET_NAMEUmgebungsvariable mithilfe deskubectl describeBefehls im Pod festgelegt ist.kubectl describe pod sample-workload-identity-key-vault | grep "SECRET_NAME:"Wenn der Vorgang erfolgreich ist, sollte die Ausgabe dem folgenden Beispiel ähneln:
SECRET_NAME: ${KEYVAULT_SECRET_NAME}Stellen Sie sicher, dass Pods ein Token abrufen und mithilfe des
kubectl logsBefehls auf die Ressource zugreifen können.kubectl logs sample-workload-identity-key-vaultWenn der Vorgang erfolgreich ist, sollte die Ausgabe dem folgenden Beispiel ähneln:
I0114 10:35:09.795900 1 main.go:63] "successfully got secret" secret="Hello!"Wichtig
Azure RBAC-Rollenzuweisungen können bis zu 10 Minuten dauern, bis sie verteilt werden. Wenn der Pod nicht auf das Geheimnis zugreifen kann, müssen Sie möglicherweise warten, bis die Rollenzuweisung weitergegeben ist. Weitere Informationen finden Sie unter Troubleshoot Azure RBAC.
Deaktivieren von Microsoft Entra Workload ID in einem AKS-Cluster
Um Microsoft Entra Workload ID auf dem AKS-Cluster zu deaktivieren, in dem Sie ihn aktiviert und konfiguriert haben, verwenden Sie den az aks update Befehl mit dem --disable-workload-identity Parameter.
az aks update \
--resource-group "${RESOURCE_GROUP}" \
--name "${CLUSTER_NAME}" \
--disable-workload-identity
Bereitstellen eines Überprüfungs pods (Terraform)
Fügen Sie den folgenden Code zu main.tf hinzu, um einen Überprüfungspod bereitzustellen, der die Workloadidentität verwendet, um auf das Geheimnis im Schlüsseltresor zuzugreifen.
resource "kubernetes_pod" "test" {
metadata {
name = "workload-identity-test"
namespace = local.service_account_namespace
labels = {
"azure.workload.identity/use" = "true"
}
}
spec {
service_account_name = kubernetes_service_account.this.metadata[0].name
container {
name = "test"
image = "ghcr.io/azure/azure-workload-identity/msal-go"
env {
name = "KEYVAULT_URL"
value = azurerm_key_vault.this.vault_uri
}
env {
name = "SECRET_NAME"
value = azurerm_key_vault_secret.this.name
}
}
}
depends_on = [
azurerm_federated_identity_credential.this,
azurerm_role_assignment.identity,
]
}
Initialisieren Sie Terraform
Initialisieren Sie Terraform im Verzeichnis, das Ihre main.tf Datei enthält, mithilfe des terraform init Befehls. Dieser Befehl lädt den Azure Anbieter herunter, der zum Verwalten von Azure Ressourcen mit Terraform erforderlich ist.
terraform init
Terraform-Ausführungsplan erstellen
Erstellen Sie mit dem Befehl „terraform plan“ einen Terraform-Ausführungsplan. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellen oder ändern wird.
terraform plan
Terraform-Konfiguration anwenden
Wenden Sie nach der Überprüfung und Bestätigung des Ausführungsplans die Terraform-Konfiguration mit dem terraform apply Befehl an. Dieser Befehl erstellt oder ändert die ressourcen, die in Ihrer main.tf-Datei in Ihrem Azure-Abonnement definiert sind.
terraform apply
Überprüfen Sie die Bereitstellung
Stellen Sie mithilfe des Befehls
az aks get-credentialseine Verbindung mit Ihrem AKS-Cluster her.az aks get-credentials --name <cluster-name> --resource-group <resource-group>Überprüfen Sie den Status des Überprüfungs-Pod mit dem Befehl
kubectl get pods.Sobald der Pod den Zustand
Readyerreicht hat, überprüfen Sie anhand der Pod‑Protokolle, ob er auf das Key‑Vault‑Geheimnis zugreifen kann. Verwenden Sie dazu den Befehlkubectl logs.kubectl logs workload-identity-testBei erfolgreicher Ausführung ähnelt die Ausgabe dem folgenden Beispiel:
I0114 10:35:09.795900 1 main.go:63] "successfully got secret" secret="Hello from Key Vault"Wichtig
Azure RBAC-Rollenzuweisungen können bis zu 10 Minuten dauern, bis sie verteilt werden. Wenn der Pod nicht auf den geheimen Schlüssel zugreifen kann, warten Sie, bis die Rollenzuweisung verteilt wird, und erstellen Sie dann den Pod mithilfe des
terraform apply -replace="kubernetes_pod.test"Befehls neu. Weitere Informationen finden Sie unter Troubleshoot Azure RBAC.
Verwandte Inhalte
In diesem Artikel haben Sie einen Kubernetes-Cluster bereitgestellt und ihn so konfiguriert, dass er die Microsoft Entra Workload ID verwendet, um sich auf die Authentifizierung von Anwendungs-Workloads mit diesen Anmeldeinformationen vorzubereiten. Jetzt können Sie Ihre Anwendung bereitstellen und konfigurieren, um die Workloadidentität mit der neuesten Version der Azure Identity-Clientbibliothek zu verwenden. Wenn Sie Ihre Anwendung nicht neu schreiben können, um die neueste Clientbibliotheksversion zu verwenden, können Sie Ihren Anwendungspod so einrichten, dass die Authentifizierung mithilfe der verwalteten Identität mit einer Workloadidentität als kurzfristige Migrationslösung durchgeführt wird.
Die Integration von Service Connector erleichtert die Verbindungskonfiguration für AKS-Workloads und Azure Sicherungsdienste. Es verarbeitet Authentifizierungs- und Netzwerkkonfigurationen sicher und folgt bewährten Methoden für die Verbindung mit Azure-Diensten. Weitere Informationen finden Sie unter Herstellen einer Verbindung zu Azure OpenAI in Foundry Models in AKS mithilfe von Microsoft Entra Workload Identity und der Einführung in den Dienstconnector.