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:
- Dem GKE-Gateway Richtlinien hinzufügen
- Erstellen Sie eine Vorlagenregel, um die Einhaltung der Richtlinien zu erzwingen.
- Aktualisieren Sie die Apigee-Vorlage, um die Vorlagenregel einzubinden.
- Bereitstellen Sie die Apigee-Gateway-Richtlinie mit der Vorlage.
- Durchsetzung von Richtlinien prüfen
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:
- 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}
- 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"
- 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:
- Erstellen Sie im Namespace
apim
eine neue Datei mit dem Namenapigee-policies.yaml
. - 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
- 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:
- Erstellen Sie eine neue
yaml
-Datei mit dem Namentemplate-rule.yaml
im Namespaceapim
. - 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:
- Erstellen Sie eine neue
yaml
-Datei mit dem Namennew-admin-template.yaml
im Namespaceapim
. - 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
- 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:
- Erstellen Sie eine neue
yaml
-Datei mit dem Namenapigee-gateway-policy-withSA.yaml
im Namespaceapim
. - 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
- Wenden Sie die Richtlinie an:
kubectl apply -f apigee-gateway-policy-withSA.yaml
- Prüfen Sie den Bereitstellungsstatus der neuen Gateway-Richtlinie:
kubectl -n apim get ApigeeGatewayPolicy
Nach der Bereitstellung sollte für die Richtlinie
STATUS
der WertCREATED
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, wobeiGATEWAY_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 imHTTPRoute
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.