Gestionar claves de API

En esta página se describe cómo crear, editar y restringir claves de API. Para obtener información sobre cómo usar claves de API para acceder a las APIs de Google, consulta el artículo Usar claves de API para acceder a las APIs.

Introducción a las claves de API

Hay dos tipos de claves de API: las claves de API estándar y las claves de API que se han asociado a una cuenta de servicio.

Claves de API estándar

Las claves de API estándar permiten asociar una solicitud a un proyecto con fines de facturación y de cuota. Cuando usas una clave de API estándar (una clave de API que no se ha asociado a una cuenta de servicio) para acceder a una API, la clave de API no identifica a un principal. Sin una cuenta principal, la solicitud no puede usar Gestión de Identidades y Accesos (IAM) para comprobar si el llamante tiene autorización para realizar la operación solicitada.

Las claves de API estándar se pueden usar con cualquier API que las acepte, a menos que se hayan añadido restricciones a la clave. Las claves de API estándar no se pueden usar con servicios que no las acepten, incluido el modo exprés.

Claves de API asociadas a una cuenta de servicio

Las claves de API asociadas a una cuenta de servicio proporcionan la identidad y la autorización de la cuenta de servicio a una solicitud. Cuando usas una clave de API que se ha vinculado a una cuenta de servicio para acceder a una API, tu solicitud se procesa como si hubieras usado la cuenta de servicio vinculada para hacer la solicitud.

La única API que admite claves de API vinculadas es aiplatform.googleapis.com.

Una restricción de política de organización predeterminada impide asociar claves a una cuenta de servicio. Para cambiar este ajuste, consulta Habilitar la vinculación de claves a cuentas de servicio.

Componentes de la clave de API

Una clave de API tiene los siguientes componentes, que te permiten gestionar y usar la clave:

Cadena
La cadena de clave de API es una cadena cifrada, por ejemplo: AIzaSyDaGmWKa4JsXZ-HjGw7ISLn_3namBGewQe. Cuando usas una clave de API para acceder a una API, siempre usas la cadena de la clave. Las claves de API no tienen ningún archivo JSON asociado.
ID
Las herramientas administrativas usan el ID de la clave de API Google Cloud para identificarla de forma única. El ID de clave no se puede usar para acceder a las APIs. El ID de la clave se puede encontrar en la URL de la página de edición de la clave en la Google Cloud consola. También puedes obtener el ID de la clave mediante la CLI de Google Cloud para enumerar las claves de tu proyecto.
Nombre visible
El nombre visible es un nombre descriptivo opcional de la clave que puedes definir al crearla o actualizarla.
Cuenta de servicio vinculada
Las claves de API asociadas a una cuenta de servicio incluyen la dirección de correo de la cuenta de servicio.

Antes de empezar

Completa las siguientes tareas para usar las muestras de esta página.

Configurar la autenticación

Select the tab for how you plan to use the samples on this page:

Console

When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

gcloud

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

C++

Para usar las C++ muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

  1. Install the Google Cloud CLI.

  2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

Java

Para usar las Java muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

  1. Install the Google Cloud CLI.

  2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

Python

Para usar las Python muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

  1. Install the Google Cloud CLI.

  2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

REST

Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

    Install the Google Cloud CLI.

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para gestionar claves de API, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Habilitar la vinculación de claves a cuentas de servicio

Para vincular una clave de API a una cuenta de servicio, primero debes definir la restricción de la política de la organización constraints/iam.managed.disableServiceAccountApiKeyCreation en false. Para cambiar la política de la organización, se necesita un recurso de organización asociado. No se admiten proyectos sin una organización.

Para cambiar la restricción de la política, sigue estas instrucciones.

Consola

  1. En la Google Cloud consola, ve a la página Políticas de la organización.

    Ir a Políticas de organización

  2. Cambia a la organización, la carpeta o el proyecto cuyas políticas quieras modificar.

  3. En el cuadro Filtrar, introduce Block service y, a continuación, haz clic en el nombre del filtro Bloquear enlaces de claves de API de cuentas de servicio.

  4. Haz clic en Gestionar política.

  5. En la sección Fuente de la política, seleccione Anular política del recurso superior.

  6. Haz clic en Añadir regla y, en Cumplimiento, selecciona Desactivado.

  7. Haz clic en Listo.

  8. Opcional: Haz clic en Probar cambios para obtener información sobre cómo puede provocar infracciones o interrupciones la política propuesta.

  9. Haz clic en Definir política.

gcloud

  1. Crea un archivo llamado spec.yaml con el siguiente contenido:

    name: SCOPE/SCOPE_ID/policies/iam.managed.disableServiceAccountApiKeyCreation
    spec:
      rules:
      - enforce: false
    

    Proporciona los siguientes valores:

    • SCOPE: organizations, folders o projects.

    • SCOPE_ID: en función de SCOPE, el ID de la organización, la carpeta o el proyecto al que se aplica la política de la organización.

  2. Ejecuta el siguiente comando de gcloud para permitir la vinculación de claves de API a cuentas de servicio:

    gcloud org-policies set-policy spec.yaml \
        --update-mask spec
    

Crear una clave de API

Para crear una clave de API, usa una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haz clic en Crear credenciales y, a continuación, selecciona Clave de API en el menú.

  3. Opcional: Para vincular la clave de API a una cuenta de servicio, marca la casilla Autenticar llamadas a la API mediante una cuenta de servicio y, a continuación, haz clic en Seleccionar una cuenta de servicio para elegir la cuenta de servicio que quieras vincular a la clave.

    Para obtener más información, consulta Claves de API vinculadas a una cuenta de servicio.

  4. Añade restricciones a la clave de API.

    Restringir las claves de API es una práctica recomendada. Para obtener más información, consulta Aplicar restricciones a claves de API.

  5. Haz clic en Crear. En el cuadro de diálogo Clave de API creada se muestra la cadena de la clave que acabas de crear.

gcloud

Usa el comando gcloud services api-keys create para crear una clave de API.

Sustituye DISPLAY_NAME por un nombre descriptivo para tu clave.

 gcloud services api-keys create \
     --display-name=DISPLAY_NAME

Opcional: Para vincular la clave de API a una cuenta de servicio, usa gcloud beta en su lugar, con la marca --service-account:

 gcloud beta services api-keys create \
     --display-name=DISPLAY_NAME \
     --service-account=SERVICE_ACCOUNT_EMAIL_ADDRESS

Para obtener más información, consulta Claves de API vinculadas a una cuenta de servicio.

C++

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.

#include "google/cloud/apikeys/v2/api_keys_client.h"
#include "google/cloud/location.h"

google::api::apikeys::v2::Key CreateApiKey(
    google::cloud::apikeys_v2::ApiKeysClient client,
    google::cloud::Location location, std::string display_name) {
  google::api::apikeys::v2::CreateKeyRequest request;
  request.set_parent(location.FullName());
  request.mutable_key()->set_display_name(std::move(display_name));
  // As an example, restrict the API key's scope to the Natural Language API.
  request.mutable_key()->mutable_restrictions()->add_api_targets()->set_service(
      "language.googleapis.com");

  // Create the key, blocking on the result.
  auto key = client.CreateKey(request).get();
  if (!key) throw std::move(key.status());
  std::cout << "Successfully created an API key: " << key->name() << "\n";

  // For authenticating with the API key, use the value in `key->key_string()`.

  // The API key's resource name is the value in `key->name()`. Use this to
  // refer to the specific key in a `GetKey()` or `DeleteKey()` RPC.
  return *key;
}

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.ApiTarget;
import com.google.api.apikeys.v2.CreateKeyRequest;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.LocationName;
import com.google.api.apikeys.v2.Restrictions;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateApiKey {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    //  2. Set up ADC as described in https://cloud.google.com/docs/authentication/external/set-up-adc
    //  3. Make sure you have the necessary permission to create API keys.
    String projectId = "GOOGLE_CLOUD_PROJECT_ID";

    createApiKey(projectId);
  }

  // Creates an API key.
  public static void createApiKey(String projectId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      Key key = Key.newBuilder()
          .setDisplayName("My first API key")
          // Set the API key restriction.
          // You can also set browser/ server/ android/ ios based restrictions.
          // For more information on API key restriction, see:
          // https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions
          .setRestrictions(Restrictions.newBuilder()
              // Restrict the API key usage by specifying the target service and methods.
              // The API key can only be used to authenticate the specified methods in the service.
              .addApiTargets(ApiTarget.newBuilder()
                  .setService("translate.googleapis.com")
                  .addMethods("translate.googleapis.com.TranslateText")
                  .build())
              .build())
          .build();

      // Initialize request and set arguments.
      CreateKeyRequest createKeyRequest = CreateKeyRequest.newBuilder()
          // API keys can only be global.
          .setParent(LocationName.of(projectId, "global").toString())
          .setKey(key)
          .build();

      // Make the request and wait for the operation to complete.
      Key result = apiKeysClient.createKeyAsync(createKeyRequest).get(3, TimeUnit.MINUTES);

      // For authenticating with the API key, use the value in "result.getKeyString()".
      // To restrict the usage of this API key, use the value in "result.getName()".
      System.out.printf("Successfully created an API key: %s", result.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2
from google.cloud.api_keys_v2 import Key


def create_api_key(project_id: str, suffix: str) -> Key:
    """
    Creates and restrict an API key. Add the suffix for uniqueness.

    TODO(Developer):
    1. Before running this sample,
      set up ADC as described in https://cloud.google.com/docs/authentication/external/set-up-adc
    2. Make sure you have the necessary permission to create API keys.

    Args:
        project_id: Google Cloud project id.

    Returns:
        response: Returns the created API Key.
    """
    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    key = api_keys_v2.Key()
    key.display_name = f"My first API key - {suffix}"

    # Initialize request and set arguments.
    request = api_keys_v2.CreateKeyRequest()
    request.parent = f"projects/{project_id}/locations/global"
    request.key = key

    # Make the request and wait for the operation to complete.
    response = client.create_key(request=request).result()

    print(f"Successfully created an API key: {response.name}")
    # For authenticating with the API key, use the value in "response.key_string".
    # To restrict the usage of this API key, use the value in "response.name".
    return response

REST

Para crear una clave de API, utiliza el método keys.create. Esta solicitud devuelve una operación de larga duración, por lo que debes sondear la operación para obtener la información de la nueva clave.

Sustituye los siguientes valores:

  • DISPLAY_NAME: opcional. Nombre descriptivo de la clave.
  • PROJECT_ID: el ID o el nombre de tu Google Cloud proyecto.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d {'"displayName" : "DISPLAY_NAME"'} \
"https://apikeys.googleapis.com/v2/projects/PROJECT/locations/global/keys"

Opcional: Para vincular la clave de API a una cuenta de servicio, usa el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d {'"displayName" : "DISPLAY_NAME",
     "serviceAccountEmail" : "SERVICE_ACCOUNT_EMAIL"'} \
"https://apikeys.googleapis.com/v2/projects/PROJECT/locations/global/keys"

Para obtener más información, consulta Claves de API vinculadas a una cuenta de servicio.

Para obtener más información sobre cómo crear claves de API con la API REST, consulta el artículo Crear una clave de API en la documentación de la API Keys.

Aplicar restricciones de clave de API

Las claves de API no tienen restricciones de forma predeterminada. Las claves sin restricciones no son seguras porque cualquier persona puede usarlas desde cualquier lugar. En las aplicaciones de producción, debes definir tanto restricciones de aplicación como restricciones de API.

Añadir restricciones de aplicación

Las restricciones de aplicación especifican qué sitios web, direcciones IP o aplicaciones pueden usar una clave de API.

Solo puedes aplicar un tipo de restricción de aplicación a la vez. Elige el tipo de restricción en función del tipo de aplicación:

Opción Tipo de aplicación Notas
URLs de referencia HTTP Aplicaciones web Especifica los sitios web que pueden usar la clave.
Direcciones IP Aplicaciones llamadas por servidores específicos Especifica los servidores o las tareas cron que pueden usar la clave. Esta es la única restricción disponible si vinculas tu clave de API a una cuenta de servicio.
Aplicaciones Android Aplicaciones Android Especifica la aplicación Android que puede usar la clave.
Aplicaciones iOS Aplicaciones iOS Especifica los paquetes de iOS que pueden usar la clave.

URLs de referencia HTTP

Para restringir los sitios web que pueden usar tu clave de API, añade una o varias restricciones de URL referente con formato HTTP.

Puedes sustituir el subdominio o la ruta por un carácter comodín (*), pero no puedes insertar un carácter comodín en medio de la URL. Por ejemplo, *.example.com es válido y acepta todos los sitios que terminen en .example.com. Sin embargo, mysubdomain*.example.com no es una restricción válida.

Los números de puerto se pueden incluir en las restricciones de referente HTTP. Si incluyes un número de puerto, solo se tendrán en cuenta las solicitudes que usen ese puerto. Si no especificas un número de puerto, se responderá a las solicitudes de cualquier número de puerto.

En la siguiente tabla se muestran algunos ejemplos de situaciones y restricciones de los navegadores:

Situación Restricciones
Permitir una URL específica Añade una URL con una ruta exacta. Por ejemplo:
www.example.com/path
www.example.com/path/path

Algunos navegadores implementan una política de referer que solo envía la URL de origen de las solicitudes de origen cruzado. Los usuarios de estos navegadores no pueden usar claves con restricciones de URL específicas de la página.

Permitir cualquier URL en tu sitio Debe definir dos URLs en la lista allowedReferers.
  1. URL del dominio, sin subdominio y con un comodín para la ruta. Por ejemplo:
    example.com/*
  2. Una segunda URL que incluye un comodín para el subdominio y otro para la ruta. Por ejemplo:
    *.example.com/*
Permitir cualquier URL en un solo subdominio o dominio desnudo

Debes definir dos URLs en la lista allowedReferers para permitir un dominio completo:

  1. URL del dominio, sin barra inclinada al final. Por ejemplo:
    www.example.com
    sub.example.com
    example.com
  2. Una segunda URL del dominio que incluye un comodín para la ruta. Por ejemplo:
    www.example.com/*
    sub.example.com/*
    example.com/*

Para restringir tu clave de API a sitios web específicos, usa una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haga clic en el nombre de la clave de API que quiera restringir.

  3. En la sección Restricciones de aplicación, selecciona URLs referentes con formato HTTP.

  4. Por cada restricción que quieras añadir, haz clic en Añadir un elemento, introduce la restricción y haz clic en Hecho.

  5. Haga clic en Guardar para guardar los cambios y volver a la lista de claves de API.

gcloud

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list para mostrar las claves de tu proyecto.

  2. Usa el comando gcloud services api-keys update para añadir restricciones de referente HTTP a una clave de API.

    Sustituye los siguientes valores:

    • KEY_ID: el ID de la clave que quieres restringir.
    • ALLOWED_REFERRER_1: tu restricción de URL referente HTTP.

      Puedes añadir tantas restricciones como necesites. Sepáralas con comas. Debes proporcionar todas las restricciones de referente con el comando update. Las restricciones de referente proporcionadas sustituyen a las que ya tenga la clave.

    gcloud services api-keys update KEY_ID \
     --allowed-referrers="ALLOWED_REFERRER_1"

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.BrowserKeyRestrictions;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.Restrictions;
import com.google.api.apikeys.v2.UpdateKeyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class RestrictApiKeyHttp {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    String projectId = "GOOGLE_CLOUD_PROJECT_ID";

    // ID of the key to restrict. This ID is auto-created during key creation.
    // This is different from the key string. To obtain the key_id,
    // you can also use the lookup api: client.lookupKey()
    String keyId = "key_id";

    restrictApiKeyHttp(projectId, keyId);
  }

  // Restricts an API key. To restrict the websites that can use your API key,
  // you add one or more HTTP referrer restrictions.
  public static void restrictApiKeyHttp(String projectId, String keyId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Restrict the API key usage to specific websites by adding them
      // to the list of allowed_referrers.
      Restrictions restrictions = Restrictions.newBuilder()
          .setBrowserKeyRestrictions(BrowserKeyRestrictions.newBuilder()
              .addAllowedReferrers("www.example.com/*")
              .build())
          .build();

      Key key = Key.newBuilder()
          .setName(String.format("projects/%s/locations/global/keys/%s", projectId, keyId))
          // Set the restriction(s).
          // For more information on API key restriction, see:
          // https://cloud.google.com/docs/authentication/api-keys
          .setRestrictions(restrictions)
          .build();

      // Initialize request and set arguments.
      UpdateKeyRequest updateKeyRequest = UpdateKeyRequest.newBuilder()
          .setKey(key)
          .setUpdateMask(FieldMask.newBuilder().addPaths("restrictions").build())
          .build();

      // Make the request and wait for the operation to complete.
      Key result = apiKeysClient.updateKeyAsync(updateKeyRequest).get(3, TimeUnit.MINUTES);

      // For authenticating with the API key, use the value in "result.getKeyString()".
      System.out.printf("Successfully updated the API key: %s", result.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2
from google.cloud.api_keys_v2 import Key


def restrict_api_key_http(project_id: str, key_id: str) -> Key:
    """
    Restricts an API key. To restrict the websites that can use your API key,
    you add one or more HTTP referrer restrictions.

    TODO(Developer): Replace the variables before running this sample.

    Args:
        project_id: Google Cloud project id.
        key_id: ID of the key to restrict. This ID is auto-created during key creation.
            This is different from the key string. To obtain the key_id,
            you can also use the lookup api: client.lookup_key()

    Returns:
        response: Returns the updated API Key.
    """

    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    # Restrict the API key usage to specific websites by adding them to the list of allowed_referrers.
    browser_key_restrictions = api_keys_v2.BrowserKeyRestrictions()
    browser_key_restrictions.allowed_referrers = ["www.example.com/*"]

    # Set the API restriction.
    # For more information on API key restriction, see:
    # https://cloud.google.com/docs/authentication/api-keys
    restrictions = api_keys_v2.Restrictions()
    restrictions.browser_key_restrictions = browser_key_restrictions

    key = api_keys_v2.Key()
    key.name = f"projects/{project_id}/locations/global/keys/{key_id}"
    key.restrictions = restrictions

    # Initialize request and set arguments.
    request = api_keys_v2.UpdateKeyRequest()
    request.key = key
    request.update_mask = "restrictions"

    # Make the request and wait for the operation to complete.
    response = client.update_key(request=request).result()

    print(f"Successfully updated the API key: {response.name}")
    # Use response.key_string to authenticate.
    return response

REST

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Puedes obtener el ID mediante el método keys.list. El ID se indica en el campo uid de la respuesta.

    Sustituye PROJECT_ID por el ID o el nombre de tu proyecto. Google Cloud

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/"
  2. Usa el método keys.patch para añadir restricciones de referente HTTP a la clave de API.

    Esta solicitud devuelve una operación de larga duración. Debes sondear la operación para saber cuándo se completa y obtener su estado.

    Sustituye los siguientes valores:

    • ALLOWED_REFERRER_1: tu restricción de URL referente HTTP.

      Puedes añadir tantas restricciones como necesites. Sepáralas con comas. Debe proporcionar todas las restricciones de referente con la solicitud. Las restricciones de referente proporcionadas sustituyen a las que ya tenga la clave.

    • PROJECT_ID: tu ID o nombre de proyecto Google Cloud .

    • KEY_ID: el ID de la clave que quieres restringir.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
    "restrictions" : {
    "browserKeyRestrictions": {
      "allowedReferrers": ["ALLOWED_REFERRER_1"]
    }
    }
    }' \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/KEY_ID?updateMask=restrictions"

Para obtener más información sobre cómo añadir restricciones de referentes HTTP a una clave mediante la API REST, consulta el artículo Añadir restricciones de navegador de la documentación de la API Keys.

Direcciones IP

Puedes especificar una o varias direcciones IP de las personas que llaman, como un servidor web o una tarea cron, que tengan permiso para usar tu clave de API. Puede especificar las direcciones IP en cualquiera de los siguientes formatos:

  • IPv4 (198.51.100.1)
  • IPv6 (2001:db8::1)
  • Una subred que usa la notación CIDR (198.51.100.0/24, 2001:db8::/64)

No se admite el uso de localhost para las restricciones del servidor.

Para restringir tu clave de API a direcciones IP específicas, usa una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haga clic en el nombre de la clave de API que quiera restringir.

  3. En la sección Restricciones de aplicaciones, selecciona Direcciones IP.

  4. Por cada dirección IP que quiera añadir, haga clic en Añadir un elemento, introduzca la dirección y haga clic en Hecho.

  5. Haga clic en Guardar para guardar los cambios y volver a la lista de claves de API.

gcloud

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list para mostrar las claves de tu proyecto.

  2. Usa el comando gcloud services api-keys update para añadir restricciones de servidor (dirección IP) a una clave de API.

    Sustituye los siguientes valores:

    • KEY_ID: el ID de la clave que quieres restringir.
    • ALLOWED_IP_ADDR_1: tu dirección IP permitida.

      Puedes añadir tantas direcciones IP como necesites. Sepáralas con comas.

    gcloud services api-keys update KEY_ID \
    --allowed-ips="ALLOWED_IP_ADDR_1"

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.Restrictions;
import com.google.api.apikeys.v2.ServerKeyRestrictions;
import com.google.api.apikeys.v2.UpdateKeyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class RestrictApiKeyServer {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    String projectId = "GOOGLE_CLOUD_PROJECT_ID";

    // ID of the key to restrict. This ID is auto-created during key creation.
    // This is different from the key string. To obtain the key_id,
    // you can also use the lookup api: client.lookupKey()
    String keyId = "key_id";

    restrictApiKeyServer(projectId, keyId);
  }

  // Restricts the API key based on IP addresses. You can specify one or more IP addresses
  // of the callers, for example web servers or cron jobs, that are allowed to use your API key.
  public static void restrictApiKeyServer(String projectId, String keyId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Restrict the API key usage by specifying the IP addresses.
      // You can specify the IP addresses in IPv4 or IPv6 or a subnet using CIDR notation.
      Restrictions restrictions = Restrictions.newBuilder()
          .setServerKeyRestrictions(ServerKeyRestrictions.newBuilder()
              .addAllAllowedIps(Arrays.asList("198.51.100.0/24", "2000:db8::/64"))
              .build())
          .build();

      Key key = Key.newBuilder()
          .setName(String.format("projects/%s/locations/global/keys/%s", projectId, keyId))
          // Set the restriction(s).
          // For more information on API key restriction, see:
          // https://cloud.google.com/docs/authentication/api-keys
          .setRestrictions(restrictions)
          .build();

      // Initialize request and set arguments.
      UpdateKeyRequest updateKeyRequest = UpdateKeyRequest.newBuilder()
          .setKey(key)
          .setUpdateMask(FieldMask.newBuilder().addPaths("restrictions").build())
          .build();

      // Make the request and wait for the operation to complete.
      Key result = apiKeysClient.updateKeyAsync(updateKeyRequest).get(3, TimeUnit.MINUTES);

      // For authenticating with the API key, use the value in "result.getKeyString()".
      System.out.printf("Successfully updated the API key: %s", result.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2
from google.cloud.api_keys_v2 import Key


def restrict_api_key_server(project_id: str, key_id: str) -> Key:
    """
    Restricts the API key based on IP addresses. You can specify one or more IP addresses of the callers,
    for example web servers or cron jobs, that are allowed to use your API key.

    TODO(Developer): Replace the variables before running this sample.

    Args:
        project_id: Google Cloud project id.
        key_id: ID of the key to restrict. This ID is auto-created during key creation.
            This is different from the key string. To obtain the key_id,
            you can also use the lookup api: client.lookup_key()

    Returns:
        response: Returns the updated API Key.
    """

    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    # Restrict the API key usage by specifying the IP addresses.
    # You can specify the IP addresses in IPv4 or IPv6 or a subnet using CIDR notation.
    server_key_restrictions = api_keys_v2.ServerKeyRestrictions()
    server_key_restrictions.allowed_ips = ["198.51.100.0/24", "2000:db8::/64"]

    # Set the API restriction.
    # For more information on API key restriction, see:
    # https://cloud.google.com/docs/authentication/api-keys
    restrictions = api_keys_v2.Restrictions()
    restrictions.server_key_restrictions = server_key_restrictions

    key = api_keys_v2.Key()
    key.name = f"projects/{project_id}/locations/global/keys/{key_id}"
    key.restrictions = restrictions

    # Initialize request and set arguments.
    request = api_keys_v2.UpdateKeyRequest()
    request.key = key
    request.update_mask = "restrictions"

    # Make the request and wait for the operation to complete.
    response = client.update_key(request=request).result()

    print(f"Successfully updated the API key: {response.name}")
    # Use response.key_string to authenticate.
    return response

REST

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Puedes obtener el ID mediante el método keys.list. El ID se indica en el campo uid de la respuesta.

    Sustituye PROJECT_ID por el Google Cloud ID o el nombre de tu proyecto.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/"
  2. Usa el método keys.patch para añadir restricciones de servidor (dirección IP) a una clave de API.

    Esta solicitud devuelve una operación de larga duración. Debes sondear la operación para saber cuándo se completa y obtener su estado.

    Sustituye los siguientes valores:

    • ALLOWED_IP_ADDR_1: tu dirección IP permitida.

      Puedes añadir tantas direcciones IP como necesites. Usa comas para separar las restricciones. Debes proporcionar todas las direcciones IP con la solicitud. Las restricciones de referente proporcionadas sustituyen a las restricciones de dirección IP que ya tenga la clave.

    • PROJECT_ID: tu ID o nombre de proyecto Google Cloud .

    • KEY_ID: el ID de la clave que quieres restringir.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
    "restrictions" : {
      "serverKeyRestrictions": {
        "allowedIps": ["ALLOWED_IP_ADDR_1"]
      }
    }
    }' \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/KEY_ID?updateMask=restrictions"

Para obtener más información sobre cómo añadir restricciones de direcciones IP a una clave mediante la API REST, consulta la sección Añadir restricciones de servidor de la documentación de la API Keys.

Aplicaciones Android

Puedes restringir el uso de una clave de API a aplicaciones Android específicas. Debes proporcionar el nombre del paquete y la huella digital del certificado SHA-1 de 20 bytes de cada aplicación.

Cuando uses la clave de API en una solicitud, debes especificar el nombre del paquete y la huella digital del certificado mediante los siguientes encabezados HTTP:

  • X-Android-Package
  • X-Android-Cert

Para restringir tu clave de API a una o varias aplicaciones Android, usa una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haga clic en el nombre de la clave de API que quiera restringir.

  3. En la sección Restricciones de aplicaciones, selecciona Aplicaciones Android.

  4. Por cada aplicación Android que quieras añadir, haz clic en Añadir un elemento, introduce el nombre del paquete y la huella digital del certificado SHA-1 y, a continuación, haz clic en Hecho.

  5. Haga clic en Guardar para guardar los cambios y volver a la lista de claves de API.

gcloud

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list para mostrar las claves de tu proyecto.

  2. Usa el comando gcloud services api-keys update para especificar las aplicaciones Android que pueden usar una clave de API.

    Sustituye los siguientes valores:

    • KEY_ID: el ID de la clave que quieres restringir.
    • SHA1_FINGERPRINT y PACKAGE_NAME: la información de una aplicación Android que puede usar la clave.

      Puedes añadir tantas aplicaciones como necesites. Usa las marcas adicionales --allowed-application.

    gcloud services api-keys update KEY_ID \
    --allowed-application=sha1_fingerprint=SHA1_FINGERPRINT_1,package_name=PACKAGE_NAME_1 \
    --allowed-application=sha1_fingerprint=SHA1_FINGERPRINT_2,package_name=PACKAGE_NAME_2

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.AndroidApplication;
import com.google.api.apikeys.v2.AndroidKeyRestrictions;
import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.Restrictions;
import com.google.api.apikeys.v2.UpdateKeyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class RestrictApiKeyAndroid {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    String projectId = "GOOGLE_CLOUD_PROJECT_ID";

    // ID of the key to restrict. This ID is auto-created during key creation.
    // This is different from the key string. To obtain the key_id,
    // you can also use the lookup api: client.lookupKey()
    String keyId = "key_id";

    restrictApiKeyAndroid(projectId, keyId);
  }

  // Restricts an API key based on android applications.
  // Specifies the Android application that can use the key.
  public static void restrictApiKeyAndroid(String projectId, String keyId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Restrict the API key usage by specifying the allowed android applications.
      Restrictions restrictions = Restrictions.newBuilder()
          .setAndroidKeyRestrictions(AndroidKeyRestrictions.newBuilder()
              .addAllowedApplications(AndroidApplication.newBuilder()
                  // Specify the android application's package name and SHA1 fingerprint.
                  .setPackageName("com.google.appname")
                  .setSha1Fingerprint("0873D391E987982FBBD30873D391E987982FBBD3")
                  .build())
              .build())
          .build();

      Key key = Key.newBuilder()
          .setName(String.format("projects/%s/locations/global/keys/%s", projectId, keyId))
          // Set the restriction(s).
          // For more information on API key restriction, see:
          // https://cloud.google.com/docs/authentication/api-keys
          .setRestrictions(restrictions)
          .build();

      // Initialize request and set arguments.
      UpdateKeyRequest updateKeyRequest = UpdateKeyRequest.newBuilder()
          .setKey(key)
          .setUpdateMask(FieldMask.newBuilder().addPaths("restrictions").build())
          .build();

      // Make the request and wait for the operation to complete.
      Key result = apiKeysClient.updateKeyAsync(updateKeyRequest).get(3, TimeUnit.MINUTES);

      // For authenticating with the API key, use the value in "result.getKeyString()".
      System.out.printf("Successfully updated the API key: %s", result.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2
from google.cloud.api_keys_v2 import Key


def restrict_api_key_android(project_id: str, key_id: str) -> Key:
    """
    Restricts an API key based on android applications.

    Specifies the Android application that can use the key.

    TODO(Developer): Replace the variables before running this sample.

    Args:
        project_id: Google Cloud project id.
        key_id: ID of the key to restrict. This ID is auto-created during key creation.
            This is different from the key string. To obtain the key_id,
            you can also use the lookup api: client.lookup_key()

    Returns:
        response: Returns the updated API Key.
    """

    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    # Specify the android application's package name and SHA1 fingerprint.
    allowed_application = api_keys_v2.AndroidApplication()
    allowed_application.package_name = "com.google.appname"
    allowed_application.sha1_fingerprint = "0873D391E987982FBBD30873D391E987982FBBD3"

    # Restrict the API key usage by specifying the allowed applications.
    android_key_restriction = api_keys_v2.AndroidKeyRestrictions()
    android_key_restriction.allowed_applications = [allowed_application]

    # Set the restriction(s).
    # For more information on API key restriction, see:
    # https://cloud.google.com/docs/authentication/api-keys
    restrictions = api_keys_v2.Restrictions()
    restrictions.android_key_restrictions = android_key_restriction

    key = api_keys_v2.Key()
    key.name = f"projects/{project_id}/locations/global/keys/{key_id}"
    key.restrictions = restrictions

    # Initialize request and set arguments.
    request = api_keys_v2.UpdateKeyRequest()
    request.key = key
    request.update_mask = "restrictions"

    # Make the request and wait for the operation to complete.
    response = client.update_key(request=request).result()

    print(f"Successfully updated the API key: {response.name}")
    # Use response.key_string to authenticate.
    return response

REST

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Puedes obtener el ID mediante el método keys.list. El ID se indica en el campo uid de la respuesta.

    Sustituye PROJECT_ID por el ID o el nombre de tu proyecto. Google Cloud

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/"
  2. Usa el método keys.patch para especificar las aplicaciones Android que pueden usar una clave de API.

    Esta solicitud devuelve una operación de larga duración. Debes sondear la operación para saber cuándo se completa y obtener su estado.

    Sustituye los siguientes valores:

    • SHA1_FINGERPRINT_1 y PACKAGE_NAME_1: la información de una aplicación Android que puede usar la clave.

      Puedes añadir la información de tantas aplicaciones como necesites. Usa comas para separar los objetos AndroidApplication. Debes proporcionar todas las aplicaciones con la solicitud. Las aplicaciones proporcionadas sustituyen a las aplicaciones permitidas que ya haya en la clave.

    • PROJECT_ID: tu ID o nombre de proyecto Google Cloud .

    • KEY_ID: el ID de la clave que quieres restringir.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
    "restrictions" : {
    "androidKeyRestrictions": {
      "allowedApplications": [
        {
          "sha1Fingerprint": "SHA1_FINGERPRINT_1",
          "packageName": "PACKAGE_NAME_1"
        },
     ]
    }
    }
    }' \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/KEY_ID?updateMask=restrictions"

Para obtener más información sobre cómo añadir restricciones de aplicaciones Android a una clave mediante la API REST, consulta el artículo sobre cómo añadir restricciones de Android en la documentación de la API Keys.

Aplicaciones iOS

Puedes restringir el uso de una clave de API a aplicaciones iOS específicas proporcionando el ID de paquete de cada aplicación.

Cuando uses la clave de API en una solicitud, debes especificar el ID del paquete mediante el encabezado HTTP X-Ios-Bundle-Identifier.

Para restringir tu clave de API a una o varias aplicaciones iOS, usa una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haga clic en el nombre de la clave de API que quiera restringir.

  3. En la sección Restricciones de aplicaciones, selecciona Aplicaciones iOS.

  4. Por cada aplicación iOS que quieras añadir, haz clic en Añadir un elemento, introduce el ID de paquete y haz clic en Hecho.

  5. Haga clic en Guardar para guardar los cambios y volver a la lista de claves de API.

gcloud

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list para mostrar las claves de tu proyecto.

  2. Usa el método gcloud services api-keys update para especificar las aplicaciones iOS que pueden usar la clave.

    Sustituye los siguientes valores:

    • KEY_ID: el ID de la clave que quieres restringir.
    • ALLOWED_BUNDLE_ID: el ID de paquete de una aplicación iOS que quieras que pueda usar esta clave de API.

      Puede añadir tantos IDs de paquete como necesite. Separe los IDs con comas.

    gcloud services api-keys update KEY_ID \
    --allowed-bundle-ids=ALLOWED_BUNDLE_ID_1,ALLOWED_BUNDLE_ID_2

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.IosKeyRestrictions;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.Restrictions;
import com.google.api.apikeys.v2.UpdateKeyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class RestrictApiKeyIos {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    String projectId = "GOOGLE_CLOUD_PROJECT_ID";

    // ID of the key to restrict. This ID is auto-created during key creation.
    // This is different from the key string. To obtain the key_id,
    // you can also use the lookup api: client.lookupKey()
    String keyId = "key_id";

    restrictApiKeyIos(projectId, keyId);
  }

  // Restricts an API key. You can restrict usage of an API key to specific iOS apps
  // by providing the bundle ID of each app.
  public static void restrictApiKeyIos(String projectId, String keyId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Restrict the API key usage by specifying the bundle ID(s)
      // of iOS app(s) that can use the key.
      Restrictions restrictions = Restrictions.newBuilder()
          .setIosKeyRestrictions(IosKeyRestrictions.newBuilder()
              .addAllAllowedBundleIds(Arrays.asList("com.google.gmail", "com.google.drive"))
              .build())
          .build();

      Key key = Key.newBuilder()
          .setName(String.format("projects/%s/locations/global/keys/%s", projectId, keyId))
          // Set the restriction(s).
          // For more information on API key restriction, see:
          // https://cloud.google.com/docs/authentication/api-keys
          .setRestrictions(restrictions)
          .build();

      // Initialize request and set arguments.
      UpdateKeyRequest updateKeyRequest = UpdateKeyRequest.newBuilder()
          .setKey(key)
          .setUpdateMask(FieldMask.newBuilder().addPaths("restrictions").build())
          .build();

      // Make the request and wait for the operation to complete.
      Key result = apiKeysClient.updateKeyAsync(updateKeyRequest).get(3, TimeUnit.MINUTES);

      // For authenticating with the API key, use the value in "result.getKeyString()".
      System.out.printf("Successfully updated the API key: %s", result.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2
from google.cloud.api_keys_v2 import Key


def restrict_api_key_ios(project_id: str, key_id: str) -> Key:
    """
    Restricts an API key. You can restrict usage of an API key to specific iOS apps
    by providing the bundle ID of each app.

    TODO(Developer): Replace the variables before running this sample.

    Args:
        project_id: Google Cloud project id.
        key_id: ID of the key to restrict. This ID is auto-created during key creation.
            This is different from the key string. To obtain the key_id,
            you can also use the lookup api: client.lookup_key()

    Returns:
        response: Returns the updated API Key.
    """

    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    # Restrict the API key usage by specifying the bundle ID(s) of iOS app(s) that can use the key.
    ios_key_restrictions = api_keys_v2.IosKeyRestrictions()
    ios_key_restrictions.allowed_bundle_ids = ["com.google.gmail", "com.google.drive"]

    # Set the API restriction.
    # For more information on API key restriction, see:
    # https://cloud.google.com/docs/authentication/api-keys
    restrictions = api_keys_v2.Restrictions()
    restrictions.ios_key_restrictions = ios_key_restrictions

    key = api_keys_v2.Key()
    key.name = f"projects/{project_id}/locations/global/keys/{key_id}"
    key.restrictions = restrictions

    # Initialize request and set arguments.
    request = api_keys_v2.UpdateKeyRequest()
    request.key = key
    request.update_mask = "restrictions"

    # Make the request and wait for the operation to complete.
    response = client.update_key(request=request).result()

    print(f"Successfully updated the API key: {response.name}")
    # Use response.key_string to authenticate.
    return response

REST

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Puedes obtener el ID mediante el método keys.list. El ID se indica en el campo uid de la respuesta.

    Sustituye PROJECT_ID por el ID o el nombre de tu proyecto. Google Cloud

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/"
  2. Usa el método keys.patch para especificar las aplicaciones iOS que pueden usar una clave de API.

    Esta solicitud devuelve una operación de larga duración. Debes sondear la operación para saber cuándo se completa y obtener su estado.

    Sustituye los siguientes valores:

    • ALLOWED_BUNDLE_ID: el ID de paquete de una aplicación iOS que puede usar la clave.

      Puede añadir la información de tantas aplicaciones como necesite. Use comas para separar los IDs de paquete. Debe proporcionar todos los IDs de paquete con la solicitud. Los IDs de paquete proporcionados sustituyen a las aplicaciones permitidas que ya tenga la clave.

    • PROJECT_ID: tu ID o nombre de proyecto Google Cloud .

    • KEY_ID: el ID de la clave que quieres restringir.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
    "restrictions" : {
    "iosKeyRestrictions": {
      "allowedBundleIds": ["ALLOWED_BUNDLE_ID_1","ALLOWED_BUNDLE_ID_2"]
    }
    }
    }' \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/KEY_ID?updateMask=restrictions"

Para obtener más información sobre cómo añadir restricciones de aplicaciones iOS a una clave mediante la API REST, consulta el artículo Añadir restricciones de iOS en la documentación de la API Keys.

Añadir restricciones de API

Las restricciones de API especifican a qué APIs se puede llamar con la clave de API.

Para añadir restricciones de API, usa una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haga clic en el nombre de la clave de API que quiera restringir.

  3. En la sección Restricciones de API, haz clic en Restringir clave.

  4. Selecciona todas las APIs a las que se accederá con tu clave de API.

  5. Haga clic en Guardar para guardar los cambios y volver a la lista de claves de API.

gcloud

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list para mostrar las claves de tu proyecto.

  2. Usa el comando gcloud services api-keys update para especificar a qué servicios se puede acceder con una clave de API.

    Sustituye los siguientes valores:

    • KEY_ID: el ID de la clave que quieres restringir.
    • SERVICE_1, SERVICE_2...: los nombres de los servicios de las APIs a las que se puede acceder con la clave.

      Debes proporcionar todos los nombres de servicio con el comando de actualización. Los nombres de servicio proporcionados sustituyen a los servicios que ya tenga la clave.

    Para encontrar el nombre del servicio, busca la API en el panel de control de APIs. Los nombres de servicio son cadenas como bigquery.googleapis.com.

    gcloud services api-keys update KEY_ID \
    --api-target=service=SERVICE_1 --api-target=service=SERVICE_2

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.ApiTarget;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.Restrictions;
import com.google.api.apikeys.v2.UpdateKeyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class RestrictApiKeyApi {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    String projectId = "GOOGLE_CLOUD_PROJECT_ID";

    // ID of the key to restrict. This ID is auto-created during key creation.
    // This is different from the key string. To obtain the key_id,
    // you can also use the lookup api: client.lookupKey()
    String keyId = "key_id";

    restrictApiKeyApi(projectId, keyId);
  }

  // Restricts an API key. Restrictions specify which APIs can be called using the API key.
  public static void restrictApiKeyApi(String projectId, String keyId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Restrict the API key usage by specifying the target service and methods.
      // The API key can only be used to authenticate the specified methods in the service.
      Restrictions restrictions = Restrictions.newBuilder()
          .addApiTargets(ApiTarget.newBuilder()
              .setService("translate.googleapis.com")
              .addMethods("translate.googleapis.com.TranslateText")
              .build())
          .build();

      Key key = Key.newBuilder()
          .setName(String.format("projects/%s/locations/global/keys/%s", projectId, keyId))
          // Set the restriction(s).
          // For more information on API key restriction, see:
          // https://cloud.google.com/docs/authentication/api-keys
          .setRestrictions(restrictions)
          .build();

      // Initialize request and set arguments.
      UpdateKeyRequest updateKeyRequest = UpdateKeyRequest.newBuilder()
          .setKey(key)
          .setUpdateMask(FieldMask.newBuilder().addPaths("restrictions").build())
          .build();

      // Make the request and wait for the operation to complete.
      Key result = apiKeysClient.updateKeyAsync(updateKeyRequest).get(3, TimeUnit.MINUTES);

      // For authenticating with the API key, use the value in "result.getKeyString()".
      System.out.printf("Successfully updated the API key: %s", result.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2
from google.cloud.api_keys_v2 import Key


def restrict_api_key_api(project_id: str, key_id: str) -> Key:
    """
    Restricts an API key. Restrictions specify which APIs can be called using the API key.

    TODO(Developer): Replace the variables before running the sample.

    Args:
        project_id: Google Cloud project id.
        key_id: ID of the key to restrict. This ID is auto-created during key creation.
            This is different from the key string. To obtain the key_id,
            you can also use the lookup api: client.lookup_key()

    Returns:
        response: Returns the updated API Key.
    """

    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    # Restrict the API key usage by specifying the target service and methods.
    # The API key can only be used to authenticate the specified methods in the service.
    api_target = api_keys_v2.ApiTarget()
    api_target.service = "translate.googleapis.com"
    api_target.methods = ["transate.googleapis.com.TranslateText"]

    # Set the API restriction(s).
    # For more information on API key restriction, see:
    # https://cloud.google.com/docs/authentication/api-keys
    restrictions = api_keys_v2.Restrictions()
    restrictions.api_targets = [api_target]

    key = api_keys_v2.Key()
    key.name = f"projects/{project_id}/locations/global/keys/{key_id}"
    key.restrictions = restrictions

    # Initialize request and set arguments.
    request = api_keys_v2.UpdateKeyRequest()
    request.key = key
    request.update_mask = "restrictions"

    # Make the request and wait for the operation to complete.
    response = client.update_key(request=request).result()

    print(f"Successfully updated the API key: {response.name}")
    # Use response.key_string to authenticate.
    return response

REST

  1. Obtén el ID de la clave que quieras restringir.

    El ID no es el mismo que el nombre visible o la cadena de clave. Puedes obtener el ID mediante el método keys.list. El ID se indica en el campo uid de la respuesta.

    Sustituye PROJECT_ID por el ID o el nombre de tu proyecto. Google Cloud

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/"
  2. Usa el método keys.patch para especificar a qué servicios se puede acceder con una clave de API.

    Esta solicitud devuelve una operación de larga duración. Debes sondear la operación para saber cuándo se completa y obtener su estado.

    Sustituye los siguientes valores:

    • SERVICE_1, SERVICE_2...: los nombres de los servicios de las APIs a las que se puede acceder con la clave.

      Debes proporcionar todos los nombres de servicio con la solicitud. Los nombres de servicio proporcionados sustituyen a los servicios que ya tenga la clave.

      Para encontrar el nombre del servicio, busca la API en el panel de control de APIs. Los nombres de servicio son cadenas como bigquery.googleapis.com.

    • PROJECT_ID: tu ID o nombre de proyecto Google Cloud .

    • KEY_ID: el ID de la clave que quieres restringir.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data '{
    "restrictions" : {
    "apiTargets": [
      {
        "service": "SERVICE_1"
      },
      {
        "service" : "SERVICE_2"
      },
    ]
    }
    }' \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/KEY_ID?updateMask=restrictions"

Para obtener más información sobre cómo añadir restricciones de API a una clave mediante la API REST, consulta la sección Añadir restricciones de API de la documentación de la API Keys.

Obtener información de un proyecto a partir de una cadena de clave

Puedes determinar a qué Google Cloud proyecto está asociada una clave de API a partir de su cadena.

Sustituye KEY_STRING por la cadena de clave del proyecto del que quieras obtener información.

gcloud

Usa el comando gcloud services api-keys lookup para obtener el ID de proyecto a partir de una cadena de clave.

 gcloud services api-keys lookup KEY_STRING
 

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.


import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.LookupKeyRequest;
import com.google.api.apikeys.v2.LookupKeyResponse;
import java.io.IOException;

public class LookupApiKey {

  public static void main(String[] args) throws IOException {
    // TODO(Developer): Before running this sample,
    //  1. Replace the variable(s) below.
    //  2. Set up ADC as described in https://cloud.google.com/docs/authentication/external/set-up-adc
    //  3. Make sure you have the necessary permission to view API keys.
    // API key string to retrieve the API key name.
    String apiKeyString = "API_KEY_STRING";

    lookupApiKey(apiKeyString);
  }

  // Retrieves name (full path) of an API key using the API key string.
  public static void lookupApiKey(String apiKeyString) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `apiKeysClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Initialize the lookup request and set the API key string.
      LookupKeyRequest lookupKeyRequest = LookupKeyRequest.newBuilder()
          .setKeyString(apiKeyString)
          .build();

      // Make the request and obtain the response.
      LookupKeyResponse response = apiKeysClient.lookupKey(lookupKeyRequest);

      System.out.printf("Successfully retrieved the API key name: %s", response.getName());
    }
  }
}

Python

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente de claves de API.


from google.cloud import api_keys_v2


def lookup_api_key(api_key_string: str) -> None:
    """
    Retrieves name (full path) of an API key using the API key string.

    TODO(Developer):
    1. Before running this sample,
      set up ADC as described in https://cloud.google.com/docs/authentication/external/set-up-adc
    2. Make sure you have the necessary permission to view API keys.

    Args:
        api_key_string: API key string to retrieve the API key name.
    """

    # Create the API Keys client.
    client = api_keys_v2.ApiKeysClient()

    # Initialize the lookup request and set the API key string.
    lookup_key_request = api_keys_v2.LookupKeyRequest(
        key_string=api_key_string,
        # Optionally, you can also set the etag (version).
        # etag=etag,
    )

    # Make the request and obtain the response.
    lookup_key_response = client.lookup_key(lookup_key_request)

    print(f"Successfully retrieved the API key name: {lookup_key_response.name}")

REST

Para obtener el ID de proyecto a partir de una cadena de clave, se usa el método lookupKey.

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://apikeys.googleapis.com/v2/keys:lookupKey?keyString=KEY_STRING"

Crear una copia de una clave de API

Si necesitas una clave de API con las mismas restricciones que otra, puedes crear una copia de la clave de API que ya tienes. Esta operación crea una clave de API con una cadena e ID únicos, así como con las restricciones de la clave de API anterior.

La operación de copia solo está disponible en la Google Cloud consola. Para usar otros métodos, sigue los pasos para crear una clave de API y, a continuación, aplica las mismas restricciones de clave de API a la clave de API que acabas de generar.

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haz clic en el nombre de la clave de API que quieras copiar.

    Se abrirá la página de detalles de la clave de API.

  3. Haz clic en Crear una copia.

  4. Introduce un nombre para la nueva clave de API y confirma que las restricciones son correctas.

  5. Haz clic en Crear.

Rotar una clave de API

Si cambias periódicamente tus claves de API, puedes limitar el impacto de las claves de API vulneradas.

Cuando rotas una clave de API, creas una nueva con las mismas restricciones que la anterior y actualizas tus aplicaciones para que usen la nueva clave. Una vez que hayas actualizado todas tus aplicaciones, elimina la clave antigua.

La operación de rotación solo está disponible en la Google Cloud consola. Para usar otros métodos, sigue los pasos para crear una clave de API y, a continuación, aplica las mismas restricciones de clave de API a la clave de API que acabas de generar. Después de actualizar tus aplicaciones para que usen la nueva clave, elimina la antigua.

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haga clic en el nombre de la clave de API que quiera rotar para abrir su página de detalles.

  3. Haz clic en Rotar clave.

  4. Introduce un nombre para la nueva clave de API y confirma que las restricciones son correctas.

  5. Haz clic en Crear.

  6. Copia la cadena de la clave y actualiza tus aplicaciones para que usen la nueva cadena.

  7. Una vez que hayas actualizado todas las aplicaciones para que usen la nueva clave, vuelve a la página de detalles de la nueva clave. En la sección Llave anterior, haz clic en Eliminar la llave anterior para eliminar la llave antigua.

    Si te das cuenta de que has eliminado la clave anterior antes de tiempo, puedes recuperarla.

Recuperar una clave de API

Si eliminas una clave de API por error, puedes deshacer la eliminación (restaurar) en un plazo de 30 días. Transcurridos 30 días, no podrás recuperar la clave de API.

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

  2. Haz clic en Restaurar credenciales eliminadas.

  3. Busca la clave de API eliminada que quieras restaurar y haz clic en Restaurar.

    La propagación de la restauración de una clave de API puede tardar unos minutos. Una vez que se haya propagado, la clave de API restaurada se mostrará en la lista de claves de API.

gcloud

  1. Obtén el ID de la clave que quieras restaurar.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list --show-deleted para enumerar las claves eliminadas de tu proyecto.

  2. Usa el comando gcloud services api-keys undelete para recuperar una clave de API.

    gcloud services api-keys undelete KEY_ID

    Sustituye los siguientes valores:

    • KEY_ID: el ID de la clave que quieres restaurar.

Java

Para ejecutar este ejemplo, debes instalar la biblioteca de cliente google-cloud-apikeys.

import com.google.api.apikeys.v2.ApiKeysClient;
import com.google.api.apikeys.v2.Key;
import com.google.api.apikeys.v2.UndeleteKeyRequest;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class UndeleteApiKey {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project.
    String projectId = "YOUR_PROJECT_ID";
    // The API key id to undelete.
    String keyId = "YOUR_KEY_ID";

    undeleteApiKey(projectId, keyId);
  }

  // Undeletes an API key.
  public static void undeleteApiKey(String projectId, String keyId)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (ApiKeysClient apiKeysClient = ApiKeysClient.create()) {

      // Initialize the undelete request and set the argument.
      UndeleteKeyRequest undeleteKeyRequest = UndeleteKeyRequest.newBuilder()
          .setName(String.format("projects/%s/locations/global/keys/%s", projectId, keyId))
          .build();

      // Make the request and wait for the operation to complete.
      Key undeletedKey = apiKeysClient.undeleteKeyAsync(undeleteKeyRequest)
          .get(3, TimeUnit.MINUTES);

      System.out.printf("Successfully undeleted the API key: %s", undeletedKey.getName());
    }
  }
}

REST

  1. Obtén el ID de la clave que quieras restaurar.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el método keys.list con el parámetro de consulta showDeleted definido como true. El ID de la clave se indica en el campo uid de la respuesta.

    Sustituye PROJECT_ID por el ID o el nombre de tu proyecto. Google Cloud

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys?showDeleted=true"
  2. Usa el método undelete para recuperar la clave de API.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/KEY_ID:undelete"

    Esta solicitud devuelve una operación de larga duración. Debes sondear la operación para saber cuándo se completa y obtener su estado.

    Sustituye los siguientes valores:

    • PROJECT_ID: tu ID o nombre de proyecto Google Cloud .
    • KEY_ID: el ID de la clave que quieres restringir.

Determinar el tipo de clave de API

Para determinar si la clave de API está vinculada a una cuenta de servicio, inspecciona la clave.

Consola

  1. En la Google Cloud consola, ve a la página Credenciales:

    Ir a Credenciales

    Si la clave de API está asociada a una cuenta de servicio, se muestra el identificador de la cuenta de servicio.

gcloud

  1. Obtén el ID de la clave.

    El ID no es el mismo que el nombre visible o la cadena de clave. Para obtener el ID, usa el comando gcloud services api-keys list para mostrar las claves de tu proyecto.

  2. Usa el comando gcloud services api-keys describe para describir la clave de API.

    gcloud services api-keys describe KEY_ID

    Si la clave de API está vinculada a una cuenta de servicio, se muestra el campo serviceAccountEmail.

Sondear operaciones de larga duración

Los métodos de la API Keys usan operaciones de larga duración. Si usas la API REST para crear y gestionar claves de API, se devuelve un objeto de operación desde la solicitud del método inicial. El nombre de la operación se usa para sondear la operación de larga duración. Cuando se completa la solicitud de larga duración, al sondear la operación se devuelven los datos de la solicitud de larga duración.

Para sondear una operación de larga duración de la API Keys, usa el método operations.get.

Sustituye OPERATION_NAME por el nombre de la operación devuelto por la operación de larga duración. Por ejemplo, operations/akmf.p7-358517206116-cd10a88a-7740-4403-a8fd-979f3bd7fe1c.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://apikeys.googleapis.com/v2/OPERATION_NAME"

Límites de las claves de API

Puedes crear hasta 300 claves de API por proyecto. Este límite es del sistema y no se puede cambiar mediante una solicitud de aumento de cuota. Si necesitas más claves de API, debes usar más de un proyecto.

Puedes añadir hasta 1200 restricciones de aplicación a una clave de API.

Siguientes pasos