Sicherer Zugriff auf Azure OpenAI über Azure Kubernetes Service (AKS)
In diesem Artikel erfahren Sie, wie Sie den Zugriff auf Azure OpenAI über Azure Kubernetes Service (AKS) mithilfe von Microsoft Entra Workload ID schützen. Folgendes wird vermittelt:
- Aktivieren von Workloadidentitäten in einem AKS-Cluster.
- Erstellen einer in Azure benutzerseitig zugewiesenen verwalteten Identität
- Erstellen von Microsoft Entra ID-Verbundanmeldeinformationen
- Aktivieren der Workloadidentität in einem Kubernetes-Pod
Hinweis
Es wird empfohlen, Microsoft Entra Workload ID und verwaltete Identitäten in AKS für den Zugriff auf Azure OpenAI zu verwenden, da dies einen sicheren, kennwortlosen Authentifizierungsprozess für den Zugriff auf Azure-Ressourcen ermöglicht.
Voraussetzungen
- Sie benötigen ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen.
- Dieser Artikel baut auf den Artikel Bereitstellen einer Anwendung, die OpenAI in AKS verwendet auf. Sie sollten ihn lesen, bevor Sie mit diesem Artikel beginnen.
- Für die Microsoft Entra-Autorisierung benötigen Sie einen für Ihr Azure OpenAI-Konto aktivierten benutzerdefinierten Domänennamen. Weitere Informationen finden Sie unter Benutzerdefinierte Unterdomänennamen für Azure KI Services.
Voraussetzungen
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Aktivieren von Microsoft Entra Workload ID für einen AKS-Cluster
Die Features „Microsoft Entra Workload ID“ und „OIDC Issuer Endpoint“ sind in AKS standardmäßig nicht aktiviert. Sie müssen sie in Ihrem AKS-Cluster aktivieren, um Sie verwenden zu können.
Legen Sie den Ressourcengruppennamen und die Variablennamen der AKS-Clusterressourcengruppe fest.
# 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)
Aktivieren Sie mit dem Befehl
az aks update
die Features „Microsoft Entra Workload ID“ und „OIDC Issuer Endpoint“ in Ihrem vorhandenen AKS-Cluster.az aks update \ --resource-group $RG_NAME \ --name $AKS_NAME \ --enable-workload-identity \ --enable-oidc-issuer
Rufen Sie mit dem Befehl
az aks show
die AKS OIDC-Aussteller-Endpunkt-URL ab.AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
Erstellen einer in Azure benutzerseitig zugewiesenen verwalteten Identität
Erstellen Sie mit dem Befehl
az identity create
eine benutzerseitig zugewiesene verwaltete Identität in 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
Rufen Sie mit dem Befehl
az identity show
die Client- und Objekt-ID der verwalteten Identität ab.# 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)
Rufen Sie mit dem Befehl
az resource list
die Azure OpenAI-Ressourcen-ID.AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
Gewähren Sie mit dem Befehl
az role assignment create
der verwalteten Identität Zugriff auf die Azure OpenAI-Ressource.az role assignment create \ --role "Cognitive Services OpenAI User" \ --assignee-object-id $MANAGED_IDENTITY_OBJECT_ID \ --assignee-principal-type ServicePrincipal \ --scope $AOAI_RESOURCE_ID
Erstellen von Microsoft Entra ID-Verbundanmeldeinformationen
Legen Sie die Verbundanmeldeinformation, den Namespace und die Dienstkontovariablen fest.
# 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
Erstellen Sie mit dem Befehl
az identity federated-credential create
die Verbundanmeldeinformation.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}
Verwenden von Microsoft Entra Workload ID in AKS
Zum Verwenden von Microsoft Entra Workload ID in AKS müssen Sie einige Änderungen am Bereitstellungsmanifest ai-service
vornehmen.
Erstellen eines Dienstkontos (ServiceAccount)
Rufen Sie mit dem Befehl
az aks get-credentials
die kubeconfig für Ihren Cluster ab.az aks get-credentials \ --resource-group $RG_NAME \ --name $AKS_NAME
Erstellen Sie mit dem Befehl
kubectl apply
ein Kubernetes-Dienstkonto.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
Aktivieren von Microsoft Entra Workload ID im Pod
Legen Sie die folgenden Variablen fest: Azure OpenAI-Ressourcenname, Endpunkt und Bereitstellungsname.
# 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)
Stellen Sie den
ai-service
erneut bereit, wobei Sie den ServiceAccount und die Anmerkungazure.workload.identity/use
mithilfe des Befehlskubectl apply
auftrue
festlegen.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
Testen der App
Überprüfen Sie mit dem Befehl
kubectl get pods
, ob der neue Pod ausgeführt wird.kubectl get pods --selector app=ai-service -w
Rufen Sie mit dem Befehl
kubectl logs
die Podprotokolle ab. Es kann einige Minuten dauern, bis der Pod initialisiert ist.kubectl logs --selector app=ai-service -f
Die folgende Beispielausgabe zeigt, dass die Anwendung initialisiert wurde und bereit ist, Anforderungen entgegenzunehmen. Die erste Zeile deutet darauf hin, dass im Code Konfigurationsvariablen fehlen. Allerdings übernimmt das Azure Identity-SDK diesen Prozess und legt die Variablen
AZURE_CLIENT_ID
undAZURE_TENANT_ID
fest.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)
Rufen Sie mit die Befehl
kubectl describe pod
die Umgebungsvariablen des Pods ab. Die Ausgabe zeigt, dass der Azure OpenAI-API-Schlüssel in den Umgebungsvariablen des Pods nicht mehr vorhanden ist.kubectl describe pod --selector app=ai-service
Öffnen Sie ein neues Terminal, und rufen Sie die IP-Adresse des Speicheradministratordiensts mithilfe des folgenden
echo
-Befehls ab.echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Öffnen Sie einen Webbrowser und navigieren Sie zur IP-Adresse des vorherigen Schritts.
Wählen Sie Produkte aus. Sie sollten nun in Azure OpenAI ein neues Produkt hinzufügen und eine Beschreibung dafür erhalten können.
Nächste Schritte
In diesem Artikel haben Sie erfahren, wie Sie den Zugriff auf Azure OpenAI über Azure Kubernetes Service (AKS) mithilfe von Microsoft Entra Workload ID schützen.
Weitere Informationen zu Microsoft Entra Workload ID finden Sie unter Microsoft Entra Workload ID.
Azure Kubernetes Service