Las claves de API identifican tu aplicación o sitio web en Google Cloud. Las restricciones de claves de API garantizan que solo tus apps y sitios web puedan usar tus claves. Por motivos de seguridad, te recomendamos que agregues restricciones que especifiquen lo siguiente:
- Qué clientes o sitios web pueden usar tus claves de API.
- Las Google Cloud APIs a las que tu aplicación puede llamar con 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 se recibe una solicitud HTTP desde un dominio diferente, la solicitud se rechazará con un error.
Puedes agregar restricciones cuando creas una clave de API con el método CreateKey o puedes agregarlas después de que se crea 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 muestra cómo agregarlas.
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 de cliente:
browserKeyRestrictions: Son los sitios web de referencia HTTP que pueden usar la clave.serverKeyRestrictions: Son las direcciones IP de los emisores que pueden usar la clave.androidKeyRestrictions: Son las apps para Android que pueden usar la clave.iosKeyRestrictions: Son las apps para iOS que pueden usar la clave.
Agrega restricciones de navegador
En el siguiente ejemplo, se muestra cómo llamar al método UpdateKey para restringir el sitio web de referencia HTTP a www.example.com:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": "www.example.com" } }, "etag": "ETAG" }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions'
Cuando la respuesta de operations.get contiene "done": true, la response
contiene la Key actualizada con las restricciones.
En el siguiente ejemplo, se muestra cómo crear una clave de API nueva que solo permite solicitudes HTTP de una lista de URLs específicas.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with browser restrictions", "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": ["www.example.com", "www.example-2.com"] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
En la siguiente tabla, se muestran algunos ejemplos de situaciones y restricciones de navegador:
| Situación | Restricciones |
|---|---|
| Permitir cualquier URL en tu sitio | Debes establecer dos URLs en la lista allowedReferers.
|
| Permite una URL específica | Agrega una URL con una ruta de acceso exacta. Por ejemplo:www.example.com/pathwww.example.com/path/path
|
| Permitir cualquier URL en un solo subdominio o dominio simple | Debes establecer dos URLs en la lista `allowedReferers` para permitir un dominio completo.
|
Agrega restricciones de servidor
Puedes especificar una o más direcciones IP de los emisores, por ejemplo, los servidores web o los trabajos cron, que pueden usar tu 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 con 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:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "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"] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
Agrega restricciones para 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 app.
Por ejemplo, supongamos que ejecutaste la
keytool utilidad
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 en androidKeyRestrictions:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "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" } ] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
Agrega restricciones para 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 se crea una clave de API:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with iOS restrictions", "restrictions" : { "iosKeyRestrictions": { "allowedBundleIds": ["com.example.my.app1", "com.example.my.app2"] } } }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
Agrega restricciones de API
Las restricciones de API te permiten especificar qué Google Cloud APIs se pueden llamar con la clave de API. Te 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 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:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "displayName" : "API key with API restrictions", "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" }, { "service" : "datastore.googleapis.com" } ] }, }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys'
Para obtener una lista de los servicios habilitados en tu
Google Cloud proyecto, usa el gcloud services list
comando.
Además de restringir la clave de API para su uso en servicios específicos, también puedes especificar los métodos en cada servicio para restringir aún más la clave de API. En el siguiente ejemplo, se muestra cómo restringir la clave anterior solo a los métodos permitidos de translate.googleapis.com:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com", "methods": [ "Get*", "DetectLanguage" ] }, { "service" : "datastore.googleapis.com" } ] }, "etag": "ETAG" }' \ 'https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions'