Crea un APIMExtensionPolicy

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación deApigee Edge.

En esta página, se describe cómo aplicar políticas de Apigee al tráfico que pasa por una puerta de enlace de Kubernetes mediante la creación de un recurso personalizado APIMExtensionPolicy. El operador de Apigee para Kubernetes supervisa los recursos APIMExtensionPolicy y configura la puerta de enlace en consecuencia.

Apigee

Sigue estos pasos si usas Apigee.

Antes de comenzar

Antes de comenzar esta tarea, completa los siguientes pasos:

Crea la APIMExtensionPolicy

En este paso, crea la APIMExtensionPolicy y aplícala a la puerta de enlace de GKE que se ejecuta en tu clúster. Esta política rige todo el tráfico que pasa por la puerta de enlace y sus HTTPRoutes asociadas, y funciona de manera similar a un flowhook a nivel del entorno en Apigee en la actualidad.

Para crear la APIMExtensionPolicy, haz lo siguiente:

  1. Crea un archivo llamado global-ext-lb1-apim-policy.yaml con el siguiente contenido:
    # 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. Reemplaza ENV_NAME por el nombre del entorno de Apigee creado en el paso de instalación Crea un entorno de Apigee.

    Nota: Si instalas el operador de Apigee para Kubernetes con la generateEnv=TRUE marca, no se requiere el campo apigeeenv.

    Puedes ver todos los entornos disponibles en la página Entornos de la Google Cloud consola.

  3. Aplica la política:
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
        

    Una vez que se aplica la política, el operador de Apigee para Kubernetes crea recursos de red en segundo plano.

  4. Verifica el estado de APIMExtensionPolicy con el siguiente comando:
    kubectl -n apim get APIMExtensionPolicy
        

    El resultado debería ser similar al siguiente, con un STATE de RUNNING:

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

Prueba la política

Usa el siguiente comando para enviar una solicitud a la puerta de enlace:

  1. Obtén la dirección IP de la puerta de enlace:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    Reemplaza GATEWAY_NAME por el nombre de la puerta de enlace, por ejemplo, global-ext-lb1.

  2. Envía una solicitud a un extremo configurado en tu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    Reemplaza HOST_NAME por el nombre de host definido en la HTTPRoute de la puerta de enlace, por ejemplo, example.httpbin.com.

  3. La solicitud debería fallar porque defaultSecurityEnabled: true se estableció en el recurso APIMExtensionPolicy, lo que habilita la verificación de la clave de API y el token de acceso. Deberías ver una respuesta similar a la siguiente:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Esto indica que la política de extensión de Apigee está activa y que la aplicación de la clave de API y la verificación del token de acceso están activas.

¿Qué sigue?

Apigee Hybrid

Sigue estos pasos si usas Apigee Hybrid.

Antes de comenzar

En este procedimiento, se supone que instalaste el operador de Apigee para Kubernetes siguiendo los pasos que se indican en Instala el operador de Apigee para Kubernetes para Apigee Hybrid.

Crea un secreto de certificado TLS

La APIMExtensionPolicy requiere el certificado público codificado en base64 asociado con el nombre de host del grupo de entornos. Creaste este certificado en Instala el entorno de Apigee Hybrid con Helm. Para proporcionar este certificado al operador, crea un secreto de Kubernetes en el apim espacio de nombres.

  1. Obtén la cadena de certificado codificada en base64 del archivo que creaste durante la instalación:
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. Crea un archivo llamado secret-cert.yaml con el siguiente contenido:
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. Reemplaza BASE64_ENCODED_CERT_STRING por el resultado del comando cat en el paso 1.
  4. Aplica el secreto a tu clúster:
    kubectl apply -f secret-cert.yaml
        

Define y aplica la APIMExtensionPolicy

Define un recurso APIMExtensionPolicy y aplícalo a la puerta de enlace de Istio que se ejecuta en tu clúster. Esta extensión de política intercepta el tráfico administrado por la puerta de enlace y sus HTTPRoutes asociadas, y aplica políticas de Apigee antes de reenviar las solicitudes al destino de backend.

  1. Crea un archivo llamado istio-gateway-apim-policy.yaml con el siguiente contenido:
    # 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. Reemplaza las siguientes variables:
    • ENV_NAME: El nombre del entorno de Apigee Hybrid que creaste con las extensiones de servicio habilitadas, por ejemplo, my-hybrid-env.
    • HOST_NAME: El nombre de dominio que se usa para el grupo de entornos, por ejemplo my-proxies.example.com.
    • INGRESS_IP_ADDRESS: La dirección IP de entrada para la entrada del entorno de ejecución de Apigee Hybrid. Consulta Expón la entrada de Apigee para obtener detalles sobre cómo recuperar esta IP.
  3. Aplica la política a tu clúster:
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. Una vez que se aplica el recurso, el operador de Apigee para Kubernetes comienza a configurar los recursos de red de la puerta de enlace. Verifica el estado de APIMExtensionPolicy:
    kubectl -n apim get APIMExtensionPolicy
        
  5. Espera hasta que STATE muestre RUNNING. El resultado debería ser similar al siguiente:
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

Prueba la política

En la APIMExtensionPolicy creada en el paso anterior, defaultSecurityEnabled se estableció en true. Esto habilita automáticamente las políticas de verificación de clave de API y token de OAuth2 para el tráfico que coincide con esta puerta de enlace. Para probar esto, envía una solicitud no autenticada al servicio de muestra httpbin que configuraste cuando verificaste la configuración de la puerta de enlace de Istio en Verifica la configuración de la puerta de enlace de Istio.

  1. Obtén la dirección IP de la puerta de enlace:
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. Envía una solicitud al extremo /get configurado en tu HTTPRoute:
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. Debido a que defaultSecurityEnabled: true requiere autenticación (como una clave de API válida), Apigee debería rechazar la solicitud con un error de autenticación. La respuesta podría ser similar a la siguiente:
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    Este resultado confirma que la APIMExtensionPolicy está activa y que la puerta de enlace de Istio aplica las políticas de Apigee.

¿Qué sigue?

Obtén información para crear productos de API, desarrolladores y apps para obtener claves de API para solicitudes autenticadas: