Las claves de API identifican tu aplicación o sitio web en Google Cloud. Las restricciones de clave de API garantizan que solo tus apps y sitios web puedan usar tus claves. Por motivos de seguridad, te recomendamos agregar restricciones que especifiquen lo siguiente:
- Qué clientes o sitios web pueden usar tus claves de API
- Las API de Google Cloud a las que tu aplicación puede llamar mediante tus claves de API.
Si un cliente usa una clave de API restringida para emitir una solicitud que no cumple con las restricciones de la clave de API, la solicitud falla. Por ejemplo, si una clave de API requiere que las solicitudes HTTP se emitan desde un dominio específico, pero que se recibe una solicitud HTTP de otro dominio, la solicitud se rechazará con un error.
Puedes agregar restricciones cuando creas una clave de API con el método CreateKey
o puedes agregar las restricciones después de crear la clave con el método UpdateKey
. En esta página, se describen las restricciones que puedes agregar a una clave de API y se indica cómo agregar esas restricciones.
Antes de comenzar
La página usa curl
con la herramienta de línea de comandos oauth2l para enviar solicitudes a la API de claves de API. Consulta Comenzar a usar las claves de API para obtener detalles sobre cómo configurar la API.
Agrega restricciones de cliente
Las restricciones de cliente especifican qué sitios web, direcciones IP o apps pueden usar una clave de API. Agrega restricciones de cliente según el tipo de cliente que llama a tu API. Puedes especificar uno de los siguientes tipos de restricciones del cliente:
browserKeyRestrictions
: las referencias HTTP (sitios web) que tienen permiso para usar la clave.serverKeyRestrictions
: Las direcciones IP de los emisores que pueden usar la clave.androidKeyRestrictions
: las apps para Android que tienen permiso para usar la claveiosKeyRestrictions
: las apps para iOS que tienen permiso para usar la clave.
Cómo agregar restricciones de navegación
El siguiente ejemplo muestra cómo llamar al método UpdateKey
para restringir el referente HTTP a www.example.com
:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions \ --request PATCH \ --data '{ "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": "www.example.com" } } "etag": "ETAG" }'
Cuando la respuesta de operations.get
contiene "done": true
, response
contiene el Key
actualizado con las restricciones.
En el siguiente ejemplo, se muestra cómo crear una clave de API nueva que solo permita solicitudes HTTP de una lista de URL específicas.
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with browser restrictions", "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": ["www.example.com", "www.example-2.com"] } } }'
En la siguiente tabla, se muestran algunas situaciones de ejemplo y restricciones de navegador:
Situación | Restricciones |
---|---|
Permitir cualquier URL en tu sitio | Debes establecer dos URL en la lista "allowedReferers".
|
Permitir una URL específica | Agrega una URL con una ruta de acceso exacta. Por ejemplo:www.example.com/path www.example.com/path/path
|
Permitir cualquier URL en un solo subdominio o dominio simple | Debes establecer dos URL en la lista "allowedReferers" para permitir un dominio completo.
|
Agrega restricciones de servidor
Puedes especificar una o más direcciones IP de los emisores, como los servidores web o los trabajos cron, que pueden usar la clave de API. Puedes especificar las direcciones IP en cualquiera de los siguientes formatos:
- IPv4 (
198.51.100.1
) - IPv6 (
2001:db8::1
) - Una subred que usa notación CIDR (
198.51.100.0/24
,2001:db8::/64
)
En el siguiente ejemplo, se muestra cómo crear una clave de API con una lista de allowedIps
:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with server restrictions with IPv4, IPv6 and CIDR", "restrictions" : { "serverKeyRestrictions": { "allowedIps": ["198.51.100.1","198.51.100.0/24","2001:db8::1","2001:db8::/64"] } } }'
Cómo agregar restricciones de Android
Puedes restringir el uso de una clave de API solo a tus apps para Android. Cuando crees o actualices una clave de API, proporciona el nombre del paquete y la huella digital SHA-1 de 20 bytes para cada aplicación.
Por ejemplo, supongamos que ejecutaste la utilidad keytool
y que creó la siguiente huella digital:
Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09
En el siguiente ejemplo, se muestra cómo crear una clave de API con la huella digital y el nombre del paquete para androidKeyRestrictions
:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with Android restrictions", "restrictions" : { "androidKeyRestrictions": { "allowedApplications": [ { "sha1Fingerprint": "DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09", "packageName": "com.example.my.app" } ] } } }'
Cómo agregar restricciones de iOS
Puedes restringir el uso de una clave de API solo a tus apps para iOS si proporcionas el ID del paquete de cada app cuando creas o actualizas una clave. En el siguiente ejemplo, se muestra cómo configurar iosKeyRestrictions
cuando creas una clave de API:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with iOs restrictions", "restrictions" : { "iosKeyRestrictions": { "allowedBundleIds": ["com.example.my.app1", "com.example.my.app2"] } } }'
Agrega restricciones de API
Las restricciones de la API te permiten especificar a qué API de Google Cloud se puede llamar con la clave de API. Recomendamos que agregues restricciones de cliente y de API a todas tus claves de API.
Puedes especificar uno o más servicios en las restricciones de la API. En el siguiente ejemplo, se muestra cómo restringir el uso de una clave de API nueva solo a los servicios translate.googleapis.com
y datastore.googleapis.com
:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" }, { "service" : "datastore.googleapis.com" } ] }, }'
Para obtener una lista de los servicios que están habilitados en tu proyecto de Cloud, usa el comando gcloud services list
.
Además de restringir la clave de API para su uso en servicios específicos, puedes especificar de forma opcional los métodos de cada servicio a fin de restringir aún más la clave de API. En el siguiente ejemplo, se muestra cómo restringir la clave anterior a solo los métodos de translate.googleapis.com
permitidos:
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions \ --request PATCH \ --data '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" "methods": [ "Get*", "DetectLanguage" ] }, { "service" : "datastore.googleapis.com" } ] }, "etag": "ETAG" }'