Share via


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

Förutsättningar

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.

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

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

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

  1. Hämta kubeconfig för klustret med kommandot az aks get-credentials .

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. 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

  1. 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)
    
  2. ai-service Distribuera om med ServiceAccount och anteckningen azure.workload.identity/use inställd truekubectl 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

  1. Kontrollera att den nya podden körs med kommandot kubectl get pods .

    kubectl get pods --selector app=ai-service -w
    
  2. 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 och 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)
    
  3. 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
    
  4. Ö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}')"
    
  5. Öppna en webbläsare och gå till IP-adressen från föregående steg.

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