Zabezpečený přístup k Azure OpenAI ze služby Azure Kubernetes Service (AKS)

V tomto článku se dozvíte, jak zabezpečit přístup k Azure OpenAI ze služby Azure Kubernetes Service (AKS) pomocí ID úloh Microsoft Entra. Získáte informace pro:

  • Povolení identit úloh v clusteru AKS
  • Vytvořte spravovanou identitu přiřazenou uživatelem Azure.
  • Vytvořte federované přihlašovací údaje Microsoft Entra ID.
  • Povolení identity úloh na podu Kubernetes

Poznámka:

Doporučujeme používat ID úloh Microsoft Entra a spravované identity v AKS pro přístup k Azure OpenAI, protože umožňuje zabezpečený proces ověřování bez hesla pro přístup k prostředkům Azure.

Než začnete

Požadavky

Povolení ID úloh Microsoft Entra v clusteru AKS

Funkce koncového bodu vystavitele ID úloh Microsoft Entra a OIDC nejsou ve výchozím nastavení v AKS povolené. Než je budete moct používat, musíte je povolit v clusteru AKS.

  1. Nastavte název skupiny prostředků a proměnné názvu skupiny prostředků clusteru 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. Pomocí příkazu povolte funkce koncového bodu vystavitele ID úloh Microsoft Entra a OIDC v existujícím az aks update clusteru AKS.

    az aks update \
        --resource-group $RG_NAME \
        --name $AKS_NAME \
        --enable-workload-identity \
        --enable-oidc-issuer
    
  3. Pomocí příkazu získejte adresu URL koncového az aks show bodu vystavitele AKS OIDC.

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

Vytvoření spravované identity přiřazené uživatelem Azure

  1. Pomocí příkazu vytvořte spravovanou identitu přiřazenou uživatelem az identity create Azure.

    # 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. Pomocí příkazu získejte ID klienta spravované identity a ID objektu 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. Pomocí příkazu získejte ID az resource list prostředku Azure OpenAI.

    AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
    
  4. Pomocí příkazu udělte spravované identitě přístup k prostředku az role assignment create Azure OpenAI.

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

Vytvoření federovanýchpřihlašovacích

  1. Nastavte federované přihlašovací údaje, obor názvů a proměnné účtu služby.

    # 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. Pomocí příkazu vytvořte federované přihlašovací údaje 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}
    

Použití ID úloh Microsoft Entra v AKS

Pokud chcete použít ID úloh Microsoft Entra v AKS, musíte v manifestu ai-service nasazení provést několik změn.

Vytvoření účtu služby

  1. Pomocí příkazu získejte kubeconfig pro váš cluster az aks get-credentials .

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. Pomocí příkazu vytvořte účet služby Kubernetes ServiceAccount 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
    

Povolení ID úloh Microsoft Entra na podu

  1. Nastavte proměnné názvu prostředku Azure OpenAI, koncového bodu a názvu nasazení.

    # 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. Znovu nasaďte ai-service serviceAccount a poznámku azure.workload.identity/use nastavenou na true kubectl apply použití příkazu.

    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
    

Testování aplikace

  1. Pomocí příkazu ověřte, že je nový pod spuštěný kubectl get pods .

    kubectl get pods --selector app=ai-service -w
    
  2. Pomocí příkazu získejte protokoly podů kubectl logs . Inicializace podu může trvat několik minut.

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

    Následující příklad výstupu ukazuje, že aplikace byla inicializována a je připravená přijímat žádosti. První řádek naznačuje, že kód chybí konfigurační proměnné. Sada Azure Identity SDK ale tento proces zpracovává a nastavuje AZURE_CLIENT_ID proměnné 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. Pomocí příkazu získejte proměnné prostředí podu kubectl describe pod . Výstup ukazuje, že klíč rozhraní API Azure OpenAI už v proměnných prostředí podu neexistuje.

    kubectl describe pod --selector app=ai-service
    
  4. Otevřete nový terminál a pomocí následujícího echo příkazu získejte IP adresu služby správce storu.

    echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
  5. Otevřete webový prohlížeč a přejděte na IP adresu z předchozího kroku.

  6. Vyberte Produkty. Měli byste být schopni přidat nový produkt a získat popis pro něj pomocí Azure OpenAI.

Další kroky

V tomto článku jste zjistili, jak zabezpečit přístup k Azure OpenAI ze služby Azure Kubernetes Service (AKS) pomocí ID úloh Microsoft Entra.

Další informace o ID úloh Microsoft Entra najdete v tématu ID úloh Microsoft Entra.