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
- Potrzebujesz konta platformy Azure z aktywną subskrypcją. Jeśli go nie masz, utwórz bezpłatne konto.
- Ten artykuł jest oparty na temacie Deploy an application that uses OpenAI on AKS (Wdrażanie aplikacji korzystającej z interfejsu OpenAI w usłudze AKS). Przed rozpoczęciem tego artykułu należy ukończyć ten artykuł.
- Do użycia na potrzeby autoryzacji firmy Microsoft potrzebna jest niestandardowa nazwa domeny włączona na koncie usługi Azure OpenAI. Aby uzyskać więcej informacji, zobacz Niestandardowe nazwy poddomeny dla usług Azure AI.
Wymagania wstępne
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
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.
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)
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
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
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
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)
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)
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
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
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
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
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
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)
Ponownie wdróż element
ai-service
przy użyciu parametru ServiceAccount iazure.workload.identity/use
adnotacji ustawionejkubectl apply
natrue
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
Sprawdź, czy nowy zasobnik jest uruchomiony przy użyciu
kubectl get pods
polecenia .kubectl get pods --selector app=ai-service -w
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 iAZURE_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)
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
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}')"
Otwórz przeglądarkę internetową i przejdź do adresu IP z poprzedniego kroku.
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.
Azure Kubernetes Service