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
- Anda memerlukan akun Azure dengan langganan aktif. Jika Anda tidak memilikinya, buat akun secara gratis.
- Artikel ini dibuat pada Menyebarkan aplikasi yang menggunakan OpenAI di AKS. Anda harus menyelesaikan artikel tersebut sebelum memulai artikel ini.
- Anda memerlukan nama domain kustom yang diaktifkan di akun Azure OpenAI Anda untuk digunakan untuk otorisasi Microsoft Entra. Untuk informasi selengkapnya, lihat Nama subdomain kustom untuk layanan Azure AI.
Prasyarat
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
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.
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)
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
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
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
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)
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)
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
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
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
Dapatkan kubeconfig untuk kluster Anda menggunakan
az aks get-credentials
perintah .az aks get-credentials \ --resource-group $RG_NAME \ --name $AKS_NAME
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
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)
Sebarkan
ai-service
ulang dengan ServiceAccount dan anotasi yangazure.workload.identity/use
diatur ketrue
menggunakankubectl 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
Verifikasi pod baru berjalan menggunakan
kubectl get pods
perintah .kubectl get pods --selector app=ai-service -w
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 danAZURE_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)
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
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}')"
Buka browser web dan navigasikan ke alamat IP dari langkah sebelumnya.
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.
Azure Kubernetes Service