Diese Seite gilt für Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen
Wie Sie einen API-Schlüssel erhalten
Im folgenden Beispiel wird beschrieben, wie Sie einen API-Schlüssel erhalten, mit dem Sie API-Aufrufe validieren können, die über Apigee Adapter for Envoy an einen Zieldienst weitergeleitet werden.
1. Bei Apigee anmelden
- Melden Sie sich bei der Apigee-UI an.
- Wählen Sie die Organisation aus, die Sie zur Bereitstellung von Apigee Adapter for Envoy verwendet haben.
2. Entwickler erstellen
Sie können einen vorhandenen Entwickler zum Testen verwenden oder einen neuen Entwickler erstellen:
- Klicken Sie im seitlichen Navigationsmenü auf Veröffentlichen > Entwickler.
- Klicken Sie auf + Entwickler.
- Füllen Sie das Dialogfeld aus, um einen neuen Entwickler zu erstellen. Sie können einen beliebigen Entwicklernamen oder eine beliebige E-Mail-Adresse verwenden.
3. API-Produkt erstellen
Unten finden Sie ein Beispiel zur Produkterstellung.
- Wählen Sie im seitlichen Navigationsmenü Veröffentlichen > API-Produkte aus.
- Klicken Sie auf +Erstellen.
- Füllen Sie den Abschnitt Produktdetails wie nachfolgend beschrieben aus. In der folgenden Tabelle werden nur die Pflichtfelder erwähnt:
Feld Wert Beschreibung Name httpbin-productDer eindeutige Name des API-Produkts. Anzeigename httpbin productDer beschreibende Name, den Sie in der Benutzeroberfläche oder in anderen Anzeigekontexten sehen möchten. Zugriff PublicFür dieses Beispiel ist Öffentlich eine gute Wahl. - Klicken Sie im Abschnitt "Vorgänge" auf +VORGANG HINZUFÜGEN.
- Wählen Sie im Abschnitt Quelle die Option Remotedienst aus.
- Stellen Sie den Schalter Quelle um, damit Sie den Namen eines Remotedienstes manuell in das Feld des Remotedienstes eingeben können.
- Geben Sie im Feld Remote-Dienst den Namen eines Remote-Dienstes ein. Dies ist ein Zieldienst, an den der Adapter eingehende HTTP-Anfragen weiterleitet. Verwenden Sie zu Testzwecken
httpbin.orgoderhttpbin.default.svc.cluster.localmit Kubernetes.
- Geben Sie im Abschnitt Vorgang
/für den Pfad ein. Informationen zu Pfadoptionen finden Sie unter Ressourcenpfade konfigurieren. - Klicken Sie auf SPEICHERN, um den Vorgang zu speichern.
- Klicken Sie auf SPEICHERN, um das API-Produkt zu speichern.
Weitere Informationen finden Sie unter API-Produkte verwalten.
4. Entwickler-App erstellen
Die Entwickler-App enthält den API-Schlüssel, der erforderlich ist, um API-Proxyaufrufe über den Adapter auszuführen.
- Klicken Sie im seitlichen Navigationsmenü auf Apps veröffentlichen.
- Klicken Sie auf + App.
- Füllen Sie den Abschnitt App-Details wie nachfolgend beschrieben aus. In der folgenden Tabelle werden nur die Pflichtfelder erwähnt:
- Klicken Sie im Abschnitt "Anmeldedaten" auf + Produkt hinzufügen und wählen Sie das soeben konfigurierte Produkt aus: httpbin-product.
- Klicken Sie auf Erstellen.
- Klicken Sie unter „Anmeldedaten“ neben dem Schlüssel auf Anzeigen.
- Kopieren Sie den Wert des Consumer-Schlüssels. Dieser Wert ist der API-Schlüssel, mit dem Sie API-Aufrufe an den
httpbin-Dienst über den Apigee Adapter for Envoy senden.
| Name | httpbin-app
|
| Developer | Wählen Sie den Entwickler aus, den Sie zuvor erstellt haben, oder wählen Sie einen Entwickler aus der Liste aus. |
JWT-basierte Authentifizierung verwenden
Sie können authentifizierte API-Proxyaufrufe mit einem JWT-Token durchführen, anstatt einen API-Schlüssel zu verwenden. In diesem Abschnitt wird erläutert, wie Sie mit dem Befehl apigee-remote-service-cli token JWT-Tokens erstellen, prüfen und rotieren. Für eine Hybrid-Umgebung von Apigee können Sie mit diesem Befehl ein Kubernetes-Secret erstellen, das die JWTs enthält.
Übersicht
Die JWT-Verifizierung und die JWT-Authentifizierung werden von Envoy mit dem zugehörigen JWT-Authentifizierungsfilter ausgeführt.
Nach der Authentifizierung sendet der Envoy-Filter ext-authz die Anfrageheader und das JWT an apigee-remote-service-envoy. Er vergleicht die api_product_list- und scope-Anforderungen des JWT mit Apigee API-Produkten, um es für das Ziel der Anfrage zu autorisieren.
Apigee-JWT-Tokens erstellen
Apigee JWT-Tokens können über die Befehlszeile erstellt werden:
apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET
Oder Sie verwenden den standardmäßigen OAuth-Token-Endpunkt. Beispiel für Curl:
curl https://org-env.apigee.net/remote-token/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"JWT-Token verwenden
Sobald Sie das Token haben, übergeben Sie es im Autorisierungs-Header an Envoy. Beispiel:
curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"
JWT-Tokenfehler
Ablehnung durch Envoy
Wenn Envoy das Token ablehnt, wird möglicherweise eine Nachricht wie diese angezeigt:
Jwks remote fetch has failed
Wenn dies der Fall ist, stellen Sie sicher, dass Ihre Envoy-Konfiguration einen gültigen URI im Abschnitt remote_jwks enthält, dass sie für Envoy erreichbar ist und dass Sie die Zertifikate bei der Installation des Apigee-Proxys korrekt eingerichtet haben. Sie sollten den URI direkt mit einem GET-Aufruf aufrufen und eine gültige JSON-Antwort erhalten.
Beispiel:
curl https://myorg-eval-test.apigee.net/remote-service/certs
Andere Nachrichten von Envoy könnten so aussehen:
- „Zielgruppen in Jwt sind nicht zulässig“
- „Jwt-Aussteller ist nicht konfiguriert“
Diese Anforderungen stammen aus Ihrer Envoy-Konfiguration, die Sie möglicherweise ändern müssen.
Token prüfen
Sie können das Token über die Befehlszeile prüfen. Beispiel
apigee-remote-service-cli -c config.yaml token inspect -f path/to/file
oder
apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN
Debugging
Siehe Gültiger API-Schlüssel schlägt fehl.Eigenen Identitätsanbieter verwenden
Standardmäßig verwendet Apigee Adapter for Envoy den API-Proxy remote-token als Identitätsanbieterdienst, um Clientanwendungen zu authentifizieren und JWT-Tokens basierend auf dem Berechtigungstyp der OAuth 2.0-Clientanmeldedaten bereitzustellen. In einigen Fällen können Sie den remote-token-Proxy möglicherweise nicht verwenden.
Wenn Sie einen Identitätsanbieter verwenden müssen, der nicht von Apigee bereitgestellt wird, können Sie den Adapter so konfigurieren, dass er einen anderen Identitätsanbieter verwendet. Weitere Informationen zur Verwendung eines Nicht-Apigee-Identitätsanbieters und der erforderlichen Konfiguration finden Sie in diesem Artikel in der Apigee-Community: Eigene Identitätsanbieter mit dem Apigee Envoy-Adapter verwenden.
Logging
Sie können die Logging-Stufe im Dienst $REMOTE_SERVICE_HOME/apigee-remote-service-envoy anpassen. Alle Logs werden an stderr gesendet.
| Element | Erforderlich | Beschreibung |
|---|---|---|
| -l, --log-level | Gültige Stufen: Debug, info, warn, error. | Passt die Logging-Ebene an. Standard: info |
| -j, --json-log | Sendet die Logausgabe als JSON-Datensätze. |
Envoy bietet Logging. Weitere Informationen finden Sie unter den folgenden Links zur Envoy-Dokumentation:
Name des Richtlinien-Secrets ändern
Ein im Cluster bereitgestelltes Kubernetes-Secret enthält Anmeldedaten, die der Adapter zur Authentifizierung der Kommunikation mit dem Remotedienst-Proxy benötigt. Für dieses Secret ist ein Volume-Bereitstellungspunkt erforderlich, der konfigurierbar ist. Standardmäßig ist der Bereitstellungspunkt /policy-secret.
So ändern Sie den Bereitstellungspunkt:
- Führen Sie diesen Befehl aus:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name
Beispiel:
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
- Öffnen Sie
$CLI_HOME/samples/apigee-envoy-adapter.yamlin einem Editor. - Ändern Sie den Namen des Bereitstellungspunkts in den neuen Namen:
volumeMounts: - mountPath: /config name: apigee-remote-service-envoy readOnly: true - mountPath: /opt/apigee/tls name: tls-volume readOnly: true - mountPath: /my-mount-point name: policy-secret readOnly: true - Speichern Sie die Datei und wenden Sie sie auf das Service Mesh an:
kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml
Netzwerkproxy verwenden
Ein HTTP-Proxy kann mithilfe der Umgebungsvariablen HTTP_PROXY und HTTPS_PROXY in die Umgebung der Binärdatei „apigee-remote-service-envoy“ eingefügt werden. Wenn Sie diese Umgebungsvariablen verwenden, kann die Umgebungsvariable NO_PROXY auch verwendet werden, um bestimmte Hosts vom Proxy auszuschließen.
HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] NO_PROXY=127.0.0.1,localhost
Denken Sie daran, dass der Proxy über apigee-remote-service-envoy erreichbar sein muss.
Informationen zu Messwerten und Analysen
Ein Prometheus-Messwert-Endpunkt ist unter :5001/metrics verfügbar. Sie können diese Portnummer konfigurieren. Siehe Konfigurationsdatei.
Envoy-Analysen
Unter den folgenden Links finden Sie Informationen zum Abrufen von Envoy-Proxy-Analysedaten:
Istio-Analysen
Unter den folgenden Links finden Sie Informationen zum Abrufen von Envoy-Proxy-Analysedaten:
Apigee-Analyse
Apigee Remote Service for Envoy sendet Anfragestatistiken zur Verarbeitung von Analysen an Apigee. Apigee erfasst diese Anfragen unter dem zugehörigen API-Produktnamen.
Informationen zu Apigee Analytics finden Sie in der Übersicht über Analytics-Diensten.
Unterstützung von Umgebungen mit mehreren Mandanten
Sie können den Adapter jetzt so aktivieren, dass mehrere Umgebungen in einer Apigee-Organisation bedient werden. Mit diesem Feature können Sie einen einzelnen Apigee Adapter for Envoy, der mit einer einzelnen Apigee-Organisation verknüpft ist, so verwenden, dass mehrere Umgebungen bedient werden. Vor dieser Änderung war ein Adapter immer mit einer Apigee-Umgebung verknüpft.
Wenn Sie die Unterstützung für mehrere Umgebungen konfigurieren möchten, ändern Sie in der Datei config.yaml den Wert von tenant:env_name in "*". Beispiel:
- Öffnen Sie die Datei
config.yamlin einem Editor. - Ändern Sie den Wert von
tenant.env_namein"*". Beispiel:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | tenant: remote_service_api: https://apitest.mydomain.net/remote-service org_name: my-org env_name: "*"" allow_unverified_ssl_cert: true analytics: collection_interval: 10s auth: jwt_provider_key: https://apitest.mydomain.net/remote-token/token - Speichern Sie die Datei.
- Wenden Sie die Datei an:
kubectl apply -f $CLI_HOME/config.yaml
Wenn Sie den Modus für mehrere Umgebungen konfigurieren, müssen Sie Envoy auch so konfigurieren, dass ein geeigneter Umgebungswert an den Adapter gesendet wird. Dazu fügen Sie die folgenden Metadaten zum Abschnitt virtual_hosts:routes der Datei envoy-config.yaml hinzu. Beispiel:
- Generieren Sie die Datei
envoy-config.yamlmithilfe der Befehlszeile. Beispiel:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- Öffnen Sie die generierte Datei (sie heißt
envoy-config.yaml). - Fügen Sie die folgenden Metadaten in den Abschnitt
virtual_hostoderroutesder Datei ein:typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: testDas folgende Beispiel veranschaulicht die Konfiguration für einen
virtual_hostmit mehreren definierten Routen, wobei jede Route Traffic an eine bestimmte Umgebung sendet:filter_chains: - filters: - name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http route_config: virtual_hosts: - name: default domains: "*" routes: - match: { prefix: /test } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: test - match: { prefix: /prod } route: cluster: httpbin typed_per_filter_config: envoy.filters.http.ext_authz: "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthzPerRoute check_settings: context_extensions: apigee_environment: prod - Wiederholen Sie den letzten Schritt, um nach Bedarf weitere Umgebungen hinzuzufügen.
- Speichern Sie die Datei und wenden Sie sie an.
Daten für benutzerdefinierte Berichte erfassen
Der Adapter unterstützt die Übergabe von Envoy-Metadaten an das Apigee-Feature zur Datenerfassung, das erfasste Daten in Variablen sendet, die Sie für die Analyse in benutzerdefinierten Berichten an Apigee Analytics angeben. Dieses Feature bietet eine Funktion, die der Datenerfassungsrichtlinie von Apigee ähnelt.
So verwenden Sie dieses Feature:
- Erstellen Sie eine Data Collector REST-Ressource.
- Legen Sie Datenerfassungsvariablen mit der Apigee Datacollectors API fest.
- Generieren Sie die Datei
envoy-config.yamlüber die Befehlszeile, falls noch nicht geschehen. Beispiel:$CLI_HOME/apigee-remote-service-cli samples create \ -t envoy-1.16 -c ./config.yaml --out myconfigs
- Öffnen Sie die generierte Datei (sie heißt
envoy-config.yaml). - Mit einem Envoy-Filter können Sie Werte für Ihre benutzerdefinierten Variablen im Namespace
envoy.filters.http.apigee.datacapturefestlegen. Sie können beispielsweise einen Header für Metadaten-Filter oder einen Lua-Filter verwenden. Weitere Informationen zu diesen Filtern finden Sie unter Header-für Metadaten und Lua.Die Namen benutzerdefinierter Variablen müssen als
dc.XXXXXformatiert sein.Beispiel für den Filter "Header-to-Metadata":
- name: envoy.filters.http.header_to_metadata typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.header_to_metadata.v3.Config request_rules: - header: "Host" on_header_present: metadata_namespace: envoy.filters.http.apigee.datacapture key: dc.host # host (without the prefix) also works type: STRING remove: falseBeispiel für den Filter "Lua":
- name: envoy.filters.http.lua typed_config: "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua inline_code: | function envoy_on_request(request_handle) metadata = request_handle:streamInfo():dynamicMetadata() metadata:set("envoy.filters.http.apigee.datacapture", "dc.test", "A test string.") end - Fügen Sie der Datei den gewünschten Filter hinzu. Siehe nachstehende Beispiele
- Speichern Sie die Datei und wenden Sie sie an.
mTLS zwischen dem Adapter und der Apigee-Laufzeit konfigurieren
Sie können clientseitige TLS-Zertifikate im Abschnitt tenant der Datei config.yaml des Adapters bereitstellen, um mTLS zwischen dem Adapter und der Apigee-Laufzeit zu verwenden. Diese Änderung gilt für alle unterstützten Apigee-Plattformen. Außerdem wird mTLS für Analysen für die Apigee Edge for Private Cloud-Plattform aktiviert. Beispiel:
tenant:
tls:
ca_file: path/ca.pem
cert_file: path/cert.pem
key_file: path/key.pem
allow_unverified_ssl_cert: false