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.
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:
- 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.
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 gestionado que se creó al implementar la API. Puedes verlo en la propiedad Managed Service, que aparece con el comando
- 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
securityysecurityDefinitionsosecuritySchemes, 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"
securityDefinitionconfigura tu API para que requiera una clave de API que se transmita como parámetro de consulta llamadokeyal 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
securitySchemesconfigura tu API para que requiera una clave de API que se transmita como parámetro de consulta llamadokeyal solicitar acceso a todas las rutas definidas en la especificación. - Crea una configuración de API con la descripción de OpenAPI modificada mediante el siguiente comando:
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 pasarela 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
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:
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 ...
En la Google Cloud consola, ve a la página APIs y servicios > Credenciales.
Selecciona el nombre de la clave de API que quieras usar en 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, seleccione la API a la que se accederá con su clave de API. Por ejemplo, selecciona
My Example Config.Haz clic en Guardar.
La restricción debería aplicarse en breve.