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 Tożsamość obciążeń Microsoft Entra. Dowiedz się, jak odbywa się:

  • Włączanie tożsamości obciążeń w klastrze usługi AKS.
  • Utwórz tożsamość zarządzaną przypisaną przez użytkownika platformy Azure.
  • Utwórz poświadczenia federacyjne identyfikatora Entra firmy Microsoft.
  • Włączanie tożsamości obciążenia na zasobniku Kubernetes.

Uwaga

Zalecamy używanie tożsamości Tożsamość obciążeń Microsoft Entra i zarządzanych w usłudze AKS na potrzeby dostępu do usługi Azure OpenAI, ponieważ umożliwia bezpieczny, bez hasła proces uwierzytelniania na potrzeby uzyskiwania dostępu do zasobów platformy Azure.

Zanim rozpoczniesz

Wymagania wstępne

Włączanie Tożsamość obciążeń Microsoft Entra w klastrze usługi AKS

Funkcje punktu końcowego wystawcy Tożsamość obciążeń Microsoft Entra i 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 nazwy grupy zasobów i grupy zasobów klastra usługi AKS.

    # 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. Włącz funkcje punktu końcowego wystawcy Tożsamość obciążeń Microsoft Entra i OIDC w istniejącym klastrze usługi AKS przy użyciu az aks update polecenia .

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

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

Tworzenie tożsamości zarządzanej przypisanej przez użytkownika platformy 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 przy użyciu az identity show polecenia .

    # 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 przy użyciu az resource list polecenia .

    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 przy użyciu az role assignment create polecenia .

    az role assignment create \
        --role "Cognitive Services OpenAI User" \
        --assignee-object-id $MANAGED_IDENTITY_OBJECT_ID \
        --assignee-principal-type ServicePrincipal \
        --scope $AOAI_RESOURCE_ID
    

Tworzenie poświadczeń federacyjnych identyfikatora entra firmy Microsoft

  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}
    

Używanie Tożsamość obciążeń Microsoft Entra w usłudze AKS

Aby użyć Tożsamość obciążeń Microsoft Entra w usłudze AKS, należy wprowadzić kilka zmian w ai-service manifeście wdrożenia.

Tworzenie konta usługi

  1. Pobierz narzędzie kubeconfig dla klastra az aks get-credentials przy użyciu polecenia .

    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łączanie Tożsamość obciążeń Microsoft Entra na zasobniku

  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 wdróż element ai-service przy użyciu parametru ServiceAccount i azure.workload.identity/use adnotacji ustawionej kubectl apply na true polecenie .

    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 przy użyciu kubectl get pods polecenia .

    kubectl get pods --selector app=ai-service -w
    
  2. Pobierz dzienniki zasobnika przy użyciu kubectl logs polecenia . Zainicjowanie zasobnika może potrwać kilka minut.

    kubectl logs --selector app=ai-service -f
    

    Poniższe przykładowe dane wyjściowe pokazują, że aplikacja została zainicjowana i jest gotowa do akceptowania żądań. Pierwszy wiersz sugeruje, że w kodzie brakuje zmiennych konfiguracji. Jednak zestaw SDK tożsamości platformy Azure obsługuje ten proces i ustawia AZURE_CLIENT_ID zmienne i 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. Pobierz zmienne środowiskowe zasobnika przy użyciu kubectl describe pod polecenia . Dane wyjściowe pokazują, że klucz interfejsu API usługi Azure OpenAI nie istnieje już w zmiennych środowiskowych zasobnika.

    kubectl describe pod --selector app=ai-service
    
  4. 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}')"
    
  5. Otwórz przeglądarkę internetową i przejdź do adresu IP z poprzedniego kroku.

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

Następne 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 Tożsamość obciążeń Microsoft Entra.

Aby uzyskać więcej informacji na temat Tożsamość obciążeń Microsoft Entra, zobacz Tożsamość obciążeń Microsoft Entra.