GKE-Gateway Richtlinien hinzufügen

Diese Seite gilt für Apigee, aber nicht für Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

Auf dieser Seite wird beschrieben, wie Sie dem GKE-Gateway (Google Kubernetes Engine) mit dem Apigee APIM-Operator für Kubernetes (Vorabversion) Apigee-Laufzeitrichtlinien und eine Google Richtlinie für die Token-Injektion hinzufügen. Wenn Sie dem Gateway eine Reihe verfügbarer Richtlinien hinzufügen, können Sie die Funktionalität des Gateways über die Durchsetzung von API-Produkten hinaus auf zusätzliche Sicherheits- und Geschäftsregeln ausweiten.

Mit dem Apigee APIM-Operator für Kubernetes können Sie dem Gateway die folgenden Richtlinien hinzufügen:

Übersicht

In den folgenden Abschnitten wird Folgendes beschrieben:

Hinweise

Wenn Sie Ihr GKE-Gateway mit der vollständigen Richtlinie ändern möchten, die in diesem Leitfaden als Beispiel verwendet wird, benötigen Sie ein Dienstkonto mit den Rollen, die zum Erstellen von Tokens in Apigee und zum Bereitstellen von Proxys und Erweiterungen erforderlich sind. Wenn Sie Google Tokens nicht erstellen möchten, müssen Sie Ihrem Dienstkonto keine zusätzlichen Rollen hinzufügen und können mit dem nächsten Abschnitt fortfahren.

So erstellen Sie ein Dienstkonto mit den erforderlichen Berechtigungen:

  1. Wenn Sie im Installationsleitfaden für den Apigee APIM-Operator für Kubernetes ein Dienstkonto mit dem Namen apigee-apim-gsa erstellt haben, können Sie diesen Schritt überspringen und mit dem nächsten fortfahren. Andernfalls erstellen Sie das Dienstkonto:
    gcloud iam service-accounts create apigee-apim-gsa --project=${PROJECT_ID}
  2. Weisen Sie dem Dienstkonto die erforderliche Rolle zum Erstellen von Tokens zu:
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member "serviceAccount:apigee-apim-gsa@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role "roles/iam.serviceAccountTokenCreator"
  3. Weisen Sie dem Dienstkonto apigee-apim-gsa die erforderliche Rolle zum Bereitstellen von Proxys und Erweiterungen zu:
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member "serviceAccount:apigee-apim-gsa@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role "roles/iam.serviceAccountUser"

GKE-Gateway mit Richtlinien ändern

Sie können Ihr GKE-Gateway mit einer oder mehreren Richtlinien ändern, um seine Funktionen zu erweitern. In diesem Beispiel wird eine yaml-Datei auf das Gateway angewendet, die die Spezifikationen für zwei Apigee-Richtlinien und eine Google -Richtlinie für die Token-Injektion enthält.

Jede der Richtlinien, die mit der folgenden yaml-Datei auf das Gateway angewendet werden, hat eine andere Rolle bei der Auswertung der an das Gateway gesendeten Anfragen:

  • Die SpikeArrest-Richtlinie steuert die Nachrichtenrate bei Spitzen durch Festlegen einer maximalen Rate zulässiger Anfragen pro Zeiteinheit. In diesem Beispiel ist die maximale Rate auf fünf pro Minute festgelegt. Weitere Informationen dazu, wie die SpikeArrest-Richtlinie verwendet wird, um plötzliche Zugriffsspitzen zu glätten, finden Sie unter SpikeArrest-Richtlinie.
  • Mit der JavaScript-Richtlinie können Sie den Gateway-Anfragen benutzerdefinierten JavaScript-Code hinzufügen. In diesem Beispiel wird die Richtlinie verwendet, um der Anfrage einen benutzerdefinierten Header hinzuzufügen. Weitere Informationen dazu, wie mit der JavaScript-Richtlinie benutzerdefinierter Code hinzugefügt wird, finden Sie unter JavaScript-Richtlinie.
  • Mit der Google Richtlinie für die Token-Injection wird ein Google Authentifizierungszugriffstoken mithilfe der Richtlinie „AssignMessage“ in die Gateway-Anfragen eingefügt. Apigee unterstützt die Verwendung von Google OAuth- oder OpenID Connect-Tokens zur Authentifizierung bei Google -Diensten. Weitere Informationen zu Authentifizierungstokens finden Sie unter Google-Authentifizierung verwenden.

Fügen Sie dem Gateway die Richtlinien hinzu:

  1. Erstellen Sie im Namespace apim eine neue Datei mit dem Namen apigee-policies.yaml.
  2. Kopieren Sie den Inhalt der folgenden Datei in die neu erstellte Datei:
    # apigee-policies.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: SpikeArrest
    metadata:
      name: spike-arrest
      namespace: apim
    spec:
      identifier:
        ref: request.header.name
      useEffectiveCount: true
      peakMessageRate:
        value: "5pm"
    ---
    apiVersion: apim.googleapis.com/v1alpha1
    kind: Javascript
    metadata:
      name: js-add-headers
      namespace: apim
    spec:
      timeLimit: 2000
      source: |
        var sum = 1+1;
        context.setVariable("request.header.first", 1);
        context.setVariable("request.header.second", 1);
        context.setVariable("request.header.sum", sum);
    ---
    apiVersion: apim.googleapis.com/v1alpha1
    kind: AssignMessage
    metadata:
      name: google-token-policy
      namespace: apim
    spec:
      setActions:
        - authentication:
            googleAccessToken:
              scopes:
                - 'https://www.googleapis.com/auth/cloud-platform'
      AssignTo:
        createNew: false
        type: request
      
  3. Wenden Sie die yaml-Datei mit dem folgenden Befehl auf das Gateway an:
    kubectl -n apim apply -f apigee-policies.yaml

Vorlagenregel als Shared Flow-Vorlage erstellen

In diesem Schritt erstellen Sie eine TemplateRule, um die Richtlinien zu erzwingen, die Sie dem Gateway hinzugefügt haben. Eine Vorlageregel ist eine Regel für SharedFlows, die von Organisationsadministratoren erstellt wird, um sicherzustellen, dass von Dienstentwicklern nur genehmigte Richtlinien auf den Gateway-Traffic angewendet werden. Mit einer Vorlagenregel können Entwickler nachvollziehen, welche Richtlinien für sie verfügbar sind, welche für bestimmte Anwendungsfälle erforderlich sind und welche Richtlinien von Dienstentwicklern nicht verwendet werden können.

Vorlagenregel erstellen

Erstellen Sie eine Vorlagenregel, um die Verwendung der AssignMessage-Richtlinie zu erzwingen:

  1. Erstellen Sie eine neue yaml-Datei mit dem Namen template-rule.yaml im Namespace apim.
  2. Kopieren Sie den Inhalt der folgenden Datei in die neu erstellte Datei:
    # template-rule.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: ApimTemplateRule
    metadata:
      name: template-rule
      namespace: apim
    spec:
      allowList: [SpikeArrest, Javascript]
      requiredList: [AssignMessage]
      denyList: []

    In diesem Beispiel wird den Entwicklern durch die Vorlagenregel mitgeteilt, dass die AssignMessage-Richtlinie, die die Google -Richtlinie für die Token-Injection beschreibt, erforderlich ist. Außerdem erfahren Entwickler, dass sie die SpikeArrest- und JavaScript-Richtlinien bei der API-Verwaltung verwenden können. In der Sperrliste sind keine Richtlinien angegeben.

Vorlagenregel anwenden

Wenden Sie die Vorlagenregel mit dem folgenden Befehl an:

kubectl apply -f template-rule.yaml

Apigee-Vorlage mit den Vorlagenregeln aktualisieren

Aktualisieren Sie die Apigee-Vorlage, um die Vorlagenregel aufzunehmen, die Sie im vorherigen Abschnitt erstellt haben:

  1. Erstellen Sie eine neue yaml-Datei mit dem Namen new-admin-template.yaml im Namespace apim.
  2. Kopieren Sie den Inhalt der folgenden Datei in die neu erstellte Datei:
    # new-admin-template.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: ApimTemplate
    metadata:
      name: new-admin-template
      namespace: apim
    spec:
      apimTemplateRule:
        group: apim.googleapis.com
        kind: ApimTemplateRule
        name: template-rule
        namespace: apim
      templates:
      - policies:
          - group: apim.googleapis.com
            kind: SpikeArrest
            name: spike-arrest
            namespace: apim
          - group: apim.googleapis.com
            kind: Javascript
            name: js-add-headers
            namespace: apim
          - group: apim.googleapis.com
            kind: AssignMessage
            name: google-token-policy
            namespace: apim
  3. Wenden Sie die aktualisierte Vorlage mit dem folgenden Befehl an:
    kubectl apply -f new-admin-template.yaml

Apigee-Gateway-Richtlinie bereitstellen

In diesem Schritt wenden Sie auf Ihr Gateway eine neue Datei an, die die Spezifikationen für eine ApigeeGatewayPolicy enthält. Mit dieser Richtlinie wird die Apigee-Vorlage im Gateway bereitgestellt.

Binden Sie die Apigee-Gateway-Richtlinie ein:

  1. Erstellen Sie eine neue yaml-Datei mit dem Namen apigee-gateway-policy-withSA.yaml im Namespace apim.
  2. Kopieren Sie den Inhalt der folgenden Datei in die neu erstellte Datei:
    # apigee-gateway-policy-withSA.yaml
    apiVersion: apim.googleapis.com/v1alpha1
    kind: ApigeeGatewayPolicy
    metadata:
      name: apim-template-injection
      namespace: apim
    spec:
      serviceAccount: apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com
      ref:
        group: apim.googleapis.com
        kind: ApimTemplate
        name: new-admin-template
        namespace: apim
      targetRef:
        group: apim.googleapis.com
        kind: APIMExtensionPolicy
        name: global-ext-lb1-apim-policy
        namespace: apim
  3. Wenden Sie die Richtlinie an:
    kubectl apply -f apigee-gateway-policy-withSA.yaml
  4. Prüfen Sie den Bereitstellungsstatus der neuen Gateway-Richtlinie:
    kubectl -n apim get ApigeeGatewayPolicy

    Nach der Bereitstellung sollte für die Richtlinie STATUS der Wert CREATED angezeigt werden.

Warten Sie nach der Bereitstellung der neuen Gateway-Richtlinie zwei Minuten, bevor Sie eine Anfrage an das Gateway senden, damit die Richtlinie an den Cluster weitergegeben werden kann.

Richtlinienerzwingung prüfen

Um zu prüfen, ob die Apigee Gateway-Richtlinien wie erwartet funktionieren, senden Sie wie in den folgenden Abschnitten beschrieben Anfragen an das Gateway.

Durchsetzung der AssignMessage-Richtlinie prüfen

Wenn du prüfen möchtest, ob das {company_name}-Token mit der Richtlinie „AssignMessage“ in die Anfrage eingefügt wird, sende eine Anfrage an das Gateway mit dem folgenden Befehl:

curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"

Wobei:

  • GATEWAY_IP_ADDRESS ist die IP-Adresse des Gateways. Sie können die Gateway-IP-Adresse mit dem folgenden Befehl abrufen:
    kubectl get gateway GATEWAY_NAME
  • HOST_NAME ist der Name des Hosts.
  • API_KEY ist der API-Schlüsselwert.

Eine erfolgreiche Antwort sollte einen Authorization-Header mit dem generierten Bearer-Token enthalten, etwa so:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Authorization": "Bearer ya29.c.c0ASRK0Gbw03y9cfvxL11DxaRYBQUU18SmUP4Vu63OckHI5cX7wJ4DmGMG2vbDDS69HXJHqMj-lak4tcqOsJGmE65crn2gNuJLanXidwM8", 
    "First": "1.0", 
    "Host": "apigee-apim-operator-test.apigee.net", 
    "Second": "1.0", 
    "Sum": "2", 
    "User-Agent": "curl/8.7.1", 
    "X-Api-Key": "McYcHGR3PTSGLXExvKADwQ1JJeCjgPDUvAakCl0rJKCFaX0Y", 
    "X-Cloud-Trace-Context": "0fd3dadc2a3c328fa968d5f5f1434c29/18300783092696918345"
  }, 
  "origin": "34.54.108.129", 
  "url": "apigee-apim-operator-test.apigee.net/get"
}

Durchsetzung der SpikeArrest-Richtlinie bestätigen

Sie können die Durchsetzung der SpikeArrest-Richtlinie testen, indem Sie innerhalb einer Minute zehnmal eine Anfrage an das Gateway senden.

Sie können das folgende Script ausführen, um die Anfragen zu generieren:

#!/bin/sh
for i in $(seq 1 11); do
    curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
    sleep 1
done

Wobei:

  • GATEWAY_IP_ADDRESS ist die IP-Adresse des Gateways. Sie können die Gateway-IP-Adresse mit dem folgenden Befehl abrufen, wobei GATEWAY_NAME der Name des Gateways ist:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
  • HOST_NAME ist der Hostname, der im HTTPRoute des Gateways definiert ist.
  • API_KEY ist der API-Schlüsselwert, der unter Einrichtung testen abgerufen wurde.

Die Antwort sieht in etwa so aus:

"fault":{"faultstring":"Spike arrest violation. Allowed rate : MessageRate{capacity=5, period=Minutes}","detail":{"errorcode":"policies.ratelimit.SpikeArrestViolation"}}}

Fehlerbehebung

Wenn beim Hinzufügen von Richtlinien zum GKE-Gateway Probleme auftreten, finden Sie unter Fehlerbehebung beim APIM-Operator Lösungen für häufige Fehler.

Nächste Schritte