Zabezpečený přístup k Azure OpenAI ze služby Azure Kubernetes Service (AKS)
V tomto článku se dozvíte, jak zabezpečit přístup k Azure OpenAI ze služby Azure Kubernetes Service (AKS) pomocí ID úloh Microsoft Entra. Získáte informace pro:
- Povolení identit úloh v clusteru AKS
- Vytvořte spravovanou identitu přiřazenou uživatelem Azure.
- Vytvořte federované přihlašovací údaje Microsoft Entra ID.
- Povolení identity úloh na podu Kubernetes
Poznámka:
Doporučujeme používat ID úloh Microsoft Entra a spravované identity v AKS pro přístup k Azure OpenAI, protože umožňuje zabezpečený proces ověřování bez hesla pro přístup k prostředkům Azure.
Než začnete
- Potřebujete účet Azure s aktivním předplatným. Pokud ho nemáte, vytvořte si účet zdarma.
- Tento článek vychází z nasazení aplikace, která používá OpenAI v AKS. Než začnete s tímto článkem, měli byste ho dokončit.
- Pro použití pro autorizaci Microsoft Entra potřebujete pro účet Azure OpenAI povolený vlastní název domény. Další informace najdete v tématu Názvy vlastních subdomén pro služby Azure AI.
Požadavky
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Povolení ID úloh Microsoft Entra v clusteru AKS
Funkce koncového bodu vystavitele ID úloh Microsoft Entra a OIDC nejsou ve výchozím nastavení v AKS povolené. Než je budete moct používat, musíte je povolit v clusteru AKS.
Nastavte název skupiny prostředků a proměnné názvu skupiny prostředků clusteru 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)
Pomocí příkazu povolte funkce koncového bodu vystavitele ID úloh Microsoft Entra a OIDC v existujícím
az aks update
clusteru AKS.az aks update \ --resource-group $RG_NAME \ --name $AKS_NAME \ --enable-workload-identity \ --enable-oidc-issuer
Pomocí příkazu získejte adresu URL koncového
az aks show
bodu vystavitele AKS OIDC.AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
Vytvoření spravované identity přiřazené uživatelem Azure
Pomocí příkazu vytvořte spravovanou identitu přiřazenou uživatelem
az identity create
Azure.# 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
Pomocí příkazu získejte ID klienta spravované identity a ID objektu
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)
Pomocí příkazu získejte ID
az resource list
prostředku Azure OpenAI.AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
Pomocí příkazu udělte spravované identitě přístup k prostředku
az role assignment create
Azure OpenAI.az role assignment create \ --role "Cognitive Services OpenAI User" \ --assignee-object-id $MANAGED_IDENTITY_OBJECT_ID \ --assignee-principal-type ServicePrincipal \ --scope $AOAI_RESOURCE_ID
Vytvoření federovanýchpřihlašovacích
Nastavte federované přihlašovací údaje, obor názvů a proměnné účtu služby.
# 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
Pomocí příkazu vytvořte federované přihlašovací údaje
az identity federated-credential create
.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}
Použití ID úloh Microsoft Entra v AKS
Pokud chcete použít ID úloh Microsoft Entra v AKS, musíte v manifestu ai-service
nasazení provést několik změn.
Vytvoření účtu služby
Pomocí příkazu získejte kubeconfig pro váš cluster
az aks get-credentials
.az aks get-credentials \ --resource-group $RG_NAME \ --name $AKS_NAME
Pomocí příkazu vytvořte účet služby Kubernetes ServiceAccount
kubectl apply
.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
Povolení ID úloh Microsoft Entra na podu
Nastavte proměnné názvu prostředku Azure OpenAI, koncového bodu a názvu nasazení.
# 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)
Znovu nasaďte
ai-service
serviceAccount a poznámkuazure.workload.identity/use
nastavenou natrue
kubectl apply
použití příkazu.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
Testování aplikace
Pomocí příkazu ověřte, že je nový pod spuštěný
kubectl get pods
.kubectl get pods --selector app=ai-service -w
Pomocí příkazu získejte protokoly podů
kubectl logs
. Inicializace podu může trvat několik minut.kubectl logs --selector app=ai-service -f
Následující příklad výstupu ukazuje, že aplikace byla inicializována a je připravená přijímat žádosti. První řádek naznačuje, že kód chybí konfigurační proměnné. Sada Azure Identity SDK ale tento proces zpracovává a nastavuje
AZURE_CLIENT_ID
proměnné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)
Pomocí příkazu získejte proměnné prostředí podu
kubectl describe pod
. Výstup ukazuje, že klíč rozhraní API Azure OpenAI už v proměnných prostředí podu neexistuje.kubectl describe pod --selector app=ai-service
Otevřete nový terminál a pomocí následujícího
echo
příkazu získejte IP adresu služby správce storu.echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Otevřete webový prohlížeč a přejděte na IP adresu z předchozího kroku.
Vyberte Produkty. Měli byste být schopni přidat nový produkt a získat popis pro něj pomocí Azure OpenAI.
Další kroky
V tomto článku jste zjistili, jak zabezpečit přístup k Azure OpenAI ze služby Azure Kubernetes Service (AKS) pomocí ID úloh Microsoft Entra.
Další informace o ID úloh Microsoft Entra najdete v tématu ID úloh Microsoft Entra.
Azure Kubernetes Service