Säker åtkomst till Azure OpenAI från Azure Kubernetes Service (AKS)
I den här artikeln får du lära dig hur du skyddar åtkomsten till Azure OpenAI från Azure Kubernetes Service (AKS) med microsoft entra-arbetsbelastnings-ID. Du lär dig att:
- Aktivera arbetsbelastningsidentiteter i ett AKS-kluster.
- Skapa en azure-användartilldelad hanterad identitet.
- Skapa en Federerad autentiseringsuppgift för Microsoft Entra-ID.
- Aktivera arbetsbelastningsidentitet på en Kubernetes-podd.
Kommentar
Vi rekommenderar att du använder Microsoft Entra-arbetsbelastnings-ID och hanterade identiteter på AKS för Azure OpenAI-åtkomst eftersom det möjliggör en säker, lösenordsfri autentiseringsprocess för åtkomst till Azure-resurser.
Innan du börjar
- Du behöver ett Azure-konto med en aktiv prenumeration. Om du inte har något skapar du ett konto kostnadsfritt.
- Den här artikeln bygger på Distribuera ett program som använder OpenAI på AKS. Du bör slutföra den artikeln innan du påbörjar den här artikeln.
- Du behöver ett anpassat domännamn aktiverat på ditt Azure OpenAI-konto för att kunna använda för Microsoft Entra-auktorisering. Mer information finns i Anpassade underdomännamn för Azure AI-tjänster.
Förutsättningar
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Aktivera Microsoft Entra-arbetsbelastnings-ID i ett AKS-kluster
Microsoft Entra-arbetsbelastnings-ID och OIDC-utfärdarens slutpunktsfunktioner är inte aktiverade på AKS som standard. Du måste aktivera dem i ditt AKS-kluster innan du kan använda dem.
Ange resursgruppens namn och AKS-klusterresursgruppens namnvariabler.
# 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)
Aktivera microsoft Entra-arbetsbelastnings-ID och OIDC-utfärdarens slutpunktsfunktioner i ditt befintliga AKS-kluster med hjälp av
az aks update
kommandot .az aks update \ --resource-group $RG_NAME \ --name $AKS_NAME \ --enable-workload-identity \ --enable-oidc-issuer
Hämta URL:en för AKS OIDC-utfärdarens
az aks show
slutpunkt med kommandot .AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
Skapa en azure-användartilldelad hanterad identitet
Skapa en azure-användartilldelad hanterad identitet med hjälp av
az identity create
kommandot .# 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
Hämta klient-ID och objekt-ID för hanterad identitet med kommandot
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)
Hämta Azure OpenAI-resurs-ID:t med hjälp av
az resource list
kommandot .AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
Ge den hanterade identiteten åtkomst till Azure OpenAI-resursen
az role assignment create
med hjälp av kommandot .az role assignment create \ --role "Cognitive Services OpenAI User" \ --assignee-object-id $MANAGED_IDENTITY_OBJECT_ID \ --assignee-principal-type ServicePrincipal \ --scope $AOAI_RESOURCE_ID
Skapa en federerad autentiseringsuppgift för Microsoft Entra-ID
Ange variablerna federerad autentiseringsuppgift, namnrymd och tjänstkonto.
# 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
Skapa federerade autentiseringsuppgifter med kommandot
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}
Använda Microsoft Entra-arbetsbelastnings-ID på AKS
Om du vill använda Microsoft Entra-arbetsbelastnings-ID på AKS måste du göra några ändringar i distributionsmanifestet ai-service
.
Skapa ett ServiceAccount
Hämta kubeconfig för klustret med kommandot
az aks get-credentials
.az aks get-credentials \ --resource-group $RG_NAME \ --name $AKS_NAME
Skapa en Kubernetes ServiceAccount med kommandot
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
Aktivera Microsoft Entra-arbetsbelastnings-ID på podden
Ange variablerna Azure OpenAI-resursnamn, slutpunkt och distributionsnamn.
# 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)
ai-service
Distribuera om med ServiceAccount och anteckningenazure.workload.identity/use
inställdtrue
påkubectl apply
med kommandot .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
Testa programmet
Kontrollera att den nya podden körs med kommandot
kubectl get pods
.kubectl get pods --selector app=ai-service -w
Hämta poddloggarna med kommandot
kubectl logs
. Det kan ta några minuter innan podden initieras.kubectl logs --selector app=ai-service -f
Följande exempelutdata visar att appen har initierats och är redo att acceptera begäranden. Den första raden antyder att koden saknar konfigurationsvariabler. Azure Identity SDK hanterar dock den här processen och anger variablerna
AZURE_CLIENT_ID
ochAZURE_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)
Hämta miljövariablerna för poddar med hjälp av
kubectl describe pod
kommandot . Utdata visar att Azure OpenAI API-nyckeln inte längre finns i poddens miljövariabler.kubectl describe pod --selector app=ai-service
Öppna en ny terminal och hämta IP-adressen för butiksadministratörstjänsten med hjälp av följande
echo
kommando.echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Öppna en webbläsare och gå till IP-adressen från föregående steg.
Välj produkter. Du bör kunna lägga till en ny produkt och få en beskrivning av den med hjälp av Azure OpenAI.
Nästa steg
I den här artikeln har du lärt dig hur du skyddar åtkomsten till Azure OpenAI från Azure Kubernetes Service (AKS) med microsoft entra-arbetsbelastnings-ID.
Mer information om Microsoft Entra-arbetsbelastnings-ID finns i Microsoft Entra-arbetsbelastnings-ID.
Azure Kubernetes Service