Bagikan melalui


Akses aman ke Azure OpenAI dari Azure Kubernetes Service (AKS)

Dalam artikel ini, Anda mempelajari cara mengamankan akses ke Azure OpenAI dari Azure Kubernetes Service (AKS) menggunakan ID Beban Kerja Microsoft Entra. Anda akan mempelajari cara untuk:

  • Aktifkan identitas beban kerja pada kluster AKS.
  • Membuat identitas terkelola yang ditetapkan pengguna Azure.
  • Buat kredensial federasi ID Microsoft Entra.
  • Aktifkan identitas beban kerja pada Pod Kubernetes.

Catatan

Sebaiknya gunakan ID Beban Kerja Microsoft Entra dan identitas terkelola di AKS untuk akses Azure OpenAI karena memungkinkan proses autentikasi tanpa kata sandi yang aman untuk mengakses sumber daya Azure.

Sebelum Anda mulai

Prasyarat

Mengaktifkan ID Beban Kerja Microsoft Entra pada kluster AKS

Fitur ID Beban Kerja Microsoft Entra dan Titik Akhir Pengeluar Sertifikat OIDC tidak diaktifkan di AKS secara default. Anda harus mengaktifkannya di kluster AKS sebelum dapat menggunakannya.

  1. Atur nama grup sumber daya dan variabel nama grup sumber daya kluster AKS.

    # 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. Aktifkan fitur ID Beban Kerja Microsoft Entra dan Titik Akhir Pengeluar Sertifikat OIDC pada kluster AKS yang ada menggunakan az aks update perintah .

    az aks update \
        --resource-group $RG_NAME \
        --name $AKS_NAME \
        --enable-workload-identity \
        --enable-oidc-issuer
    
  3. Dapatkan URL Titik Akhir Pengeluar Sertifikat AKS OIDC menggunakan az aks show perintah .

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

Membuat identitas terkelola yang ditetapkan pengguna Azure

  1. Buat identitas terkelola yang ditetapkan pengguna Azure menggunakan az identity create perintah .

    # 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. Dapatkan ID klien identitas terkelola dan ID objek menggunakan az identity show perintah .

    # 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. Dapatkan ID sumber daya Azure OpenAI menggunakan az resource list perintah .

    AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
    
  4. Berikan akses identitas terkelola ke sumber daya Azure OpenAI menggunakan az role assignment create perintah .

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

Membuat kredensial federasi ID Microsoft Entra

  1. Atur variabel kredensial, namespace layanan, dan akun layanan federasi.

    # 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. Buat kredensial federasi menggunakan az identity federated-credential create perintah .

    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}
    

Menggunakan ID Beban Kerja Microsoft Entra di AKS

Untuk menggunakan ID Beban Kerja Microsoft Entra di AKS, Anda perlu membuat beberapa perubahan pada ai-service manifes penyebaran.

Membuat ServiceAccount

  1. Dapatkan kubeconfig untuk kluster Anda menggunakan az aks get-credentials perintah .

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. Buat Kubernetes ServiceAccount menggunakan kubectl apply perintah .

    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
    

Aktifkan ID Beban Kerja Microsoft Entra pada Pod

  1. Atur variabel nama sumber daya, titik akhir, dan nama penyebaran Azure OpenAI.

    # 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. Sebarkan ai-service ulang dengan ServiceAccount dan anotasi yang azure.workload.identity/use diatur ke true menggunakan kubectl apply perintah .

    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
    

Uji aplikasi

  1. Verifikasi pod baru berjalan menggunakan kubectl get pods perintah .

    kubectl get pods --selector app=ai-service -w
    
  2. Dapatkan log pod menggunakan kubectl logs perintah . Mungkin perlu waktu beberapa menit untuk menginisialisasi pod.

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

    Contoh output berikut menunjukkan aplikasi telah diinisialisasi dan siap untuk menerima permintaan. Baris pertama menunjukkan kode tidak memiliki variabel konfigurasi. Namun, Azure Identity SDK menangani proses ini dan mengatur AZURE_CLIENT_ID variabel dan AZURE_TENANT_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. Dapatkan variabel lingkungan pod menggunakan kubectl describe pod perintah . Output menunjukkan bahwa kunci Azure OpenAI API tidak lagi ada dalam variabel lingkungan Pod.

    kubectl describe pod --selector app=ai-service
    
  4. Buka terminal baru dan dapatkan IP layanan admin toko menggunakan perintah berikut echo .

    echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
  5. Buka browser web dan navigasikan ke alamat IP dari langkah sebelumnya.

  6. Pilih Produk. Anda harus dapat menambahkan produk baru dan mendapatkan deskripsi untuk produk tersebut menggunakan Azure OpenAI.

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara mengamankan akses ke Azure OpenAI dari Azure Kubernetes Service (AKS) menggunakan ID Beban Kerja Microsoft Entra.

Untuk informasi selengkapnya tentang ID Beban Kerja Microsoft Entra, lihat ID Beban Kerja Microsoft Entra.