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.
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:
- 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 .
Por ejemplo:gcloud services enable MANAGED_SERVICE_NAME.apigateway.PROJECT_ID.cloud.goog
gcloud services enable my-api-123abc456def1.apigateway.my-project.cloud.goog
- 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
- 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
securityysecurityDefinitionsosecuritySchemescomo 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
securityDefinitionconfigura tu API para que requiera una clave de API pasada como un parámetro de consulta llamadokeycuando 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
securitySchemesconfigura tu API para que requiera una clave de API pasada como un parámetro de consulta llamadokeycuando se solicita acceso a todas las rutas de acceso definidas en la especificación. - Usa el siguiente comando para crear una nueva configuración de API con la descripción de OpenAPI modificada:
Por ejemplo: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
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
- Ejecuta el siguiente comando para actualizar tu puerta de enlace existente con la nueva configuración de API:
Por ejemplo:gcloud api-gateway gateways update GATEWAY_ID \ --api=API_ID --api-config=NEW_CONFIG_ID \ --location=GATEWAY_LOCATION --project=PROJECT_ID
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:
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 ...
En la consola de Google Cloud , ve a la página APIs & Services > Credentials.
Selecciona el nombre de la clave de API que deseas usar para tu API.
En la sección Restricciones de API de la página de detalles de la clave de API, haz clic en Restringir clave.
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.Haz clic en Guardar.
La restricción debería aplicarse en un momento.