APIMExtensionPolicy erstellen

Diese Seite gilt für Apigee und Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

Auf dieser Seite wird beschrieben, wie Sie Apigee-Richtlinien auf Traffic anwenden, der ein Kubernetes-Gateway durchläuft. Dazu erstellen Sie eine benutzerdefinierte APIMExtensionPolicy-Ressource. Der Apigee Operator für Kubernetes überwacht APIMExtensionPolicy-Ressourcen und konfiguriert das Gateway entsprechend.

Apigee

Führen Sie diese Schritte aus, wenn Sie Apigee verwenden.

Hinweise

Führen Sie die folgenden Schritte aus, bevor Sie mit dieser Aufgabe beginnen:

APIMExtensionPolicy erstellen

Erstellen Sie in diesem Schritt die APIMExtensionPolicy-Datei und wenden Sie sie auf das GKE-Gateway an, das in Ihrem Cluster ausgeführt wird. Diese Richtlinie regelt den gesamten Traffic, der das Gateway und die zugehörigen HTTPRoutes durchläuft. Sie funktioniert ähnlich wie ein Flowhook auf Umgebungsebene in Apigee.

So erstellen Sie APIMExtensionPolicy:

  1. Erstellen Sie eine Datei mit dem Namen global-ext-lb1-apim-policy.yaml und dem folgendem Inhalt:
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default
        
  2. Ersetzen Sie ENV_NAME durch den Namen der Apigee-Umgebung, die im Installationsschritt Apigee-Umgebung erstellen erstellt wurde.

    Hinweis:Wenn Sie den Apigee Operator für Kubernetes mit dem Flag generateEnv=TRUE installieren, ist das Feld apigeeEnv nicht erforderlich.

    Alle verfügbaren Umgebungen finden Sie auf der Seite „Umgebungen“ in der Google Cloud Console.

  3. Wenden Sie die Richtlinie an:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
        

    Sobald die Richtlinie angewendet wurde, erstellt der Apigee Operator für Kubernetes im Hintergrund Netzwerkressourcen.

  4. Prüfen Sie den Status von APIMExtensionPolicy mit dem folgenden Befehl:
    kubectl -n apim get APIMExtensionPolicy
        

    Die Ausgabe sollte in etwa so aussehen, mit einem STATE von RUNNING:

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

Richtlinie testen

Verwenden Sie den folgenden Befehl, um eine Anfrage an das Gateway zu senden:

  1. Rufen Sie die IP-Adresse des Gateways ab:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    Ersetzen Sie GATEWAY_NAME durch den Namen des Gateways, z. B. global-ext-lb1.

  2. Senden Sie eine Anfrage an einen in Ihrer HTTPRoute konfigurierten Endpunkt:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    Ersetzen Sie HOST_NAME durch den im HTTPRoute des Gateways definierten Hostnamen, z. B. example.httpbin.com.

  3. Die Anfrage sollte fehlschlagen, da defaultSecurityEnabled: true in der APIMExtensionPolicy-Ressource festgelegt wurde. Dadurch wird die Überprüfung von API-Schlüssel und Zugriffstoken aktiviert. Die Antwort sieht ungefähr so aus:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Das bedeutet, dass die Apigee-Erweiterungsrichtlinie aktiv ist und die Erzwingung von API-Schlüsseln und die Überprüfung von Zugriffstokens aktiv sind.

Nächste Schritte

Apigee Hybrid

Führen Sie diese Schritte aus, wenn Sie Apigee Hybrid verwenden.

Hinweise

Bei dieser Anleitung wird davon ausgegangen, dass Sie den Apigee Operator for Kubernetes installiert haben. Folgen Sie dazu der Anleitung unter Apigee Operator for Kubernetes für Apigee Hybrid installieren.

TLS-Zertifikat-Secret erstellen

Für APIMExtensionPolicy ist das base64-codierte öffentliche Zertifikat erforderlich, das dem Hostnamen der Umgebungsgruppe zugeordnet ist. Sie haben dieses Zertifikat in Apigee Hybrid-Umgebung mit Helm installieren erstellt. Stellen Sie dieses Zertifikat dem Operator zur Verfügung, indem Sie ein Kubernetes-Secret im Namespace apim erstellen.

  1. Rufen Sie den base64-codierten Zertifikatsstring aus der Datei ab, die Sie während der Installation erstellt haben:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. Erstellen Sie eine Datei mit dem Namen secret-cert.yaml und dem folgendem Inhalt:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. Ersetzen Sie BASE64_ENCODED_CERT_STRING durch die Ausgabe des cat-Befehls in Schritt 1.
  4. Wenden Sie das Secret auf Ihren Cluster an:
    kubectl apply -f secret-cert.yaml
        

APIMExtensionPolicy definieren und anwenden

Definieren Sie eine APIMExtensionPolicy-Ressource und wenden Sie sie auf das Istio-Gateway an, das in Ihrem Cluster ausgeführt wird. Diese Richtlinienerweiterung fängt Traffic ab, der vom Gateway und dem zugehörigen HTTPRoutes verwaltet wird, und wendet Apigee-Richtlinien an, bevor Anfragen an das Back-End-Ziel weitergeleitet werden.

  1. Erstellen Sie eine Datei mit dem Namen istio-gateway-apim-policy.yaml und dem folgendem Inhalt:
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. Ersetzen Sie die folgenden Variablen:
    • ENV_NAME: Der Name der Apigee Hybrid-Umgebung, die Sie mit aktivierten Dienst-Extensions erstellt haben, z. B. my-hybrid-env.
    • HOST_NAME: Der Domainname, der für die Umgebungsgruppe verwendet wird, z. B. my-proxies.example.com.
    • INGRESS_IP_ADDRESS: Die Ingress-IP-Adresse für den Apigee Hybrid-Laufzeit-Ingress. Weitere Informationen zum Abrufen dieser IP-Adresse finden Sie unter Apigee-Ingress freigeben.
  3. Wenden Sie die Richtlinie auf Ihren Cluster an:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. Sobald die Ressource angewendet wurde, beginnt der Apigee Operator für Kubernetes mit der Konfiguration der Gateway-Netzwerkressourcen. Prüfen Sie den Status des APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. Warten Sie, bis STATE den Wert RUNNING hat. Die Ausgabe sollte in etwa so aussehen:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Richtlinie testen

Im APIMExtensionPolicy, das im vorherigen Schritt erstellt wurde, wurde defaultSecurityEnabled auf true gesetzt. Dadurch werden automatisch Richtlinien zur Überprüfung von API-Schlüsseln und OAuth2-Tokens für Traffic aktiviert, der diesem Gateway entspricht. Testen Sie dies, indem Sie eine nicht authentifizierte Anfrage an den Beispiel-httpbin-Dienst senden, den Sie beim Überprüfen der Istio Gateway-Einrichtung in Istio Gateway-Einrichtung überprüfen konfiguriert haben.

  1. Rufen Sie die IP-Adresse des Gateways ab:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. Senden Sie eine Anfrage an den in Ihrer HTTPRoute konfigurierten /get-Endpunkt:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Da für defaultSecurityEnabled: true eine Authentifizierung (z. B. ein gültiger API-Schlüssel) erforderlich ist, sollte Apigee die Anfrage mit einem Authentifizierungsfehler ablehnen. Die Antwort sollte in etwa so aussehen:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Diese Ausgabe bestätigt, dass APIMExtensionPolicy aktiv ist und Apigee-Richtlinien vom Istio-Gateway erzwungen werden.

Nächste Schritte

Hier erfahren Sie, wie Sie API-Produkte, Entwickler und Apps erstellen, um API-Schlüssel für authentifizierte Anfragen zu erhalten: