Utilizar 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 Google Cloud proyecto con fines de cuota, facturación y monitorización. Los desarrolladores generan una clave de API en un proyecto de la Google Cloud consola. Después, insertan esa clave en cada llamada a tu API como parámetro de consulta o en un encabezado de solicitud.

Si especificas un requisito de clave de API en la configuración de tu API, API Gateway usará 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 Google Cloud o en otros proyectosGoogle Cloud en los que se haya habilitado tu API.

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

Ir a Credenciales

Usar una clave de API

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

Configurar la autenticación con clave de API en API Gateway

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. Introduce el siguiente comando, donde:
    • MANAGED_SERVICE_NAME especifica el nombre del servicio gestionado que se creó al implementar la API. Puedes verlo en la propiedad Managed Service, que aparece con el comando gcloud api-gateway apis describe.
    • PROJECT_ID especifica el nombre de tu Google Cloud proyecto.
    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 ha usado para crear la configuración de la 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 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"

    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.

    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

    securitySchemes 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 una configuración de API con la descripción de OpenAPI modificada mediante el siguiente comando:
    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 pasarela 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

Restringir claves de API

De forma predeterminada, las claves de API no tienen restricciones, lo que las hace vulnerables al uso no autorizado. Añade restricciones de API siempre que sea posible. Las restricciones de API especifican a qué APIs se puede llamar con la clave de API. Todas las claves de API que usen las aplicaciones de producción deben tener restricciones de API.

Para añadir restricciones de API, sigue estos pasos:

  1. Busca el título de la API, tal 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 Google Cloud consola, ve a la página APIs y servicios > Credenciales.

    Ir a Credenciales

  3. Selecciona el nombre de la clave de API que quieras usar en 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, seleccione la API a la que se accederá con su clave de API. Por ejemplo, selecciona My Example Config.

  6. Haz clic en Guardar.

La restricción debería aplicarse en breve.