Delen via


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

  1. 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
    
  2. 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

  1. 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
    
  2. 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

  1. Meld u af bij uw tenant A-abonnement met behulp van de az logout opdracht.

    az logout
    
  2. 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
    
  3. 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

  1. 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
    
  2. Maak een servicebus en wachtrij in Tenant B met behulp van de az servicebus namespace create en az 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
    
  3. 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

  1. 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)
    
  2. 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)
    
  3. 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)
    
  4. 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

  1. Meld u af bij uw tenant B-abonnement met behulp van de az logout opdracht.

    az logout
    
  2. Meld u aan bij uw tenant A-abonnement met behulp van de az login opdracht.

    az login --tenant $TENANT_A_ID
    
  3. 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
    
  4. 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

  1. Maak een nieuw Kubernetes ServiceAccount in de default naamruimte en geef de client-id van uw beheerde identiteit in Tenant B door aan de kubectl 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
    
  2. 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 de AZURE_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

  1. 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
    
  2. 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

  1. Meld u aan bij uw tenant A-abonnement met behulp van de az login opdracht.

    az login --tenant $TENANT_A_ID
    
  2. 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
    
  3. 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

  1. Meld u aan bij uw tenant B-abonnement met behulp van de az login opdracht.

    az login --tenant $TENANT_B_ID
    
  2. 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
    
  3. 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: