Udostępnij przez


Bezpieczny dostęp do usługi Azure OpenAI z poziomu usługi Azure Kubernetes Service (AKS)

Z tego artykułu dowiesz się, jak zabezpieczyć dostęp do usługi Azure OpenAI z poziomu usługi Azure Kubernetes Service (AKS) przy użyciu identyfikatora obciążenia entra firmy Microsoft. Uczysz się, jak:

  • Włącz tożsamości obciążeń w klastrze AKS.
  • Utwórz tożsamość zarządzaną przypisaną przez użytkownika platformy Azure.
  • Utwórz uwierzytelnienia federacyjne Microsoft Entra ID.
  • Włącz tożsamość środowiska pracy na zasobniku Kubernetes.

Note

Zalecamy użycie Microsoft Entra Workload ID i zarządzanych tożsamości w AKS do uzyskania dostępu do Azure OpenAI, ponieważ umożliwiają one bezpieczny proces uwierzytelniania bez użycia hasła do zasobów platformy Azure.

Zanim rozpoczniesz

Prerequisites

Włączanie identyfikatora obciążenia entra firmy Microsoft w klastrze usługi AKS

Funkcjonalności Microsoft Entra Workload ID i punkt końcowy wystawcy OIDC nie są domyślnie włączone w usłudze AKS. Aby można było ich używać, należy je włączyć w klastrze usługi AKS.

  1. Ustaw zmienne dotyczące nazw grupy zasobów i grupy zasobów klastra AKS.

    # 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. Włącz funkcje Microsoft Entra Workload ID i OIDC Issuer Endpoint w istniejącym klastrze usługi AKS za pomocą polecenia az aks update.

    az aks update \
        --resource-group $RG_NAME \
        --name $AKS_NAME \
        --enable-workload-identity \
        --enable-oidc-issuer
    
  3. Aby uzyskać adres URL punktu końcowego wystawcy usługi AKS OIDC, użyj polecenia az aks show.

    AKS_OIDC_ISSUER=$(az aks show --resource-group $RG_NAME --name $AKS_NAME --query "oidcIssuerProfile.issuerUrl" -o tsv)
    

Utwórz przypisaną przez użytkownika tożsamość zarządzaną w usłudze Azure

  1. Utwórz tożsamość zarządzaną przypisaną przez użytkownika platformy Azure przy użyciu az identity create polecenia .

    # 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. Pobierz identyfikator klienta tożsamości zarządzanej i identyfikator obiektu za pomocą polecenia 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. Pobierz identyfikator zasobu usługi Azure OpenAI za pomocą polecenia az resource list.

    AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
    
  4. Udziel tożsamości zarządzanej dostępu do zasobu usługi Azure OpenAI za pomocą polecenia 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
    

Utworzenie federacyjnych poświadczeń Microsoft Entra ID

  1. Ustaw zmienne poświadczeń federacyjnych, przestrzeni nazw i konta usługi.

    # 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. Utwórz poświadczenie federacyjne przy użyciu az identity federated-credential create polecenia .

    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}
    

Korzystanie z Identyfikatora Obciążenia Roboczego Entra firmy Microsoft w usłudze AKS

Aby użyć Microsoft Entra Workload ID w usłudze AKS, należy wprowadzić kilka zmian w manifeście wdrożenia ai-service.

Tworzenie konta usługi

  1. Uzyskaj kubeconfig dla klastra przy użyciu polecenia az aks get-credentials.

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. Utwórz konto usługi Kubernetes ServiceAccount przy użyciu kubectl apply polecenia .

    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
    

Włącz identyfikator obciążenia Microsoft Entra na Podzie

  1. Ustaw zmienne nazwy zasobu usługi Azure OpenAI, punktu końcowego i nazwy wdrożenia.

    # 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. Ponownie wdroż ai-service z kontem usługi oraz z adnotacją azure.workload.identity/use ustawioną na true przy użyciu polecenia kubectl apply.

    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
    

Testowanie aplikacji

  1. Sprawdź, czy nowy zasobnik jest uruchomiony za pomocą polecenia kubectl get pods.

    kubectl get pods --selector app=ai-service
    
  2. Pobierz zmienne środowiskowe zasobnika przy użyciu kubectl describe pod polecenia . Dane wyjściowe pokazują, że klucz API Azure OpenAI już nie istnieje w zmiennych środowiskowych pod-u.

    kubectl describe pod --selector app=ai-service
    
  3. Otwórz nowy terminal i uzyskaj adres IP usługi administracyjnej magazynu przy użyciu następującego echo polecenia.

    echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
  4. Otwórz przeglądarkę internetową i przejdź do adresu IP z poprzedniego kroku.

  5. Wybierz produkt . Powinien być w stanie dodać nowy produkt i uzyskać opis przy użyciu usługi Azure OpenAI.

Dalsze kroki

W tym artykule przedstawiono sposób zabezpieczania dostępu do usługi Azure OpenAI z poziomu usługi Azure Kubernetes Service (AKS) przy użyciu identyfikatora obciążenia entra firmy Microsoft.

Aby uzyskać więcej informacji na temat identyfikatora obciążenia entra firmy Microsoft, zobacz Identyfikator obciążenia entra firmy Microsoft.