Freigeben über


Sicherer Zugriff auf Azure OpenAI von 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 sichern. Folgendes wird vermittelt:

  • Aktivieren von Workloadidentitäten in einem AKS-Cluster.
  • Erstellen einer benutzerzugewiesenen verwalteten Azure-Identität.
  • Erstellen Sie Microsoft Entra ID-Verbundanmeldeinformationen.
  • Aktivieren der Workload-Identität auf einem Kubernetes-Pod

Hinweis

Es wird empfohlen, Microsoft Entra Workload ID und verwaltete Identitäten auf AKS für Azure OpenAI-Zugriff zu verwenden, da dadurch ein sicherer, kennwortloser Authentifizierungsprozess für den Zugriff auf Azure Ressourcen ermöglicht wird.

Bevor Sie beginnen

  • 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.
  • Sie benötigen einen benutzerdefinierten Domänennamen, der für Ihr Azure OpenAI-Konto aktiviert ist, um Microsoft Entra Autorisierung zu verwenden. Weitere Informationen finden Sie unter benutzerdefinierte Unterdomänennamen für Foundry Tools.

Voraussetzungen

  • Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Get started with Azure Cloud Shell.

  • Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, install die Azure CLI. Wenn Sie Windows oder macOS verwenden, sollten Sie Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter How to run the Azure CLI in a Docker container.

    • Wenn Sie eine lokale Installation verwenden, melden Sie sich mit dem Befehl az login beim Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mit Azure CLI.

    • Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Use and manage extensions with the 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 in einem AKS-Cluster

Die Features Microsoft Entra Workload ID und OIDC Issuer Endpoint sind standardmäßig nicht auf AKS 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 name based on the 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 die Microsoft Entra Workload ID- und OIDC-Issuer-Endpoint-Feature auf Ihrem vorhandenen AKS-Cluster mithilfe des az aks update-Befehls.

    az aks update \
        --resource-group $RG_NAME \
        --name $AKS_NAME \
        --enable-workload-identity \
        --enable-oidc-issuer
    
  3. Rufen Sie mit dem Befehl 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 vom Benutzer zugewiesenen verwalteten Azure-Identität

  1. Erstellen Sie eine Azure vom Benutzer zugewiesene verwaltete Identität mithilfe des Befehls az identity create.

    # 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 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 die Azure OpenAI-Ressourcen-ID mithilfe des Befehls az resource list ab.

    AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
    
  4. Gewähren Sie den verwalteten Identitätszugriff auf die Azure OpenAI-Ressource mithilfe des Befehls az role assignment create.

    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 „“ 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 Sie Microsoft Entra Workload ID in AKS

Um Microsoft Entra Workload ID auf AKS zu verwenden, müssen Sie einige Änderungen am ai-service-Bereitstellungsmanifest vornehmen.

Erstellen eines Dienstkontos (ServiceAccount)

  1. Rufen Sie mit dem Befehl die kubeconfig für Ihren Cluster ab.

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. Erstellen Sie mit dem Befehl 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 auf dem Pod

  1. Legen Sie die variablen Azure OpenAI-Ressourcennamen, Endpunkt und Bereitstellungsnamen fest.

    # 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 erneut bereit, wobei Sie den ServiceAccount und die Anmerkung mithilfe des Befehls „“ auf „“ 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 „“, ob der neue Pod ausgeführt wird.

    kubectl get pods --selector app=ai-service
    
  2. Rufen Sie mit dem Befehl die Umgebungsvariablen des Pods ab. Die Ausgabe zeigt, dass der Azure OpenAI-API-Schlüssel in den Umgebungsvariablen von Pod nicht mehr vorhanden ist.

    kubectl describe pod --selector app=ai-service
    
  3. Öffnen Sie ein neues Terminal, und rufen Sie die IP-Adresse des Speicheradministratordiensts mithilfe des folgenden -Befehls ab.

    echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
  4. Öffnen Sie einen Webbrowser und navigieren Sie zur IP-Adresse des vorherigen Schritts.

  5. Wählen Sie Produkte aus. Sie sollten in der Lage sein, ein neues Produkt hinzuzufügen und eine Beschreibung dafür mithilfe von Azure OpenAI zu erhalten.

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

Weitere Informationen zu Microsoft Entra Workload ID finden Sie unter Microsoft Entra Workload ID.