Puedes usar claves de API para restringir el acceso a métodos de API específicos o a todos los métodos de una API. En esta página se describe cómo restringir el acceso a la API a los clientes que tienen una clave de API y también se muestra cómo crear una clave de API.
El proxy de servicios extensible (ESP) usa la API Service Control para validar una clave de API y su asociación con la API habilitada de un proyecto. Si estableces un requisito de clave de API en tu API, las solicitudes al método, la clase o la API protegidos se rechazarán a menos que tengan una clave generada en tu proyecto o en otros proyectos pertenecientes a desarrolladores a los que hayas concedido acceso para habilitar tu API. El proyecto en el que se creó la clave de API no se registra y no se añade al encabezado de la solicitud. Sin embargo, puede ver el proyecto Google Cloud con el que está asociado un cliente en Puntos finales > Servicios, tal como se describe en Filtrar por un proyecto de consumidor específico.
Para obtener información sobre en qué Google Cloud proyecto se debe crear una clave de API, consulta Compartir APIs protegidas por claves de API.
Restringir el acceso a todos los métodos de la API
Para requerir una clave de API para acceder a todos los métodos de una API, sigue estos pasos:
Abre el archivo
openapi.yaml
de tu proyecto en un editor de texto.En
securityDefinitions:
, añade los valoresapi_key:
apiKey
,key
yquery
tal como se muestra en el fragmento de código de ejemplo:De esta forma, se establece un "esquema de seguridad" llamado
api_key
, que puedes usar para proteger la API. Para ver otras opciones de definición deapi_key
, consulta las limitaciones de la definición de claves de API.En el nivel superior del archivo (sin sangría ni anidación), añade
api_key: []
a la directivasecurity
. Puede que tengas que añadir la directivasecurity
o que ya esté presente:security: - api_key: []
Esta directiva aplica el esquema de seguridad
api_key
a todos los métodos del archivo. No incluyas nada entre los corchetes. La especificación de OpenAPI requiere una lista vacía para los esquemas de seguridad que no usan OAuth.
Restringir el acceso a métodos de API específicos
Para requerir una clave de API para un método específico, sigue estos pasos:
Abre el archivo
openapi.yaml
de tu proyecto en un editor de texto.En el nivel superior del archivo (sin sangría ni anidación), añade una directiva de seguridad vacía para aplicarla a toda la API:
security: []
En
securityDefinitions:
, añade los valoresapi_key:
apiKey
,key
yquery
tal como se muestra en el fragmento de código de ejemplo:De esta forma, se establece un "esquema de seguridad" llamado
api_key
, que puedes usar para proteger la API. Para ver otras opciones de definición deapi_key
, consulta las limitaciones de la definición de claves de API.Añade
api_key: []
a la directivasecurity
en la definición del método:... paths: "/echo": post: description: "Echo back a given message." operationId: "echo" security: - api_key: [] produces: ...
Esta directiva aplica el esquema de seguridad
api_key
al método. No coloques nada entre los corchetes. La especificación de OpenAPI requiere una lista vacía para los esquemas de seguridad que no usan OAuth.
Quitar la restricción de clave de API de un método
Para desactivar la validación de la clave de API de un método concreto, aunque hayas restringido el acceso a la API:
Abre el archivo
openapi.yaml
de tu proyecto en un editor de texto.Añade una directiva
security
vacía en la definición del método:... paths: "/echo": post: description: "Echo back a given message." operationId: "echo" security: [] produces: ...
Llamar a una API con una clave de API
Si una API o un método de API requieren una clave de API, proporciona la clave mediante un parámetro de consulta llamado key
, como se muestra en el siguiente ejemplo de curl:
curl "${ENDPOINTS_HOST}/echo?key=${ENDPOINTS_KEY}"
donde ENDPOINTS_HOST
y ENDPOINTS_KEY
son variables de entorno que contienen el nombre de host y la clave de la API, respectivamente.
Compartir APIs protegidas con una clave de API
Las claves de API están asociadas al Google Cloud proyecto en el que se han creado. Si has decidido que tu API requiera una clave de API, el Google Cloud proyecto en el que se cree la clave de API dependerá de las respuestas a las siguientes preguntas:
- ¿Necesitas distinguir entre los llamantes de tu API para poder usar funciones de Endpoints, como las cuotas?
- ¿Todos los usuarios que llaman a tu API tienen sus propios Google Cloud proyectos?
- ¿Necesitas configurar diferentes restricciones de clave de API?
Puedes usar el siguiente diagrama de flujo para decidir en qué Google Cloud proyecto crear la clave de API.

Concede permiso para habilitar la API
Si necesitas distinguir entre los llamantes de tu API y cada llamante tiene su propio proyecto, puedes conceder a las principales permiso para habilitar la API en su propio proyecto. Google Cloud Google Cloud De esta forma, los usuarios de tu API pueden crear su propia clave de API para usarla con tu API.
Por ejemplo, supongamos que tu equipo ha creado una API para uso interno de varios programas cliente de tu empresa y que cada programa cliente tiene su propio Google Cloud proyecto. Para distinguir entre los llamantes de tu API, la clave de API de cada llamante debe crearse en un proyecto Google Cloud diferente. Puedes conceder permiso a tus compañeros para que habiliten la API en el Google Cloud proyecto al que esté asociado el programa cliente.
Para permitir que los usuarios creen su propia clave de API, sigue estos pasos:
- En el Google Cloud proyecto en el que esté configurada tu API, concede a cada usuario el permiso para habilitar tu API.
- Ponte en contacto con los usuarios e infórmales de que pueden habilitar tu API en su propio proyecto Google Cloud y crear una clave de API.
Crea un Google Cloud proyecto independiente para cada persona que llame
Si necesitas distinguir entre los llamantes de tu API y no todos los llamantes tienen proyectos de Google Cloud , puedes crear un proyecto de Google Cloud y una clave de API independientes para cada llamante. Antes de crear los proyectos, piensa en los nombres que les vas a dar para poder identificar fácilmente la persona que llama asociada a cada proyecto.
Por ejemplo, supongamos que tienes clientes externos de tu API y no sabes cómo se crearon los programas de cliente que llaman a tu API. Puede que algunos clientes usen Google Cloud servicios y tengan un Google Cloud proyecto, y puede que otros no. Para distinguir entre los llamantes, debes crear un Google Cloud proyecto y una clave de API independientes para cada uno.
Para crear un proyecto y una clave de API independientes para cada llamante, sigue estos pasos: Google Cloud
- Crea un proyecto independiente para cada persona que llame.
- En cada proyecto, habilita la API y crea una clave de API.
- Proporciona la clave de API a cada persona que llame.
Crear una clave de API para cada llamante
Si no necesitas distinguir entre los llamantes de tu API, pero quieres añadir restricciones a la clave de API, puedes crear una clave de API independiente para cada llamante en el mismo proyecto.
Para crear una clave de API para cada llamante del mismo proyecto, sigue estos pasos:
- En el proyecto en el que esté configurada tu API o en un proyecto en el que esté habilitada, crea una clave de API para cada cliente que tenga las restricciones de clave de API que necesites.
- Proporciona la clave de API a cada persona que llame.
Crear una clave de API para todos los llamantes
Si no necesitas distinguir entre los llamantes de tu API ni añadir restricciones de API, pero quieres requerir una clave de API (por ejemplo, para evitar el acceso anónimo), puedes crear una clave de API para que la usen todos los llamantes.
Para crear una clave de API para todos los llamantes, sigue estos pasos:- En el proyecto en el que esté configurada tu API o en un proyecto en el que esté habilitada, crea una clave de API para todos los llamantes que tenga las restricciones de clave de API que necesites.
- Proporcionar la misma clave de API a todos los llamantes.
Prácticas recomendadas
Si utilizas claves de API para proteger el acceso a tu API y a los datos de los usuarios, asegúrate de definir la marca --service_control_network_fail_policy
en close
al configurar las opciones de inicio de Extensible Service Proxy V2 (ESPv2). El valor predeterminado de la marca es open.
.
ESPv2 llama a Service Control para verificar las claves de API. Si se producen fallos en la red al conectarse a Service Control y ESPv2 no puede verificar la clave de API, se rechazarán las solicitudes que se hagan a tu API con claves fraudulentas.