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 oleh pengguna di Azure.
  • Buat kredensial terfederasi Microsoft Entra ID.
  • 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 Endpoint Penerbit OIDC pada kluster AKS yang ada menggunakan perintah az aks update.

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

    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 dengan menggunakan perintah az identity create.

    # 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 perintah az identity show.

    # 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 ID Microsoft Entra yang difederasi

  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}
    

Gunakan ID Beban Kerja Microsoft Entra di AKS

Untuk menggunakan Microsoft Entra Workload ID di AKS, Anda perlu melakukan beberapa penyesuaian pada ai-service manifes penyebaran.

Membuat ServiceAccount

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

    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 Microsoft Entra Workload ID di dalam 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 ulang ai-service dengan ServiceAccount dan anotasi yang azure.workload.identity/use diatur ke true menggunakan perintah 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
    

Uji aplikasi

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

    kubectl get pods --selector app=ai-service -w
    
  2. Dapatkan log pod menggunakan perintah kubectl logs. 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 menetapkan AZURE_CLIENT_ID dan AZURE_TENANT_ID variabel.

    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 perintah kubectl describe pod. 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.