Dela via


Använda Microsoft Entra-autentisering för den lokala gatewayen

GÄLLER FÖR: Utvecklare | Premium

Den lokala Azure API Management-gatewayen behöver anslutning till sin associerade molnbaserade API Management-instans för rapporteringsstatus, kontroll av och tillämpning av konfigurationsuppdateringar samt sändning av mått och händelser.

Förutom att använda en gatewayåtkomsttoken (autentiseringsnyckel) för att ansluta till sin molnbaserade API Management-instans kan du göra så att den lokala gatewayen kan autentisera till sin associerade molninstans med hjälp av en Microsoft Entra-app. Med Microsoft Entra-autentisering kan du konfigurera längre förfallotider för hemligheter och använda standardsteg för att hantera och rotera hemligheter i Active Directory.

Scenarioöversikt

Konfigurations-API:et för lokalt installerad gateway kan kontrollera Azure RBAC för att avgöra vem som har behörighet att läsa gatewaykonfigurationen. När du har skapat en Microsoft Entra-app med dessa behörigheter kan den lokala gatewayen autentisera till API Management-instansen med hjälp av appen.

Utför följande steg för att aktivera Microsoft Entra-autentisering:

  1. Skapa två anpassade roller för att:
    • Låt konfigurations-API:et få åtkomst till kundens RBAC-information
    • Bevilja behörigheter för att läsa gatewaykonfiguration med egen värd
  2. Bevilja RBAC åtkomst till API Management-instansens hanterade identitet
  3. Skapa en Microsoft Entra-app och ge den åtkomst till att läsa gatewaykonfigurationen
  4. Distribuera gatewayen med nya konfigurationsalternativ

Förutsättningar

Anteckningar om begränsningar

  • Endast systemtilldelad hanterad identitet stöds.

Skapa anpassade roller

Skapa följande två anpassade roller som tilldelas i senare steg. Du kan använda de behörigheter som anges i följande JSON-mallar för att skapa anpassade roller med hjälp av Azure-portalen, Azure CLI, Azure PowerShell eller andra Azure-verktyg.

När du konfigurerar de anpassade rollerna uppdaterar AssignableScopes du egenskapen med lämpliga omfångsvärden för din katalog, till exempel en prenumeration där DIN API Management-instans distribueras.

API Management Configuration API Access Validator Service Role

{
  "Description": "Can access RBAC permissions on the API Management resource to authorize requests in Configuration API.",
  "IsCustom": true,
  "Name": "API Management Configuration API Access Validator Service Role",
  "Permissions": [
    {
      "Actions": [
        "Microsoft.Authorization/*/read"
      ],
      "NotActions": [],
      "DataActions": [],
      "NotDataActions": []
    }
  ],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionID}"
  ]
}

Konfigurationsläsarroll för API Management Gateway

{
  "Description": "Can read self-hosted gateway configuration from Configuration API",
  "IsCustom": true,
  "Name": "API Management Gateway Configuration Reader Role",
  "Permissions": [
    {
      "Actions": [],
      "NotActions": [],
      "DataActions": [
        "Microsoft.ApiManagement/service/gateways/getConfiguration/action"
      ],
      "NotDataActions": []
    }
  ],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionID}"
  ]
}

Lägga till rolltilldelningar

Tilldela API Management Configuration API Access Validator Service Role

Tilldela API Management Configuration API Access Validator Service Role till den hanterade identiteten för API Management-instansen. Detaljerade steg för att tilldela en roll finns i Tilldela Azure-roller med hjälp av portalen.

  • Omfång: Resursgruppen eller prenumerationen där API Management-instansen distribueras
  • Roll: API Management Configuration API Access Validator Service Role
  • Tilldela åtkomst till: Hanterad identitet för API Management-instans

Tilldela API Management Gateway-konfigurationsläsarroll

Steg 1: Registrera Microsoft Entra-appen

Skapa en ny Microsoft Entra-app. Anvisningar finns i Skapa ett Microsoft Entra-program och tjänstens huvudnamn som kan komma åt resurser. Den här appen används av den lokala gatewayen för att autentisera till API Management-instansen.

  • Generera en klienthemlighet
  • Anteckna följande programvärden för användning i nästa avsnitt när du distribuerar den lokalt installerade gatewayen: program-ID(klient)-ID, katalog-ID (klient) och klienthemlighet

Steg 2: Tilldela tjänstrollen Konfigurationsläsare för API Management Gateway

Tilldela api Management Gateway Configuration Reader Service-rollen till appen.

  • Omfång: API Management-instansen (eller resursgruppen eller prenumerationen där den distribueras)
  • Roll: Konfigurationsläsarroll för API Management Gateway
  • Tilldela åtkomst till: Microsoft Entra-app

Distribuera den lokalt installerade gatewayen

Distribuera den lokalt installerade gatewayen till Kubernetes och lägg till registreringsinställningar för Microsoft Entra-appar i data gatewayelementet ConfigMap. I följande exempel på YAML-konfigurationsfilen heter gatewayen mygw och filen heter mygw.yaml.

Viktigt!

Om du följer den befintliga kubernetes-distributionsvägledningen:

  • Se till att utelämna steget för att lagra standardautentiseringsnyckeln kubectl create secret generic med kommandot .
  • Ersätt följande grundläggande konfigurationsfil med yaml-standardfilen som genereras åt dig i Azure-portalen. Följande fil lägger till Microsoft Entra-konfiguration i stället för konfiguration för att använda en autentiseringsnyckel.
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mygw-env
  labels:
    app: mygw
data:
  config.service.endpoint: "<service-name>.configuration.azure-api.net"
  config.service.auth: azureAdApp 
  config.service.auth.azureAd.authority: "https://login.microsoftonline.com"  
  config.service.auth.azureAd.tenantId: "<Azure AD tenant ID>" 
  config.service.auth.azureAd.clientId: "<Azure AD client ID>" 
  config.service.auth.azureAd.clientSecret: "<Azure AD client secret>"
  gateway.name: <gateway-id>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mygw
  labels:
    app: mygw
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mygw
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 25%
  template:
    metadata:
      labels:
        app: mygw
    spec:
      terminationGracePeriodSeconds: 60
      containers:
      - name: mygw
        image: mcr.microsoft.com/azure-api-management/gateway:v2
        ports:
        - name: http
          containerPort: 8080
        - name: https
          containerPort: 8081
          # Container port used for rate limiting to discover instances
        - name: rate-limit-dc
          protocol: UDP
          containerPort: 4290
          # Container port used for instances to send heartbeats to each other
        - name: dc-heartbeat
          protocol: UDP
          containerPort: 4291
        readinessProbe:
          httpGet:
            path: /status-0123456789abcdef
            port: http
            scheme: HTTP
          initialDelaySeconds: 0
          periodSeconds: 5
          failureThreshold: 3
          successThreshold: 1
        envFrom:
        - configMapRef:
            name: mygw-env
---
apiVersion: v1
kind: Service
metadata:
  name: mygw-live-traffic
  labels:
    app: mygw
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8081
  selector:
    app: mygw
---
apiVersion: v1
kind: Service
metadata:
  name: mygw-instance-discovery
  labels:
    app: mygw
  annotations:
    azure.apim.kubernetes.io/notes: "Headless service being used for instance discovery of self-hosted gateway"
spec:
  clusterIP: None
  type: ClusterIP
  ports:
  - name: rate-limit-discovery
    port: 4290
    targetPort: rate-limit-dc
    protocol: UDP
  - name: discovery-heartbeat
    port: 4291
    targetPort: dc-heartbeat
    protocol: UDP
  selector:
    app: mygw

Distribuera gatewayen till Kubernetes med följande kommando:

kubectl apply -f mygw.yaml

Bekräfta att gatewayen körs

  1. Kör följande kommando för att kontrollera om distributionen lyckades. Det kan ta lite tid innan alla objekt skapas och att poddarna initieras.

    kubectl get deployments
    

    Den bör returnera

    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    <gateway-name>   1/1     1            1           18s
    
  2. Kör följande kommando för att kontrollera om tjänsterna har skapats. Dina tjänst-IP-adresser och portar kommer att vara olika.

    kubectl get services
    

    Den bör returnera

    NAME                                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    <gateway-name>-live-traffic         ClusterIP      None            <none>        4290/UDP,4291/UDP   9m1s
    <gateway-name>-instance-discovery   LoadBalancer   10.99.236.168   <pending>     80:31620/TCP,443:30456/TCP   9m1s
    
  3. Gå tillbaka till Azure-portalen och välj Översikt.

  4. Bekräfta att Status visar en grön bockmarkering följt av ett nodantal som matchar antalet repliker som anges i YAML-filen. Den här statusen innebär att de distribuerade lokala gatewaypoddarna kommunicerar med API Management-tjänsten och har ett regelbundet "pulsslag". Skärmbild som visar status för en lokalt installerad gateway i portalen.

Dricks

  • kubectl logs deployment/<gateway-name> Kör kommandot för att visa loggar från en slumpmässigt vald podd om det finns fler än en.
  • Kör kubectl logs -h för en fullständig uppsättning kommandoalternativ, till exempel hur du visar loggar för en specifik podd eller container.

Nästa steg