Konfigurera arbetsbelastningsidentitet mellan klientorganisationer i Azure Kubernetes Service (AKS)
I den här artikeln får du lära dig hur du konfigurerar arbetsbelastningsidentitet mellan klientorganisationer i Azure Kubernetes Service (AKS). Med arbetsbelastningsidentitet mellan klientorganisationer kan du komma åt resurser i en annan klientorganisation från ditt AKS-kluster. I det här exemplet skapar du en Azure Service Bus i en klientorganisation och skickar meddelanden till den från en arbetsbelastning som körs i ett AKS-kluster i en annan klientorganisation.
Mer information om arbetsbelastningsidentitet finns i översikten över arbetsbelastningsidentitet.
Förutsättningar
Två Azure-prenumerationer, var och en i en separat klientorganisation. I den här artikeln refererar vi till dessa som Klient A och Klient B.
Azure CLI installerat på din lokala dator. Om du inte har Installerat Azure CLI läser du Installera Azure CLI.
Bash Shell-miljö. Den här artikeln använder Bash Shell-syntax.
Du måste ha följande prenumerationsinformation:
- Klientorganisation Ett klient-ID
- Klientorganisation Ett prenumerations-ID
- Klient-B-klientorganisations-ID
- Klient-B-prenumerations-ID
Viktigt!
Se till att du håller dig inom samma terminalfönster under hela den här artikeln för att behålla de miljövariabler som du anger. Om du stänger terminalfönstret måste du ange miljövariablerna igen.
Konfigurera resurser i klient A
I Klient A skapar du ett AKS-kluster med arbetsbelastningsidentitet och OIDC-utfärdare aktiverat. Du använder det här klustret för att distribuera ett program som försöker komma åt resurser i klient B.
Logga in på klientorganisation A
Logga in på din klientorganisation En prenumeration med hjälp av
az login
kommandot .# Set environment variable TENANT_A_ID=<tenant-id> az login --tenant $TENANT_A_ID
Se till att du arbetar med rätt prenumeration i Klient A med hjälp av
az account set
kommandot .# Set environment variable TENANT_A_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant A subscription az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Skapa resurser i klient A
Skapa en resursgrupp i Klient A som värd för AKS-klustret med hjälp av
az group create
kommandot .# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Skapa ett AKS-kluster i klient A med arbetsbelastningsidentitet och OIDC-utfärdare aktiverat med kommandot
az aks create
.# Set environment variable CLUSTER_NAME=<cluster-name> # Create an AKS cluster az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-oidc-issuer \ --enable-workload-identity \ --generate-ssh-keys
Hämta URL för OIDC-utfärdare från AKS-kluster
Hämta url:en för OIDC-utfärdaren från klustret i klient A med hjälp av
az aks show
kommandot .OIDC_ISSUER_URL=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" --output tsv)
Konfigurera resurser i klient B
I Klient B skapar du en Azure Service Bus, en hanterad identitet och tilldelar den behörighet att läsa och skriva meddelanden till Service Bus och upprätta förtroendet mellan den hanterade identiteten och AKS-klustret i klient A.
Logga in på klient B
Logga ut från din klientorganisation En prenumeration med hjälp av
az logout
kommandot .az logout
Logga in på din klient-B-prenumeration med hjälp av
az login
kommandot .# Set environment variable TENANT_B_ID=<tenant-id> az login --tenant $TENANT_B_ID
Se till att du arbetar med rätt prenumeration i klient B med hjälp av
az account set
kommandot .# Set environment variable TENANT_B_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant B subscription az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Skapa resurser i klient B
Skapa en resursgrupp i klient B som värd för den hanterade identiteten
az group create
med hjälp av kommandot .# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Skapa en servicebuss och kö i klient B med hjälp av kommandona
az servicebus namespace create
ochaz servicebus queue create
.# Set environment variable SERVICEBUS_NAME=sb-crosstenantdemo-$RANDOM # Create a new service bus namespace and and return the service bus hostname SERVICEBUS_HOSTNAME=$(az servicebus namespace create \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --disable-local-auth \ --query serviceBusEndpoint \ --output tsv | sed -e 's/https:\/\///' -e 's/:443\///') # Create a new queue in the service bus namespace az servicebus queue create \ --name myqueue \ --namespace $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP
Skapa en användartilldelad hanterad identitet i klient B med hjälp av
az identity create
kommandot .# Set environment variable IDENTITY_NAME=${SERVICEBUS_NAME}-identity # Create a user-assigned managed identity az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME
Hämta resurs-ID:n och tilldela behörigheter i klient B
Hämta huvud-ID:t för den hanterade identiteten i klient B med hjälp av
az identity show
kommandot .# Get the user-assigned managed identity principalId PRINCIPAL_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query principalId \ --output tsv)
Hämta klient-ID:t för den hanterade identiteten i klient B med hjälp av
az identity show
kommandot .CLIENT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query clientId \ --output tsv)
Hämta resurs-ID:t för Service Bus-namnområdet i klient B med hjälp av
az servicebus namespace show
kommandot .SERVICEBUS_ID=$(az servicebus namespace show \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Tilldela den hanterade identiteten i klient B-behörigheter för att läsa och skriva Service Bus-meddelanden med hjälp av
az role assignment create
kommandot .az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $PRINCIPAL_ID \ --assignee-principal-type ServicePrincipal \ --scope $SERVICEBUS_ID
Upprätta förtroende mellan AKS-kluster och hanterad identitet
I det här avsnittet skapar du de federerade identitetsautentiseringsuppgifter som behövs för att upprätta förtroende mellan AKS-klustret i klient A och den hanterade identiteten i klient B. Du använder OIDC-utfärdarens URL från AKS-klustret i klient A och namnet på den hanterade identiteten i klient B.
Skapa en federerad identitetsautentiseringsuppgift med kommandot
az identity federated-credential create
.az identity federated-credential create \ --name $IDENTITY_NAME-$RANDOM \ --identity-name $IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --issuer $OIDC_ISSUER_URL \ --subject system:serviceaccount:default:myserviceaccount
--subject system:serviceaccount:default:myserviceaccount
är namnet på kubernetes-tjänstkontot som du skapar i klientorganisation A senare i artikeln. När programpodden gör autentiseringsbegäranden skickas det här värdet till Microsoft Entra-ID som subject
i auktoriseringsbegäran. Microsoft Entra-ID avgör berättigande baserat på om det här värdet matchar det du angav när du skapade den federerade identitetens autentiseringsuppgifter, så det är viktigt att se till att värdet matchar.
Distribuera program för att skicka meddelanden till Azure Service Bus-kön
I det här avsnittet distribuerar du ett program till ditt AKS-kluster i Klient A som skickar meddelanden till Azure Service Bus-kön i klient B.
Logga in på klientorganisation A och hämta AKS-autentiseringsuppgifter
Logga ut från din klient-B-prenumeration med kommandot
az logout
.az logout
Logga in på din klientorganisation En prenumeration med hjälp av
az login
kommandot .az login --tenant $TENANT_A_ID
Se till att du arbetar med rätt prenumeration i Klient A med hjälp av
az account set
kommandot .az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Hämta autentiseringsuppgifterna för AKS-klustret i Klient A med hjälp av
az aks get-credentials
kommandot .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Skapa Kubernetes-resurser för att skicka meddelanden till Azure Service Bus-kön
Skapa ett nytt Kubernetes ServiceAccount i
default
namnområdet och skicka klient-ID:t för din hanterade identitet i klient B tillkubectl apply
kommandot. Klient-ID:t används för att autentisera appen i Klient A till Azure Service Bus i klient B.kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $CLIENT_ID name: myserviceaccount EOF
Skapa ett nytt Kubernetes-jobb i
default
namnområdet för att skicka 100 meddelanden till Azure Service Bus-kön. Poddmallen är konfigurerad för att använda arbetsbelastningsidentitet och det tjänstkonto som du skapade i föregående steg. Observera också attAZURE_TENANT_ID
miljövariabeln är inställd på klientorganisations-ID för klient B. Detta krävs eftersom arbetsbelastningsidentiteten som standard är klientorganisationen för AKS-klustret, så du måste uttryckligen ange klientorganisations-ID för klient B.kubectl apply -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: myproducer spec: template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: myserviceaccount containers: - image: ghcr.io/azure-samples/aks-app-samples/servicebusdemo:latest name: myproducer resources: {} env: - name: OPERATION_MODE value: "producer" - name: MESSAGE_COUNT value: "100" - name: AZURE_SERVICEBUS_QUEUE_NAME value: myqueue - name: AZURE_SERVICEBUS_HOSTNAME value: $SERVICEBUS_HOSTNAME - name: AZURE_TENANT_ID value: $TENANT_B_ID restartPolicy: Never EOF
Verifiera distributionen
Kontrollera att podden är korrekt konfigurerad för att interagera med Azure Service Bus-kön i klient B genom att kontrollera statusen för podden med hjälp
kubectl describe pod
av kommandot .# Get the dynamically generated pod name POD_NAME=$(kubectl get po --selector job-name=myproducer -o jsonpath='{.items[0].metadata.name}') # Verify the tenant ID environment variable is set for Tenant B kubectl describe pod $POD_NAME | grep AZURE_TENANT_ID
Kontrollera loggarna för podden för att se om programmet kunde skicka meddelanden mellan klienter med hjälp av
kubectl logs
kommandot .kubectl logs $POD_NAME
Dina utdata bör se ut ungefär som följande exempelutdata:
... Adding message to batch: Hello World! Adding message to batch: Hello World! Adding message to batch: Hello World! Sent 100 messages
Kommentar
Som ett extra verifieringssteg kan du gå till Azure Portal och navigera till Azure Service Bus-kön i klient B för att visa de meddelanden som skickades i Service Bus Explorer.
Rensa resurser
När du har kontrollerat att distributionen har slutförts kan du rensa resurserna för att undvika kostnader för Azure.
Ta bort resurser i klient A
Logga in på din klientorganisation En prenumeration med hjälp av
az login
kommandot .az login --tenant $TENANT_A_ID
Se till att du arbetar med rätt prenumeration i Klient A med hjälp av
az account set
kommandot .az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Ta bort Azure-resursgruppen och alla resurser i den
az group delete
med kommandot .az group delete --name $RESOURCE_GROUP --yes --no-wait
Ta bort resurser i klient B
Logga in på din klient-B-prenumeration med hjälp av
az login
kommandot .az login --tenant $TENANT_B_ID
Se till att du arbetar med rätt prenumeration i klient B med hjälp av
az account set
kommandot .az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Ta bort Azure-resursgruppen och alla resurser i den
az group delete
med kommandot .az group delete --name $RESOURCE_GROUP --yes --no-wait
Nästa steg
I den här artikeln har du lärt dig hur du konfigurerar arbetsbelastningsidentitet mellan klientorganisationer i Azure Kubernetes Service (AKS). Mer information om arbetsbelastningsidentitet finns i följande artiklar:
Azure Kubernetes Service