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
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
Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi A
az 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
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
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
Odhlaste se z předplatného tenanta A pomocí
az logout
příkazu.az logout
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
Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi B
az 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
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
Pomocí příkazů
az servicebus queue create
a příkazů vytvořte službu Service Bus a frontuaz 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
Pomocí příkazu vytvořte spravovanou identitu přiřazenou uživatelem v tenantovi B
az 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
Pomocí příkazu získejte ID objektu zabezpečení spravované identity v tenantovi B
az 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)
Pomocí příkazu získejte ID klienta spravované identity v tenantovi B
az identity show
.CLIENT_ID=$(az identity show \ --resource-group $RESOURCE_GROUP \ --name $IDENTITY_NAME \ --query clientId \ --output tsv)
Pomocí příkazu získejte ID prostředku oboru názvů služby Service Bus v tenantovi B
az servicebus namespace show
.SERVICEBUS_ID=$(az servicebus namespace show \ --name $SERVICEBUS_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
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.
Pomocí příkazu se odhlaste z předplatného tenanta
az logout
B.az logout
Přihlaste se k předplatnému tenanta A pomocí
az login
příkazu.az login --tenant $TENANT_A_ID
Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi A
az account set
.az account set --subscription $TENANT_A_SUBSCRIPTION_ID
Pomocí příkazu získejte přihlašovací údaje pro cluster AKS v tenantovi A
az 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
V oboru názvů vytvořte nový účet služby
default
Kubernetes a předejte ID klienta vaší spravované identity v tenantovi B dokubectl 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
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é, žeAZURE_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í
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
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
Přihlaste se k předplatnému tenanta A pomocí
az login
příkazu.az login --tenant $TENANT_A_ID
Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi A
az account set
.az account set --subscription $TENANT_A_SUBSCRIPTION_ID
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
Přihlaste se k předplatnému tenanta B pomocí
az login
příkazu.az login --tenant $TENANT_B_ID
Pomocí příkazu se ujistěte, že pracujete se správným předplatným v tenantovi B
az account set
.az account set --subscription $TENANT_B_SUBSCRIPTION_ID
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:
Azure Kubernetes Service