Proteger el tráfico a un servicio con la consola de Google Cloud

En esta página se muestra cómo desplegar una API en API Gateway para proteger el tráfico en un servicio de backend.

Sigue los pasos para desplegar una nueva API y acceder a un servicio backend en funciones de Cloud Run mediante la consola de Google Cloud . En esta guía de inicio rápido también se describe cómo usar una clave de API para proteger tu backend frente a accesos no autorizados.

Antes de empezar

  1. En la Google Cloud consola, ve a la página API Gateway.

    Ir a API Gateway

  2. API Gateway requiere que habilites los siguientes servicios de Google:

    Nombre Título
    apigateway.googleapis.com API de API Gateway
    servicemanagement.googleapis.com API Service Management
    servicecontrol.googleapis.com API Service Control

    Si no has habilitado estos servicios en el proyecto que selecciones, se te pedirá que lo hagas.

  3. Confirma que la facturación está habilitada en tu proyecto.

    Descubre cómo habilitar la facturación.

Desplegar un backend de API

API Gateway se encuentra delante de un servicio de backend implementado y gestiona todas las solicitudes entrantes. En esta guía de inicio rápido, API Gateway dirige las llamadas entrantes a un backend de función de Cloud Run llamado helloGET, que contiene la función que se muestra a continuación:

/**
 * HTTP Cloud Function.
 * This function is exported by index.js, and is executed when
 * you make an HTTP request to the deployed function's endpoint.
 *
 * @param {Object} req Cloud Function request context.
 *                     More info: https://expressjs.com/en/api.html#req
 * @param {Object} res Cloud Function response context.
 *                     More info: https://expressjs.com/en/api.html#res
 */

exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

Sigue los pasos de la guía de inicio rápido para usar la CLI de Google Cloud para descargar el código de ejemplo de Cloud Run functions y desplegar el servicio de backend de Cloud Run functions.

Crear una definición de API

API Gateway usa una definición de API para enrutar las llamadas al servicio de backend. Puedes usar una especificación de OpenAPI que contenga anotaciones especializadas para definir el comportamiento elegido de API Gateway. La especificación de OpenAPI de esta guía de inicio rápido contiene instrucciones de enrutamiento al backend de la función de Cloud Run:

# openapi2-functions.yaml
swagger: '2.0'
info:
  title: API_ID optional-string
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: Greet a user
      operationId: hello
      x-google-backend:
        address: https://us-central1-PROJECT_ID.cloudfunctions.net/helloGET
      responses:
        '200':
          description: A successful response
          schema:
            type: string

Para usar la especificación de OpenAPI que se muestra en el ejemplo anterior para definir tu API, sigue estos pasos:

  1. En la línea de comandos, crea un archivo llamado openapi2-functions.yaml.

  2. Copia y pega el contenido de la especificación de OpenAPI que se muestra en el ejemplo anterior en el archivo que acabas de crear.

  3. Edita el archivo de la siguiente manera:

    1. En el campo title, sustituye API_ID por el nombre de tu API (que se creará en el paso siguiente) y optional-string por una breve descripción de tu elección. El valor de este campo se usa al generar claves de API que conceden acceso a esta API. Consulta los requisitos de ID de API para ver las directrices de nomenclatura de los IDs de API.
    2. En el campo address, sustituye PROJECT_ID por el nombre de tu Google Cloud proyecto.

Crear una pasarela

Ahora puedes crear y desplegar una pasarela en API Gateway.

  1. Abre la página API Gateway en la Google Cloud consola.

    Ir a API Gateway

  2. Haz clic en Crear pasarela.

  3. En la sección API:

    1. Puedes crear una API o seleccionar una de las que ya tengas en el menú desplegable Seleccionar una API. En este tutorial, selecciona Crear una API.
    2. Introduce el Nombre visible de tu API.
    3. Introduce el ID de API de tu API.
    4. (Opcional) Añade etiquetas a tu API con el formato clave/valor. Para añadir más de una etiqueta, haz clic en Añadir etiqueta e introduce otros valores.
  4. En la sección Configuración de la API:

    1. Puedes crear una configuración de API o seleccionar una que ya tengas en el menú desplegable Seleccionar una configuración. En este tutorial, selecciona Crear una nueva configuración de API.
    2. Usa el explorador de archivos para subir el archivo openapi2-functions.yaml que se utiliza para definir tu API.
    3. Introduce un nombre visible para la configuración de la API.
    4. Selecciona una cuenta de servicio en la lista desplegable. La cuenta de servicio que selecciones se usará como identidad de API Gateway.

    5. (Opcional) Añade etiquetas a tu configuración de API con el formato clave/valor. Para añadir más de una etiqueta, haz clic en Añadir etiqueta e introduce otros valores.

  5. En la sección Detalles de la pasarela:

    1. Introduce el nombre visible de la pasarela. La URL de la pasarela se genera automáticamente.
    2. Seleccione la ubicación de la pasarela en el menú desplegable.
    3. (Opcional) Añada etiquetas a su pasarela con el formato clave/valor. Para añadir más de una etiqueta, haz clic en Añadir etiqueta e introduce otros valores.
  6. Haz clic en Crear pasarela.

De esta forma, se desplegará la configuración de la API en una pasarela recién creada. Al desplegar una configuración de API en una pasarela, se define una URL externa que los clientes de la API pueden usar para acceder a tu API.

La operación puede tardar varios minutos en completarse. Para comprobar el estado del proceso de creación e implementación, puede hacer clic en el icono Notificación de la barra de navegación principal para ver una notificación de estado, como se muestra en la siguiente imagen:

Panel de notificaciones de estado

Cuando se complete el proceso, podrás ver los detalles de la pasarela en la página de destino Pasarelas.

Ir a API Gateway

Anota la URL de la pasarela. Se usa para probar tu implementación en el siguiente paso.

Probar el despliegue de la API

Ahora puedes enviar solicitudes a tu API mediante la URL generada al desplegar tu gateway.

En el navegador, introduce la siguiente URL, donde:

  • GATEWAY_URL especifica la URL de la pasarela implementada.
  • hello es la ruta especificada en la configuración de tu API.
https://GATEWAY_URL/hello

Por ejemplo:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

El mensaje Hello World! debería mostrarse en tu navegador.

Has creado y desplegado correctamente una API Gateway.

Proteger el acceso mediante una clave de API

Para proteger el acceso a tu backend de API, puedes generar una clave de API asociada a tu proyecto y concederle acceso para llamar a tu API. Consulta más información en el artículo Restringir el acceso a las APIs con claves de API.

Si aún no tienes una clave de API asociada al proyecto Google Cloud que estás usando en esta guía de inicio rápido, puedes añadir una siguiendo los pasos que se indican en Crear una clave de API.

Para proteger el acceso a tu pasarela con una clave de API, sigue estos pasos:

  1. Habilita la compatibilidad con claves de API en tu servicio:
    1. En la Google Cloud consola, ve a APIs y servicios > Biblioteca.
    2. En la barra de búsqueda, introduce el nombre del servicio gestionado de la API que acabas de crear. Puedes encontrar este valor en la columna Servicio gestionado de tu API en la página de destino de las APIs. Por ejemplo:
      my-api-123abc456def1.apigateway.my-project.cloud.goog
    3. En la página de destino de tu servicio, haz clic en Habilitar.
  2. Modifica la especificación de OpenAPI que se ha usado para crear la configuración de tu API de forma que incluya instrucciones para aplicar una política de seguridad de validación de claves de API a todo el tráfico. Añade el tipo security y securityDefinitions, tal como se muestra a continuación:
        # openapi2-functions.yaml
        swagger: '2.0'
        info:
          title: API_ID optional-string
          description: Sample API on API Gateway with a Google Cloud Functions backend
          version: 1.0.0
        schemes:
          - https
        produces:
          - application/json
        paths:
          /hello:
            get:
              summary: Greet a user
              operationId: hello
              x-google-backend:
                address:https://us-central1.PROJECT_ID.cloudfunctions.net/helloGET
              security:
              - api_key: []
              responses:
                '200':
                  description: A successful response
                  schema:
                    type: string
        securityDefinitions:
          # This section configures basic authentication with an API key.
          api_key:
            type: "apiKey"
            name: "key"
            in: "query"
        
    securityDefinition configura tu API para que requiera una clave de API que se transmita como parámetro de consulta llamado key al solicitar acceso a todas las rutas definidas en la especificación.
  3. Crea y despliega una configuración de API en tu pasarela:
    1. Ve a la página de destino de las pasarelas.

      Ir a API Gateway

    2. Selecciona tu pasarela en la lista para ver los detalles.
    3. Haz clic en Editar para abrir el panel de configuración de la pasarela.
    4. En la sección Configuración de la API:
      1. Selecciona Crear una configuración de API en el menú desplegable.
      2. Sube la especificación de OpenAPI modificada con el explorador de archivos.
      3. Introduce el nombre visible de la nueva configuración de API.
      4. Selecciona una cuenta de servicio en la lista desplegable. La cuenta de servicio que selecciones se usará como identidad de API Gateway.
      5. (Opcional) Añade etiquetas a tu configuración de API con el formato clave/valor. Para añadir más de una etiqueta, haz clic en Añadir etiqueta e introduce otros valores.
    5. Haz clic en Actualizar.

Probar tu clave de API

Una vez que hayas creado y desplegado la API modificada, prueba a hacer una solicitud.

En el navegador, introduce la siguiente URL, donde:

  • GATEWAY_URL especifica la URL de la pasarela implementada.
  • hello es la ruta especificada en la configuración de tu API.
https://GATEWAY_URL/hello

Por ejemplo:

https://my-gateway-a12bcd345e67f89g0h.uc.gateway.dev/hello

Debería producirse el siguiente error:

UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.

Ahora, en tu navegador, introduce la siguiente URL, donde:

  • GATEWAY_URL especifica la URL de la pasarela implementada.
  • hello es la ruta especificada en la configuración de tu API.
  • API_KEY especifica la clave de API que has creado en Proteger el acceso mediante una clave de API.
https://GATEWAY_URL/hello?key=API_KEY

Ahora deberías ver Hello World! en tu navegador.

¡Enhorabuena! Has protegido correctamente tu backend de API con API Gateway. Ahora puedes empezar a incorporar nuevos clientes de la API generando claves de API adicionales.

Monitorizar la actividad de la API

  1. Consulta los gráficos de actividad de tu API en la página API Gateway de laGoogle Cloud consola. Haz clic en tu API para ver sus gráficos de actividad en la página Vista general. Las solicitudes pueden tardar unos instantes en reflejarse en los gráficos.

  2. Consulta los registros de solicitudes de tu API en la página Explorador de registros. Puedes encontrar un enlace a la página Explorador de registros en la página API Gateway de la consolaGoogle Cloud .

    Ir a API Gateway

    Una vez que estés en la página de API Gateway:

    1. Selecciona la API que quieras ver.
    2. Haga clic en la pestaña Detalles.
    3. Haz clic en el enlace de Registros.

Limpieza

Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en esta guía de inicio rápido, puedes hacer lo siguiente:

También puedes eliminar el Google Cloud proyecto que has usado en este tutorial.

Siguientes pasos