Share via


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

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.

  1. 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)
    
  2. 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
    
  3. 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

  1. 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
    
  2. 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)
    
  3. 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)
    
  4. 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

  1. 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
    
  2. 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)

  1. 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
    
  2. 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

  1. 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)
    
  2. Stellen Sie den ai-service erneut bereit, wobei Sie den ServiceAccount und die Anmerkung azure.workload.identity/use mithilfe des Befehls kubectl apply auf true 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

  1. Überprüfen Sie mit dem Befehl kubectl get pods, ob der neue Pod ausgeführt wird.

    kubectl get pods --selector app=ai-service -w
    
  2. 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 und AZURE_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)
    
  3. 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
    
  4. Ö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}')"
    
  5. Öffnen Sie einen Webbrowser und navigieren Sie zur IP-Adresse des vorherigen Schritts.

  6. 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.