Sdílet prostřednictvím


Konfigurace identity úloh mezi tenanty ve službě Azure Kubernetes Service (AKS)

V tomto článku se dozvíte, jak nakonfigurovat identitu úloh mezi tenanty ve službě Azure Kubernetes Service (AKS). Identita úloh mezi tenanty umožňuje přístup k prostředkům v jiném tenantovi z clusteru AKS. V tomto příkladu vytvoříte službu Azure Service Bus v jednom tenantovi a odešlete do ní zprávy z úlohy spuštěné v clusteru AKS v jiném tenantovi.

Další informace o identitě úloh najdete v přehledu identit úloh.

Požadavky

  • Dvě předplatná Azure, každá v samostatném tenantovi. V tomto článku se na tyto odkazy odkazujeme jako na tenanta A a tenanta B.

  • Azure CLI nainstalované na místním počítači. Pokud nemáte nainstalované Rozhraní příkazového řádku Azure CLI, přečtěte si téma Instalace Azure CLI.

  • Prostředí prostředí Bash Tento článek používá syntaxi prostředí Bash.

  • Musíte mít následující podrobnosti o předplatném:

    • TENANT A ID tenanta
    • ID předplatného tenanta
    • ID tenanta B
    • ID předplatného tenanta B

Důležité

Ujistěte se, že zůstanete ve stejném okně terminálu po dobu trvání tohoto článku, abyste zachovali nastavené proměnné prostředí. Pokud okno terminálu zavřete, musíte znovu nastavit proměnné prostředí.

Konfigurace prostředků v tenantovi A

V tenantovi A vytvoříte cluster AKS s povolenou identitou úloh a vystavitelem OIDC. Pomocí tohoto clusteru nasadíte aplikaci, která se pokusí o přístup k prostředkům v tenantovi B.

Přihlášení k tenantovi A

  1. Přihlaste se k předplatnému tenanta A pomocí az login příkazu.

    # Set environment variable
    TENANT_A_ID=<tenant-id>
    
    az login --tenant $TENANT_A_ID
    
  2. Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi Aaz account set.

    # Set environment variable
    TENANT_A_SUBSCRIPTION_ID=<subscription-id>
    
    # Log in to your Tenant A subscription
    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    

Vytváření prostředků v tenantovi A

  1. Pomocí příkazu vytvořte skupinu prostředků v tenantovi A pro hostování clusteru az group create AKS.

    # Set environment variables
    RESOURCE_GROUP=<resource-group-name>
    LOCATION=<location>
    
    # Create a resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Vytvořte cluster AKS v tenantovi A s identitou úlohy a vystavitelem OIDC povoleným az aks create pomocí příkazu.

    # 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
    

Získání adresy URL vystavitele OIDC z clusteru AKS

  • Pomocí příkazu získejte adresu URL vystavitele OIDC z clusteru az aks show v tenantovi A.

    OIDC_ISSUER_URL=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query "oidcIssuerProfile.issuerUrl" --output tsv)
    

Konfigurace prostředků v tenantovi B

V tenantovi B vytvoříte službu Azure Service Bus, spravovanou identitu a přiřadíte jí oprávnění ke čtení a zápisu zpráv do služby Service Bus a vytvoříte vztah důvěryhodnosti mezi spravovanou identitou a clusterem AKS v tenantovi A.

Přihlášení k tenantovi B

  1. Odhlaste se z předplatného tenanta A pomocí az logout příkazu.

    az logout
    
  2. Přihlaste se k předplatnému tenanta B pomocí az login příkazu.

    # Set environment variable
    TENANT_B_ID=<tenant-id>
    
    az login --tenant $TENANT_B_ID
    
  3. Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi Baz account set.

    # Set environment variable
    TENANT_B_SUBSCRIPTION_ID=<subscription-id>
    
    # Log in to your Tenant B subscription
    az account set --subscription $TENANT_B_SUBSCRIPTION_ID
    

Vytváření prostředků v tenantovi B

  1. Vytvořte skupinu prostředků v tenantovi B pro hostování spravované identity pomocí az group create příkazu.

    # Set environment variables
    RESOURCE_GROUP=<resource-group-name>
    LOCATION=<location>
    
    # Create a resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Pomocí příkazů az servicebus queue create a příkazů vytvořte službu Service Bus a frontu az servicebus namespace create v tenantovi B.

    # 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. Pomocí příkazu vytvořte spravovanou identitu přiřazenou uživatelem v tenantovi Baz identity create.

    # Set environment variable
    IDENTITY_NAME=${SERVICEBUS_NAME}-identity
    
    # Create a user-assigned managed identity
    az identity create --resource-group $RESOURCE_GROUP --name $IDENTITY_NAME
    

Získání ID prostředků a přiřazení oprávnění v tenantovi B

  1. Pomocí příkazu získejte ID objektu zabezpečení spravované identity v tenantovi Baz identity show.

    # Get the user-assigned managed identity principalId
    PRINCIPAL_ID=$(az identity show \
      --resource-group $RESOURCE_GROUP \
      --name $IDENTITY_NAME \
      --query principalId \
      --output tsv)
    
  2. Pomocí příkazu získejte ID klienta spravované identity v tenantovi Baz identity show.

    CLIENT_ID=$(az identity show \
      --resource-group $RESOURCE_GROUP \
      --name $IDENTITY_NAME \
      --query clientId \
      --output tsv)
    
  3. Pomocí příkazu získejte ID prostředku oboru názvů služby Service Bus v tenantovi Baz servicebus namespace show.

    SERVICEBUS_ID=$(az servicebus namespace show \
      --name $SERVICEBUS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id \
      --output tsv)
    
  4. Přiřaďte spravovanou identitu v oprávněních tenanta B ke čtení a zápisu zpráv služby Service Bus pomocí az role assignment create příkazu.

    az role assignment create \
      --role "Azure Service Bus Data Owner" \
      --assignee-object-id $PRINCIPAL_ID \
      --assignee-principal-type ServicePrincipal \
      --scope $SERVICEBUS_ID
    

Navázání vztahu důvěryhodnosti mezi clusterem AKS a spravovanou identitou

V této části vytvoříte přihlašovací údaje federované identity potřebné k navázání vztahu důvěryhodnosti mezi clusterem AKS v tenantovi A a spravovanou identitou v tenantovi B. Použijete adresu URL vystavitele OIDC z clusteru AKS v tenantovi A a název spravované identity v tenantovi B.

  • Pomocí příkazu vytvořte přihlašovací údaje az identity federated-credential create federované identity.

    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 je název účtu služby Kubernetes, který vytvoříte v tenantovi A dále v článku. Když pod aplikace odesílá žádosti o ověření, tato hodnota se odešle do ID Microsoft Entra jako subject v žádosti o autorizaci. ID Microsoft Entra určuje způsobilost na základě toho, jestli tato hodnota odpovídá tomu, co jste nastavili při vytváření přihlašovacích údajů federované identity, takže je důležité zajistit, aby hodnota odpovídala.

Nasazení aplikace pro odesílání zpráv do fronty služby Azure Service Bus

V této části nasadíte aplikaci do clusteru AKS v tenantovi A , která odesílá zprávy do fronty služby Azure Service Bus v tenantovi B.

Přihlaste se k tenantovi A a získejte přihlašovací údaje AKS.

  1. Pomocí příkazu se odhlaste z předplatného tenanta az logout B.

    az logout
    
  2. Přihlaste se k předplatnému tenanta A pomocí az login příkazu.

    az login --tenant $TENANT_A_ID
    
  3. Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi Aaz account set.

    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    
  4. Pomocí příkazu získejte přihlašovací údaje pro cluster AKS v tenantovi Aaz aks get-credentials.

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    

Vytvoření prostředků Kubernetes pro odesílání zpráv do fronty služby Azure Service Bus

  1. V oboru názvů vytvořte nový účet služby default Kubernetes a předejte ID klienta vaší spravované identity v tenantovi B do kubectl apply příkazu. ID klienta slouží k ověření aplikace v tenantovi A ve službě Azure Service Bus v tenantovi B.

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: $CLIENT_ID
      name: myserviceaccount
    EOF
    
  2. Vytvořte novou úlohu Kubernetes v default oboru názvů pro odesílání 100 zpráv do fronty služby Azure Service Bus. Šablona podu je nakonfigurovaná tak, aby používala identitu úlohy a účet služby, který jste vytvořili v předchozím kroku. Všimněte si také, že AZURE_TENANT_ID proměnná prostředí je nastavená na ID tenanta B. To se vyžaduje jako výchozí identita úlohy pro tenanta clusteru AKS, takže musíte explicitně nastavit ID tenanta tenanta 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
    

Ověření nasazení

  1. Ověřte, že je pod správně nakonfigurovaný pro interakci s frontou služby Azure Service Bus v tenantovi B . Zkontrolujte stav podu kubectl describe pod pomocí příkazu.

    # 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. V protokolech podu zkontrolujte, jestli aplikace pomocí příkazu dokázala odesílat zprávy mezi tenanty kubectl logs .

    kubectl logs $POD_NAME
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    ...
    Adding message to batch: Hello World!
    Adding message to batch: Hello World!
    Adding message to batch: Hello World!
    Sent 100 messages
    

Poznámka:

Jako další krok ověření můžete přejít na web Azure Portal a přejít do fronty služby Azure Service Bus v tenantovi B a zobrazit zprávy odeslané v Service Bus Exploreru.

Vyčištění prostředků

Po ověření úspěšného nasazení můžete prostředky vyčistit, abyste se vyhnuli účtování nákladů na Azure.

Odstranění prostředků v tenantovi A

  1. Přihlaste se k předplatnému tenanta A pomocí az login příkazu.

    az login --tenant $TENANT_A_ID
    
  2. Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi Aaz account set.

    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    
  3. Pomocí příkazu odstraňte skupinu prostředků Azure a všechny prostředky v ní az group delete .

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Odstranění prostředků v tenantovi B

  1. Přihlaste se k předplatnému tenanta B pomocí az login příkazu.

    az login --tenant $TENANT_B_ID
    
  2. Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi Baz account set.

    az account set --subscription $TENANT_B_SUBSCRIPTION_ID
    
  3. Pomocí příkazu odstraňte skupinu prostředků Azure a všechny prostředky v ní az group delete .

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Další kroky

V tomto článku jste zjistili, jak nakonfigurovat identitu úloh mezi tenanty ve službě Azure Kubernetes Service (AKS). Další informace o identitě úloh najdete v následujících článcích: