Delen via


Beveiligde toegang tot Azure OpenAI vanuit Azure Kubernetes Service (AKS)

In dit artikel leert u hoe u de toegang tot Azure OpenAI kunt beveiligen vanuit Azure Kubernetes Service (AKS) met behulp van Microsoft Entra Workload-ID. U leert het volgende:

  • Schakel workloadidentiteiten in op een AKS-cluster.
  • Maak een door de gebruiker toegewezen beheerde identiteit van Azure.
  • Maak een federatieve referenties voor Microsoft Entra ID.
  • Schakel de workloadidentiteit in op een Kubernetes-pod.

Notitie

U wordt aangeraden Microsoft Entra Workload-ID en beheerde identiteiten te gebruiken in AKS voor Toegang tot Azure OpenAI, omdat hiermee een beveiligd, wachtwoordloos verificatieproces wordt ingeschakeld voor toegang tot Azure-resources.

Voordat u begint

Vereisten

Microsoft Entra Workload-ID inschakelen op een AKS-cluster

De Microsoft Entra Workload-ID- en OIDC Issuer Endpoint-functies zijn niet standaard ingeschakeld op AKS. U moet ze inschakelen in uw AKS-cluster voordat u ze kunt gebruiken.

  1. Stel de naam van de resourcegroep en de naamvariabelen van de AKS-clustergroep in.

    # 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. Schakel de Microsoft Entra Workload-ID- en OIDC Issuer Endpoint-functies in op uw bestaande AKS-cluster met behulp van de az aks update opdracht.

    az aks update \
        --resource-group $RG_NAME \
        --name $AKS_NAME \
        --enable-workload-identity \
        --enable-oidc-issuer
    
  3. Haal de eindpunt-URL van de AKS OIDC Issuer op met behulp van de az aks show opdracht.

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

Een door de gebruiker toegewezen beheerde identiteit van Azure maken

  1. Maak een door de gebruiker toegewezen beheerde identiteit van Azure met behulp van de az identity create opdracht.

    # 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. Haal de client-id en object-id van de beheerde identiteit op met behulp van de az identity show opdracht.

    # 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. Haal de Azure OpenAI-resource-id op met behulp van de az resource list opdracht.

    AOAI_RESOURCE_ID=$(az resource list --resource-group $RG_NAME --resource-type Microsoft.CognitiveServices/accounts --query "[0].id" -o tsv)
    
  4. Verdeel de beheerde identiteit toegang tot de Azure OpenAI-resource met behulp van de az role assignment create opdracht.

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

Federatieve referenties voor Microsoft Entra-id maken

  1. Stel de variabelen voor federatieve referenties, naamruimten en serviceaccounts in.

    # 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. Maak de federatieve referentie met behulp van de az identity federated-credential create opdracht.

    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}
    

Microsoft Entra Workload-ID gebruiken in AKS

Als u Microsoft Entra Workload-ID op AKS wilt gebruiken, moet u enkele wijzigingen aanbrengen in het ai-service implementatiemanifest.

Een ServiceAccount maken

  1. Haal de kubeconfig voor uw cluster op met behulp van de az aks get-credentials opdracht.

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $AKS_NAME
    
  2. Maak een Kubernetes ServiceAccount met behulp van de kubectl apply opdracht.

    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
    

Microsoft Entra Workload-ID inschakelen op de pod

  1. Stel de azure OpenAI-resourcenaam, het eindpunt en de implementatienaamvariabelen in.

    # 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. Implementeer het ai-service opnieuw met het ServiceAccount en de azure.workload.identity/use aantekening die is ingesteld op true het gebruik van de kubectl apply opdracht.

    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
    

De toepassing testen

  1. Controleer of de nieuwe pod wordt uitgevoerd met behulp van de kubectl get pods opdracht.

    kubectl get pods --selector app=ai-service -w
    
  2. Haal de podlogboeken op met behulp van de kubectl logs opdracht. Het kan enkele minuten duren voordat de pod is geïnitialiseerd.

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

    In de volgende voorbeelduitvoer ziet u dat de app is geïnitialiseerd en klaar is om aanvragen te accepteren. De eerste regel geeft aan dat de code configuratievariabelen mist. De Azure Identity SDK verwerkt dit proces echter en stelt de AZURE_CLIENT_ID en AZURE_TENANT_ID variabelen in.

    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. Haal de omgevingsvariabelen voor pods op met behulp van de kubectl describe pod opdracht. De uitvoer laat zien dat de Azure OpenAI API-sleutel niet meer bestaat in de omgevingsvariabelen van de Pod.

    kubectl describe pod --selector app=ai-service
    
  4. Open een nieuwe terminal en haal het IP-adres van de winkelbeheerdersservice op met behulp van de volgende echo opdracht.

    echo "http://$(kubectl get svc/store-admin -o jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    
  5. Open een webbrowser en navigeer naar het IP-adres uit de vorige stap.

  6. Selecteer Producten. U moet een nieuw product kunnen toevoegen en er een beschrijving voor krijgen met behulp van Azure OpenAI.

Volgende stappen

In dit artikel hebt u geleerd hoe u de toegang tot Azure OpenAI kunt beveiligen vanuit Azure Kubernetes Service (AKS) met behulp van Microsoft Entra Workload-ID.

Zie Microsoft Entra Workload-ID voor meer informatie over Microsoft Entra Workload-ID.