Aracılığıyla paylaş


Azure Kubernetes Service'te (AKS) kiracılar arası iş yükü kimliğini yapılandırma

Bu makalede, Azure Kubernetes Service'te (AKS) kiracılar arası iş yükü kimliğini yapılandırmayı öğreneceksiniz. Kiracılar arası iş yükü kimliği, AKS kümenizden başka bir kiracıdaki kaynaklara erişmenizi sağlar. Bu örnekte, bir kiracıda bir Azure Service Bus oluşturur ve başka bir kiracıdaki AKS kümesinde çalışan bir iş yükünden ileti gönderirsiniz.

İş yükü kimliği hakkında daha fazla bilgi için bkz. İş yükü kimliğine genel bakış.

Önkoşullar

  • Her birinin ayrı bir kiracıda yer alan iki Azure aboneliği. Bu makalede, bunları A Kiracısı ve B Kiracısı olarak adlandıracağız.

  • Yerel makinenizde Yüklü Azure CLI. Azure CLI yüklü değilse bkz . Azure CLI'yi yükleme.

  • Bash kabuk ortamı. Bu makalede Bash kabuğu söz dizimi kullanılır.

  • Aşağıdaki abonelik ayrıntılarına sahip olmanız gerekir:

    • Kiracı A kiracı kimliği
    • Kiracı A abonelik kimliği
    • Kiracı B kiracı kimliği
    • Kiracı B abonelik kimliği

Önemli

Ayarladığınız ortam değişkenlerini korumak için bu makalenin süresi boyunca aynı terminal penceresinde olduğunuzdan emin olun. Terminal penceresini kapatırsanız ortam değişkenlerini yeniden ayarlamanız gerekir.

A Kiracısında kaynakları yapılandırma

Kiracı A'da iş yükü kimliği ve OIDC veren etkinleştirilmiş bir AKS kümesi oluşturursunuz. Bu kümeyi, B Kiracısı'ndaki kaynaklara erişmeye çalışan bir uygulama dağıtmak için kullanırsınız.

A Kiracısında oturum açma

  1. komutunu kullanarak Kiracı A aboneliğinizde oturum açınaz login.

    # Set environment variable
    TENANT_A_ID=<tenant-id>
    
    az login --tenant $TENANT_A_ID
    
  2. komutunu kullanarak A Kiracısı'nda doğru abonelikle çalıştığından az account set emin olun.

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

A Kiracısında kaynak oluşturma

  1. komutunu kullanarak AKS kümesini barındırmak için A Kiracısı'nda az group create bir kaynak grubu oluşturun.

    # Set environment variables
    RESOURCE_GROUP=<resource-group-name>
    LOCATION=<location>
    
    # Create a resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. A Kiracısında iş yükü kimliği ve OIDC verenin etkinleştirildiği bir AKS kümesi oluşturmak için az aks create komutunu kullanın.

    # 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
    

AKS kümesinden OIDC veren URL'sini alma

  • komutunu kullanarak A Kiracısı'ndaki kümeden OIDC veren URL'sini az aks show alın.

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

B Kiracısında kaynakları yapılandırma

B Kiracısı'nda bir Azure Service Bus, yönetilen kimlik oluşturur ve hizmet veriyoluna ileti okuma ve yazma izinleri atar ve yönetilen kimlik ile A Kiracısı'ndaki AKS kümesi arasında güven oluşturursunuz.

B Kiracısında oturum açma

  1. komutunu kullanarak Kiracı A aboneliğinizin oturumunu az logout kapatın.

    az logout
    
  2. komutunu kullanarak Kiracı B aboneliğinizde oturum açınaz login.

    # Set environment variable
    TENANT_B_ID=<tenant-id>
    
    az login --tenant $TENANT_B_ID
    
  3. komutunu kullanarak B Kiracısı'nda doğru abonelikle çalıştığından az account set emin olun.

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

B Kiracısında kaynak oluşturma

  1. Komutunu kullanarak az group create yönetilen kimliği barındırmak için B Kiracısı'nda bir kaynak grubu oluşturun.

    # Set environment variables
    RESOURCE_GROUP=<resource-group-name>
    LOCATION=<location>
    
    # Create a resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. ve komutlarını kullanarak az servicebus namespace create B Kiracısında bir hizmet veri yolu ve az servicebus queue create kuyruğu oluşturun.

    # 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. komutunu kullanarak az identity create B Kiracısı'nda kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.

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

B Kiracısında kaynak kimliklerini alma ve izinleri atama

  1. komutunu kullanarak B Kiracısında yönetilen kimliğin az identity show asıl kimliğini alın.

    # Get the user-assigned managed identity principalId
    PRINCIPAL_ID=$(az identity show \
      --resource-group $RESOURCE_GROUP \
      --name $IDENTITY_NAME \
      --query principalId \
      --output tsv)
    
  2. komutunu kullanarak B Kiracısında yönetilen kimliğin az identity show istemci kimliğini alın.

    CLIENT_ID=$(az identity show \
      --resource-group $RESOURCE_GROUP \
      --name $IDENTITY_NAME \
      --query clientId \
      --output tsv)
    
  3. komutunu kullanarak az servicebus namespace show B Kiracısındaki service bus ad alanının kaynak kimliğini alın.

    SERVICEBUS_ID=$(az servicebus namespace show \
      --name $SERVICEBUS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id \
      --output tsv)
    
  4. Komutunu kullanarak service bus iletilerini okumak ve yazmak için Kiracı B izinlerinde yönetilen kimliği atayınaz role assignment create.

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

AKS kümesi ile yönetilen kimlik arasında güven oluşturma

Bu bölümde, A Kiracısı'ndaki AKS kümesi ile B Kiracısı'ndaki yönetilen kimlik arasında güven oluşturmak için gereken federasyon kimliği kimlik bilgilerini oluşturursunuz. A Kiracısı'ndaki AKS kümesinden OIDC veren URL'sini ve B Kiracısında yönetilen kimliğin adını kullanırsınız.

  • komutunu kullanarak az identity federated-credential create bir federasyon kimliği kimlik bilgisi oluşturun.

    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, makalenin devamında A Kiracısı'nda oluşturduğunuz Kubernetes hizmet hesabının adıdır. Uygulama podunuz kimlik doğrulama isteklerinde bulunursa, bu değer yetkilendirme isteğinde olduğu gibi subject Microsoft Entra Id'ye gönderilir. Microsoft Entra Id, bu değerin federasyon kimliği kimlik bilgilerini oluştururken ayarladığınız değerle eşleşip eşleşmediğine bağlı olarak uygunluğu belirler, bu nedenle değerin eşleştiğinden emin olmak önemlidir.

Azure Service Bus kuyruğuna ileti göndermek için uygulama dağıtma

Bu bölümde, A Kiracısı'ndaki AKS kümenize, B Kiracısı'ndaki Azure Service Bus kuyruğuna ileti gönderen bir uygulama dağıtacaksınız.

A Kiracısında oturum açın ve AKS kimlik bilgilerini alın

  1. komutunu kullanarak B Kiracısı aboneliğinizin oturumunu az logout kapatın.

    az logout
    
  2. komutunu kullanarak Kiracı A aboneliğinizde oturum açınaz login.

    az login --tenant $TENANT_A_ID
    
  3. komutunu kullanarak A Kiracısı'nda doğru abonelikle çalıştığından az account set emin olun.

    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    
  4. komutunu kullanarak A Kiracısı'ndaki AKS kümesinin az aks get-credentials kimlik bilgilerini alın.

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

Azure Service Bus kuyruğuna ileti göndermek için Kubernetes kaynakları oluşturma

  1. Ad alanında default yeni bir Kubernetes ServiceAccount oluşturun ve B Kiracısındaki yönetilen kimliğinizin istemci kimliğini komutuna kubectl apply geçirin. İstemci kimliği, A Kiracısı'ndaki uygulamanın kimliğini B Kiracısı'ndaki Azure Service Bus'ta doğrulamak için kullanılır.

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: $CLIENT_ID
      name: myserviceaccount
    EOF
    
  2. Azure Service Bus kuyruğunuza 100 ileti göndermek için ad alanında yeni bir Kubernetes İşi default oluşturun. Pod şablonu, önceki adımda oluşturduğunuz iş yükü kimliğini ve hizmet hesabını kullanacak şekilde yapılandırılmıştır. Ayrıca ortam değişkeninin AZURE_TENANT_ID Kiracı B kiracı kimliğine ayarlandığını unutmayın. İş yükü kimliği varsayılan olarak AKS kümesinin kiracısına ayarlandığı için bu gereklidir, bu nedenle B Kiracısının kiracı kimliğini açıkça ayarlamanız gerekir.

    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
    

Dağıtımı doğrulama

  1. komutunu kullanarak kubectl describe pod podun durumunu denetleyerek podun B Kiracısındaki Azure Service Bus kuyruğuyla etkileşim kuracak şekilde doğru yapılandırıldığını doğrulayın.

    # 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. Uygulamanın komutunu kullanarak kiracılar arasında ileti gönderip gönderemediğini görmek için pod günlüklerini kubectl logs denetleyin.

    kubectl logs $POD_NAME
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

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

Not

Ek doğrulama adımı olarak, Azure portalına gidebilir ve Service Bus Gezgini'nde gönderilen iletileri görüntülemek için B Kiracısı'ndaki Azure Service Bus kuyruğuna gidebilirsiniz.

Kaynakları temizleme

Dağıtımın başarılı olduğunu doğruladıktan sonra, Azure maliyetlerinin oluşmasını önlemek için kaynakları temizleyebilirsiniz.

A Kiracısı'ndaki kaynakları silme

  1. komutunu kullanarak Kiracı A aboneliğinizde oturum açınaz login.

    az login --tenant $TENANT_A_ID
    
  2. komutunu kullanarak A Kiracısı'nda doğru abonelikle çalıştığından az account set emin olun.

    az account set --subscription $TENANT_A_SUBSCRIPTION_ID
    
  3. komutunu kullanarak az group delete Azure kaynak grubunu ve içindeki tüm kaynakları silin.

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

B Kiracısı'ndaki kaynakları silme

  1. komutunu kullanarak Kiracı B aboneliğinizde oturum açınaz login.

    az login --tenant $TENANT_B_ID
    
  2. komutunu kullanarak B Kiracısı'nda doğru abonelikle çalıştığından az account set emin olun.

    az account set --subscription $TENANT_B_SUBSCRIPTION_ID
    
  3. komutunu kullanarak az group delete Azure kaynak grubunu ve içindeki tüm kaynakları silin.

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

Sonraki adımlar

Bu makalede, Azure Kubernetes Service'te (AKS) kiracılar arası iş yükü kimliğini yapılandırmayı öğrendiniz. İş yükü kimliği hakkında daha fazla bilgi edinmek için aşağıdaki makalelere bakın: