Aracılığıyla paylaş


Azure Kubernetes Service'ten (AKS) Azure OpenAI'ye güvenli erişim

Bu makalede, Microsoft Entra İş Yükü Kimliği kullanarak Azure Kubernetes Service'ten (AKS) Azure OpenAI'ye erişimin güvenliğini sağlamayı öğreneceksiniz. Şunları yapmayı öğreneceksiniz:

  • AKS kümesinde iş yükü kimliklerini etkinleştirme.
  • Azure kullanıcı tarafından atanan yönetilen kimlik oluşturma.
  • Microsoft Entra Id federasyon kimlik bilgileri oluşturun.
  • Kubernetes Pod'da iş yükü kimliğini etkinleştirme.

Not

Azure kaynaklarına erişmek için güvenli, parolasız bir kimlik doğrulama işlemine olanak sağladığından, Azure OpenAI erişimi için AKS'de Microsoft Entra İş Yükü Kimliği ve yönetilen kimlikler kullanmanızı öneririz.

Başlamadan önce

  • Etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır. Hesabınız yoksa ücretsiz bir hesap oluşturun.
  • Bu makale, AKS üzerinde OpenAI kullanan bir uygulama dağıtma konusunda derlemektedir. Bu makaleye başlamadan önce bu makaleyi tamamlamanız gerekir.
  • Microsoft Entra yetkilendirmesi için kullanmak üzere Azure OpenAI hesabınızda özel bir etki alanı adının etkinleştirilmesi gerekir. Daha fazla bilgi için bkz . Azure AI hizmetleri için özel alt etki alanı adları.

Önkoşullar

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

AKS kümesinde Microsoft Entra İş Yükü Kimliği etkinleştirme

AKS'de Microsoft Entra İş Yükü Kimliği ve OIDC Veren Uç Noktası özellikleri varsayılan olarak etkinleştirilmez. Bunları kullanabilmeniz için aks kümenizde etkinleştirmeniz gerekir.

  1. Kaynak grubu adını ve AKS kümesi kaynak grubu adı değişkenlerini ayarlayın.

    # Set the resource group variable
    RG_NAME=myResourceGroup
    
    # Set the AKS cluster resource group variable
    AKS_NAME=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.ContainerService/managedClusters --query "[0].name" -o tsv)
    
  2. komutunu kullanarak az aks update mevcut AKS kümenizde Microsoft Entra İş Yükü Kimliği ve OIDC Veren Uç Noktası özelliklerini etkinleştirin.

    az aks update \
        --resource-group $RG_NAME \
        --name $AKS_NAME \
        --enable-workload-identity \
        --enable-oidc-issuer
    
  3. komutunu kullanarak AKS OIDC Veren Uç Noktası URL'sini az aks show alın.

    AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
    

Azure kullanıcı tarafından atanan yönetilen kimlik oluşturma

  1. komutunu kullanarak az identity create Azure kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.

    # Set the managed identity name variable
    MANAGED_IDENTITY_NAME=myIdentity
    
    # Create the managed identity
    az identity create \
        --resource-group $RG_NAME \
        --name $MANAGED_IDENTITY_NAME
    
  2. komutunu kullanarak az identity show yönetilen kimlik istemci kimliğini ve nesne kimliğini alın.

    # Get the managed identity client ID
    MANAGED_IDENTITY_CLIENT_ID=$(az identity show --resource-group $RG_NAME --name $MANAGED_IDENTITY_NAME --query clientId -o tsv)
    
    # Get the managed identity object ID
    MANAGED_IDENTITY_OBJECT_ID=$(az identity show --resource-group $RG_NAME --name $MANAGED_IDENTITY_NAME --query principalId -o tsv)
    
  3. komutunu kullanarak az resource list Azure OpenAI kaynak kimliğini alın.

    AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
    
  4. komutunu kullanarak yönetilen kimliğe Azure OpenAI kaynağına erişim izni verin az role assignment create .

    az role assignment create \
        --role "Cognitive Services OpenAI User" \
        --assignee-object-id $MANAGED_IDENTITY_OBJECT_ID \
        --assignee-principal-type ServicePrincipal \
        --scope $AOAI_RESOURCE_ID
    

Microsoft Entra Id federasyon kimlik bilgisi oluşturma

  1. Federasyon kimlik bilgileri, ad alanı ve hizmet hesabı değişkenlerini ayarlayın.

    # Set the federated credential name variable
    FEDERATED_CREDENTIAL_NAME=myFederatedCredential
    
    # Set the namespace variable
    SERVICE_ACCOUNT_NAMESPACE=default
    
    # Set the service account variable
    SERVICE_ACCOUNT_NAME=ai-service-account
    
  2. komutunu kullanarak az identity federated-credential create federasyon kimlik bilgilerini oluşturun.

    az identity federated-credential create \
        --name ${FEDERATED_CREDENTIAL_NAME} \
        --resource-group ${RG_NAME} \
        --identity-name ${MANAGED_IDENTITY_NAME} \
        --issuer ${AKS_OIDC_ISSUER} \
        --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    

AKS'de Microsoft Entra İş Yükü Kimliği kullanma

AKS'de Microsoft Entra İş Yükü Kimliği kullanmak için dağıtım bildiriminde ai-service birkaç değişiklik yapmanız gerekir.

ServiceAccount oluşturma

  1. komutunu kullanarak kümeniz için kubeconfig değerini az aks get-credentials alın.

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. komutunu kullanarak kubectl apply bir Kubernetes ServiceAccount oluşturun.

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: ${MANAGED_IDENTITY_CLIENT_ID}
      name: ${SERVICE_ACCOUNT_NAME}
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    EOF
    

Pod'da Microsoft Entra İş Yükü Kimliği etkinleştirme

  1. Azure OpenAI kaynak adı, uç noktası ve dağıtım adı değişkenlerini ayarlayın.

    # Get the Azure OpenAI resource name
    AOAI_NAME=$(az resource list \
      --resource-group $RG_NAME \
      --resource-type Microsoft.CognitiveServices/accounts \
      --query "[0].name" -o tsv)
    
    # Get the Azure OpenAI endpoint
    AOAI_ENDPOINT=$(az cognitiveservices account show \
      --resource-group $RG_NAME \
      --name $AOAI_NAME \
      --query properties.endpoint -o tsv)
    
    # Get the Azure OpenAI deployment name
    AOAI_DEPLOYMENT_NAME=$(az cognitiveservices account deployment list  \
      --resource-group $RG_NAME \
      --name $AOAI_NAME \
      --query "[0].name" -o tsv)
    
  2. komutunu kullanarak ServiceAccount ve azure.workload.identity/use ek açıklama ayarı true ile öğesini yeniden dağıtın ai-service kubectl apply.

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
            azure.workload.identity/use: "true"
        spec:
          serviceAccountName: $SERVICE_ACCOUNT_NAME
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: ai-service
            image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest
            ports:
            - containerPort: 5001
            env:
            - name: USE_AZURE_OPENAI
              value: "True"
            - name: USE_AZURE_AD
              value: "True"
            - name: AZURE_OPENAI_DEPLOYMENT_NAME
              value: "${AOAI_DEPLOYMENT_NAME}"
            - name: AZURE_OPENAI_ENDPOINT
              value: "${AOAI_ENDPOINT}"
            resources:
              requests:
                cpu: 20m
                memory: 50Mi
              limits:
                cpu: 50m
                memory: 128Mi
    EOF
    

Uygulamayı test etme

  1. komutunu kullanarak yeni pod'un kubectl get pods çalıştığını doğrulayın.

    kubectl get pods --selector app=ai-service -w
    
  2. komutunu kullanarak pod günlüklerini kubectl logs alın. Pod'un başlatılması birkaç dakika sürebilir.

    kubectl logs --selector app=ai-service -f
    

    Aşağıdaki örnek çıktı, uygulamanın başlatıldığını ve istekleri kabul etmeye hazır olduğunu gösterir. İlk satırda kodun yapılandırma değişkenleri eksik olduğu öne sürülüyor. Ancak Azure Kimlik SDK'sı bu işlemi işler ve ve AZURE_TENANT_ID değişkenlerini ayarlarAZURE_CLIENT_ID.

    Incomplete environment configuration. These variables are set: AZURE_CLIENT_ID, AZURE_TENANT_ID
    INFO:     Started server process [1]
    INFO:     Waiting for application startup.
    INFO:     Application startup complete.
    INFO:     Uvicorn running on http://0.0.0.0:5001 (Press CTRL+C to quit)
    
  3. komutunu kullanarak kubectl describe pod pod ortam değişkenlerini alın. Çıktı, Azure OpenAI API anahtarının pod'un ortam değişkenlerinde artık mevcut olmadığını gösterir.

    kubectl describe pod --selector app=ai-service
    
  4. Yeni bir terminal açın ve aşağıdaki echo komutu kullanarak mağaza yönetici hizmetinin IP'sini alın.

    echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
  5. Bir web tarayıcısı açın ve önceki adımdaki IP adresine gidin.

  6. Ürünler'i seçin. Azure OpenAI kullanarak yeni bir ürün ekleyebilmeniz ve bunun için bir açıklama alabilmeniz gerekir.

Sonraki adımlar

Bu makalede, Microsoft Entra İş Yükü Kimliği kullanarak Azure Kubernetes Service'ten (AKS) Azure OpenAI'ye erişimin güvenliğini sağlamayı öğrendiniz.

Microsoft Entra İş Yükü Kimliği hakkında daha fazla bilgi için bkz. Microsoft Entra İş Yükü Kimliği.