Identiteit van workload voor meerdere tenants configureren in Azure Kubernetes Service (AKS)
In dit artikel leert u hoe u de workloadidentiteit tussen tenants configureert in Azure Kubernetes Service (AKS). Met de workloadidentiteit tussen tenants kunt u vanuit uw AKS-cluster toegang krijgen tot resources in een andere tenant. In dit voorbeeld maakt u een Azure Service Bus in één tenant en verzendt u er berichten naar vanuit een workload die wordt uitgevoerd in een AKS-cluster in een andere tenant.
Zie het overzicht van workloadidentiteit voor meer informatie over workloadidentiteit.
Vereisten
Twee Azure-abonnementen, elk in een afzonderlijke tenant. In dit artikel verwijzen we naar deze als Tenant A en Tenant B.
Azure CLI is geïnstalleerd op uw lokale computer. Als u de Azure CLI niet hebt geïnstalleerd, raadpleegt u De Azure CLI installeren.
Bash-shellomgeving. In dit artikel wordt de syntaxis van de Bash-shell gebruikt.
U hebt de volgende abonnementsgegevens nodig:
- Tenant A tenant-id
- Tenant A-abonnements-id
- Tenant B-tenant-id
- Tenant B-abonnements-id
Belangrijk
Zorg ervoor dat u binnen hetzelfde terminalvenster blijft voor de duur van dit artikel om de omgevingsvariabelen te behouden die u hebt ingesteld. Als u het terminalvenster sluit, moet u de omgevingsvariabelen opnieuw instellen.
Resources configureren in Tenant A
In Tenant A maakt u een AKS-cluster met workloadidentiteit en OIDC-verlener ingeschakeld. U gebruikt dit cluster om een toepassing te implementeren die toegang probeert te krijgen tot resources in Tenant B.
Aanmelden bij tenant A
Meld u aan bij uw tenant A-abonnement met behulp van de
az login
opdracht.# Set environment variable TENANT_A_ID=<tenant-id> az login --tenant $TENANT_A_ID
Zorg ervoor dat u met het juiste abonnement in Tenant A werkt met behulp van de
az account set
opdracht.# Set environment variable TENANT_A_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant A subscription az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Resources maken in Tenant A
Maak een resourcegroep in Tenant A om het AKS-cluster te hosten met behulp van de
az group create
opdracht.# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Maak een AKS-cluster in Tenant A met workloadidentiteit en OIDC-verlener ingeschakeld met behulp van de
az aks create
opdracht.# 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
URL van OIDC-verlener ophalen uit AKS-cluster
Haal de URL van de OIDC-verlener op uit het cluster in Tenant A met behulp van de
az aks show
opdracht.OIDC_ISSUER_URL=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" --output tsv)
Resources configureren in Tenant B
In Tenant B maakt u een Azure Service Bus, een beheerde identiteit en wijst u deze machtigingen toe voor het lezen en schrijven van berichten naar de servicebus en stelt u de vertrouwensrelatie tussen de beheerde identiteit en het AKS-cluster in tenant A in.
Aanmelden bij tenant B
Meld u af bij uw tenant A-abonnement met behulp van de
az logout
opdracht.az logout
Meld u aan bij uw tenant B-abonnement met behulp van de
az login
opdracht.# Set environment variable TENANT_B_ID=<tenant-id> az login --tenant $TENANT_B_ID
Zorg ervoor dat u met het juiste abonnement in Tenant B werkt met behulp van de
az account set
opdracht.# Set environment variable TENANT_B_SUBSCRIPTION_ID=<subscription-id> # Log in to your Tenant B subscription az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Resources maken in Tenant B
Maak een resourcegroep in Tenant B om de beheerde identiteit te hosten met behulp van de
az group create
opdracht.# Set environment variables RESOURCE_GROUP=<resource-group-name> LOCATION=<location> # Create a resource group az group create --name $RESOURCE_GROUP --location $LOCATION
Maak een servicebus en wachtrij in Tenant B met behulp van de
az servicebus namespace create
enaz servicebus queue create
opdrachten.# 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
Maak een door de gebruiker toegewezen beheerde identiteit in Tenant B met behulp van de
az identity create
opdracht.# Set environment variable IDENTITY_NAME=${SERVICEBUS_NAME}-identity # Create a user-assigned managed identity az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME
Resource-id's ophalen en machtigingen toewijzen in Tenant B
Haal de principal-id van de beheerde identiteit in Tenant B op met behulp van de
az identity show
opdracht.# Get the user-assigned managed identity principalId PRINCIPAL_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query principalId \ --output tsv)
Haal de client-id van de beheerde identiteit in Tenant B op met behulp van de
az identity show
opdracht.CLIENT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query clientId \ --output tsv)
Haal de resource-id op van de service bus-naamruimte in Tenant B met behulp van de
az servicebus namespace show
opdracht.SERVICEBUS_ID=$(az servicebus namespace show \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Wijs de beheerde identiteit in tenant B-machtigingen toe voor het lezen en schrijven van Service Bus-berichten met behulp van de
az role assignment create
opdracht.az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $PRINCIPAL_ID \ --assignee-principal-type ServicePrincipal \ --scope $SERVICEBUS_ID
Vertrouwensrelatie tot stand brengen tussen AKS-cluster en beheerde identiteit
In deze sectie maakt u de federatieve identiteitsreferentie die nodig is om een vertrouwensrelatie tot stand te brengen tussen het AKS-cluster in Tenant A en de beheerde identiteit in Tenant B. U gebruikt de URL van de OIDC-verlener uit het AKS-cluster in Tenant A en de naam van de beheerde identiteit in Tenant B.
Maak een federatieve identiteitsreferentie met behulp van de
az identity federated-credential create
opdracht.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
is de naam van het Kubernetes-serviceaccount dat u maakt in Tenant A verderop in het artikel. Wanneer uw toepassingspod verificatieaanvragen doet, wordt deze waarde verzonden naar Microsoft Entra-id als de subject
in de autorisatieaanvraag. Microsoft Entra ID bepaalt of deze waarde overeenkomt met wat u hebt ingesteld bij het maken van de federatieve identiteitsreferentie, dus het is belangrijk om ervoor te zorgen dat de waarde overeenkomt.
Toepassing implementeren voor het verzenden van berichten naar azure Service Bus-wachtrij
In deze sectie implementeert u een toepassing in uw AKS-cluster in Tenant A waarmee berichten worden verzonden naar de Azure Service Bus-wachtrij in tenant B.
Meld u aan bij Tenant A en haal AKS-referenties op
Meld u af bij uw tenant B-abonnement met behulp van de
az logout
opdracht.az logout
Meld u aan bij uw tenant A-abonnement met behulp van de
az login
opdracht.az login --tenant $TENANT_A_ID
Zorg ervoor dat u met het juiste abonnement in Tenant A werkt met behulp van de
az account set
opdracht.az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Haal de referenties voor het AKS-cluster in Tenant A op met behulp van de
az aks get-credentials
opdracht.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Kubernetes-resources maken om berichten te verzenden naar de Azure Service Bus-wachtrij
Maak een nieuw Kubernetes ServiceAccount in de
default
naamruimte en geef de client-id van uw beheerde identiteit in Tenant B door aan dekubectl apply
opdracht. De client-id wordt gebruikt om de app in tenant A te verifiëren bij Azure Service Bus in tenant B.kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $CLIENT_ID name: myserviceaccount EOF
Maak een nieuwe Kubernetes-taak in de
default
naamruimte om 100 berichten naar uw Azure Service Bus-wachtrij te verzenden. De Pod-sjabloon is geconfigureerd voor het gebruik van workloadidentiteit en het serviceaccount dat u in de vorige stap hebt gemaakt. Houd er ook rekening mee dat deAZURE_TENANT_ID
omgevingsvariabele is ingesteld op de tenant-id van Tenant B. Dit is vereist omdat de tenant-id van het AKS-cluster standaard wordt gebruikt voor de tenant-id van het AKS-cluster. Daarom moet u de tenant-id van Tenant B expliciet instellen.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
De implementatie controleren
Controleer of de pod correct is geconfigureerd voor interactie met de Azure Service Bus-wachtrij in tenant B door de status van de pod te controleren met behulp van de
kubectl describe pod
opdracht.# 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
Controleer de logboeken van de pod om te zien of de toepassing berichten via tenants kan verzenden met behulp van de
kubectl logs
opdracht.kubectl logs $POD_NAME
De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:
... Adding message to batch: Hello World! Adding message to batch: Hello World! Adding message to batch: Hello World! Sent 100 messages
Notitie
Als extra verificatiestap gaat u naar Azure Portal en gaat u naar de Azure Service Bus-wachtrij in tenant B om de berichten weer te geven die zijn verzonden in Service Bus Explorer.
Resources opschonen
Nadat u hebt gecontroleerd of de implementatie is geslaagd, kunt u de resources opschonen om te voorkomen dat Azure-kosten in rekening worden gebracht.
Resources verwijderen in tenant A
Meld u aan bij uw tenant A-abonnement met behulp van de
az login
opdracht.az login --tenant $TENANT_A_ID
Zorg ervoor dat u met het juiste abonnement in Tenant A werkt met behulp van de
az account set
opdracht.az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Verwijder de Azure-resourcegroep en alle resources erin met behulp van de
az group delete
opdracht.az group delete --name $RESOURCE_GROUP --yes --no-wait
Resources verwijderen in Tenant B
Meld u aan bij uw tenant B-abonnement met behulp van de
az login
opdracht.az login --tenant $TENANT_B_ID
Zorg ervoor dat u met het juiste abonnement in Tenant B werkt met behulp van de
az account set
opdracht.az account set --subscription $TENANT_B_SUBSCRIPTION_ID
Verwijder de Azure-resourcegroep en alle resources erin met behulp van de
az group delete
opdracht.az group delete --name $RESOURCE_GROUP --yes --no-wait
Volgende stappen
In dit artikel hebt u geleerd hoe u de workloadidentiteit tussen tenants configureert in Azure Kubernetes Service (AKS). Zie de volgende artikelen voor meer informatie over workloadidentiteit:
Azure Kubernetes Service