Usa claves de API

En esta página, se describe cómo usar las claves de API en API Gateway.

Una clave de API es una cadena que identifica un proyecto deGoogle Cloud para fines de cuotas, facturación y supervisión. Los desarrolladores generan una clave de API en un proyecto en la Google Cloud consola. Luego, incorporan esa clave en cada llamada a tu API como un parámetro de búsqueda o en un encabezado de solicitud.

Si especificas un requisito de clave de API en tu configuración de API, API Gateway usa la clave de API para buscar el proyecto Google Cloud asociado. API Gateway rechaza las solicitudes, a menos que la clave de API se haya generado en tu proyecto de Google Cloud o en otros proyectos deGoogle Cloud en los que se haya habilitado tu API.

Para crear una clave de API o ver las claves de API que ya están disponibles en tu proyecto de Google Cloud , ve a la página APIs y servicios > Credenciales.

Ir a Credenciales

Usa una clave de API

Para usar las funciones de API Gateway, como las cuotas, puedes pasar una clave de API para que API Gateway pueda identificar el proyecto Google Cloud con el que está asociada la aplicación cliente.

Configura la autenticación de clave de API para API Gateway

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

  1. Habilita la compatibilidad con claves de API para tu servicio. Ingresa el siguiente comando, donde:
    • MANAGED_SERVICE_NAME especifica el nombre del servicio administrado que se creó cuando implementaste la API. Puedes ver esto en la propiedad de servicio administrado que aparece con el comando gcloud api-gateway apis describe.
    • PROJECT_ID especifica el nombre de tu proyecto Google Cloud .
    gcloud services enable MANAGED_SERVICE_NAME.apigateway.PROJECT_ID.cloud.goog
    Por ejemplo:
    gcloud services enable my-api-123abc456def1.apigateway.my-project.cloud.goog
  2. Modifica la especificación de OpenAPI que se usa para crear la configuración de la API a fin de incluir instrucciones para aplicar una política de seguridad de validación de claves de API en todo el tráfico. Agrega el tipo security y securityDefinitions o securitySchemes como se muestra a continuación:

    OpenAPI 2.0

      # 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://GCP_REGION-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"

    El securityDefinition configura tu API para que requiera una clave de API pasada como un parámetro de consulta llamado key cuando se solicita acceso a todas las rutas de acceso definidas en la especificación.

    OpenAPI 3.x

    # openapi-functions.yaml
    openapi: 3.0.4
    info:
      title: API_ID optional-string
      description: Sample API on API Gateway with a Google Cloud Functions backend
      version: 1.0.0
    # Define reusable components in x-google-api-management
    x-google-api-management:
      backend:
        functions_backend:
          address: https://GATEWAY_LOCATION-PROJECT_ID.cloudfunctions.net/helloGET
          pathTranslation: APPEND_PATH_TO_ADDRESS
          protocol: "http/1.1"
    # Apply the backend configuration by referencing it by name. Set at the root so this applies to all operations unless overridden.
    x-google-backend: functions_backend
    components:
    # This section configures basic authentication with an API key.
      securitySchemes:
        google_api_key:
          type: apiKey
          name: x-api-key
          in: header
    security:
      - google_api_key: []
    paths:
      /hello:
        get:
          summary: Greet a user
          operationId: hello
          responses:
            '200':
              description: A successful response
              content:
                application/json:
                  schema:
                    type: string

    El securitySchemes configura tu API para que requiera una clave de API pasada como un parámetro de consulta llamado key cuando se solicita acceso a todas las rutas de acceso definidas en la especificación.

  3. Usa el siguiente comando para crear una nueva configuración de API con la descripción de OpenAPI modificada:
    gcloud api-gateway api-configs create NEW_CONFIG_ID \
    --api=API_ID --openapi-spec=NEW_API_DEFINITION \
    --project=PROJECT_ID --backend-auth-service-account=SERVICE_ACCOUNT_EMAIL
    Por ejemplo:
    gcloud api-gateway api-configs create my-config-key \
      --api=my-api --openapi-spec=openapi-functions.yaml \
      --project=my-project --backend-auth-service-account=0000000000000compute@developer.gserviceaccount.com
  4. Ejecuta el siguiente comando para actualizar tu puerta de enlace existente con la nueva configuración de API:
    gcloud api-gateway gateways update GATEWAY_ID \
      --api=API_ID --api-config=NEW_CONFIG_ID \
      --location=GATEWAY_LOCATION --project=PROJECT_ID
    Por ejemplo:
    gcloud api-gateway gateways update my-gateway \
      --api=my-api --api-config=my-config-key \
      --location=us-central1 --project=my-project

Cómo restringir las claves de API

De forma predeterminada, las claves de API no están restringidas, lo que las hace vulnerables al uso no autorizado. Agrega restricciones de API siempre que sea posible. Las restricciones de API especifican a qué API se puede llamar mediante la clave de API. Todas las claves de API que usan las aplicaciones de producción deben tener restricciones de API.

Para agregar restricciones de API, sigue estos pasos:

  1. Busca el título de la API como se indica en la configuración de la API. En el siguiente ejemplo, el título de la API es My Example Config:

    OpenAPI 2.0

    # openapi.yaml
    swagger: '2.0'
    info:
      title: My Example Config
      description: Sample API on API Gateway
      version: 1.0.0
    ...

    OpenAPI 3.x

    # openapi.yaml
    openapi: 3.0.4
    info:
      title: My Example Config
      description: Sample API on API Gateway
      version: 1.0.0
    ...

  2. En la consola de Google Cloud , ve a la página APIs & Services > Credentials.

    Ir a Credenciales

  3. Selecciona el nombre de la clave de API que deseas usar para tu API.

  4. En la sección Restricciones de API de la página de detalles de la clave de API, haz clic en Restringir clave.

  5. En la lista desplegable de APIs disponibles, selecciona la API a la que se usará tu clave de API para acceder. Por ejemplo, selecciona My Example Config.

  6. Haz clic en Guardar.

La restricción debería aplicarse en un momento.