Administrar claves API

Esta página describe cómo crear, editar y restringir claves API. Para obtener información sobre cómo usar claves API para acceder a las API de Google, consulte Usar claves API para acceder a las API .

Introducción a las claves API

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

Claves API estándar

Las claves API estándar proporcionan una manera de asociar una solicitud con un proyecto para fines de facturación y cuotas. Cuando utiliza una clave API estándar (una clave API que no ha estado vinculada a una cuenta de servicio) para acceder a una API, la clave API no identifica una entidad principal . Sin una entidad principal, la solicitud no puede usar la administración de identidad y acceso (IAM) para verificar si la persona que llama está autorizada para realizar la operación solicitada.

Las claves API estándar se pueden utilizar con cualquier API que acepte claves API, a menos que se hayan agregado restricciones de API a la clave. Las claves API estándar no se pueden utilizar con servicios que no aceptan claves API, incluido el modo rápido.

Claves API vinculadas a una cuenta de servicio

Las claves API vinculadas a una cuenta de servicio proporcionan la identidad y autorización de la cuenta de servicio para una solicitud. Cuando utiliza una clave API que se ha vinculado a una cuenta de servicio para acceder a una API, su solicitud se procesa como si hubiera utilizado la cuenta de servicio vinculada para realizar la solicitud.

La combinación de teclas solo está disponible para Google Cloud Modo expreso .

Componentes clave de API

Una clave API tiene los siguientes componentes, que le permiten administrar y usar la clave:

Cadena
La cadena de clave API es una cadena cifrada, por ejemplo, AIzaSyDaGmWKa4JsXZ-HjGw7ISLn_3namBGewQe . Cuando usa una clave API para acceder a una API, siempre usa la cadena de la clave. Las claves API no tienen un archivo JSON asociado.
IDENTIFICACIÓN
El ID de la clave API es utilizado por Google Cloud herramientas administrativas para identificar de forma única la clave. El ID de clave no se puede utilizar para acceder a las API. El ID de la clave se puede encontrar en la URL de la página de edición de la clave en el Google Cloud consola. También puede obtener el ID de la clave utilizando la CLI de Google Cloud para enumerar las claves de su proyecto.
Nombre para mostrar
El nombre para mostrar es un nombre descriptivo opcional para la clave, que puede configurar al crear o actualizar la clave.
Cuenta de servicio vinculada
Las claves API vinculadas a una cuenta de servicio incluyen la dirección de correo electrónico de la cuenta de servicio.

Antes de comenzar

Complete las siguientes tareas para utilizar los ejemplos 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 muestras de C++ de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, 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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.

Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud .

Java

Para usar las muestras de Java de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, 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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.

Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud .

Python

Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, 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. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.

Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud .

REST

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

    After installing the Google Cloud CLI, initialize it by running the following command:

    gcloud init

    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 Autentica para usar REST en la documentación de autenticación de Google Cloud .

Roles requeridos

Para obtener los permisos que necesita para administrar las claves API, solicite a su administrador que le otorgue los siguientes roles de IAM en su proyecto:

Para obtener más información sobre cómo otorgar roles, consulte Administrar el acceso a proyectos, carpetas y organizaciones .

También es posible que pueda obtener los permisos necesarios a través de roles personalizados u otros roles predefinidos .

Crear una clave API

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

Consola

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

    Ir a Credenciales

  2. Haga clic en Crear credenciales y luego seleccione Clave API en el menú.

  3. Para vincular la clave API a una cuenta de servicio, seleccione la casilla de verificación Autenticar llamadas API a través de una cuenta de servicio y luego haga clic en Seleccionar una cuenta de servicio para seleccionar la cuenta de servicio que desea vincular a la clave.

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

  4. Agregue restricciones de clave API.

Restringir las claves API es una buena práctica. Para obtener más información, consulte Aplicar restricciones de clave API .

  1. Haga clic en Crear .

    El cuadro de diálogo de creación de clave API muestra la cadena de su clave recién creada.

nube de gcloud

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

Reemplace DISPLAY_NAME con un nombre descriptivo para su clave.

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

Para vincular la clave 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, consulte Claves API vinculadas a una cuenta de servicio .

C++

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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

DESCANSAR

Utilice el método keys.create para crear una clave API. Esta solicitud devuelve una operación de larga duración ; debe sondear la operación para obtener la información de la nueva clave.

Reemplace los siguientes valores:

  • DISPLAY_NAME : opcional. Un nombre descriptivo para su clave.
  • PROJECT_ID : Tu Google Cloud ID o nombre del 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"

Para vincular la clave API a una cuenta de servicio, utilice 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, consulte Claves API vinculadas a una cuenta de servicio .

Para obtener más información sobre la creación de claves API utilizando la API REST, consulte Creación de una clave API en la documentación de la API de claves API.

Aplicar restricciones de clave API

Las claves API no tienen restricciones de forma predeterminada. Las claves sin restricciones son inseguras porque cualquier persona puede utilizarlas desde cualquier lugar. Para aplicaciones de producción, debe establecer restricciones de aplicación y restricciones de API .

Agregar restricciones de aplicación

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

Puede aplicar solo un tipo de restricción de aplicación a la vez. Elija el tipo de restricción según su tipo de aplicación:

Opción Tipo de aplicación Notas
Referencias HTTP aplicaciones web Especifica los sitios web que pueden utilizar la clave.
Direcciones IP Aplicaciones llamadas por servidores específicos Especifica los servidores o trabajos cron que pueden usar la clave.
aplicaciones de Android aplicaciones de Android Especifica la aplicación de Android que puede utilizar la clave.
aplicaciones de iOS aplicaciones iOS Especifica los paquetes de iOS que pueden usar la clave.

Referencias HTTP

Para restringir los sitios web que pueden usar su clave API, agregue una o más restricciones de referencia HTTP.

Puede sustituir un carácter comodín ( * ) por el subdominio o la ruta, pero no puede insertar un carácter comodín en el medio de la URL. Por ejemplo, *.example.com es válido y acepta todos los sitios que terminan 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 referencia HTTP. Si incluye un número de puerto, solo se coincidirán las solicitudes que utilicen ese puerto. Si no especifica un número de puerto, se harán coincidir las solicitudes de cualquier número de puerto.

La siguiente tabla muestra algunos escenarios de ejemplo y restricciones del navegador:

Guión Restricciones
Permitir una URL específica Agregue una URL con una ruta exacta. Por ejemplo:
www.example.com/path
www.example.com/path/path

Algunos navegadores implementan una política de referencia que envía solo la URL de origen para 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 su sitio Debe configurar dos URL 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 un comodín para la ruta. Por ejemplo:
    *.example.com/*
Permitir cualquier URL en un único subdominio o dominio simple

Debes configurar dos URL en la lista de allowedReferers para permitir un dominio completo:

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

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

Consola

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

    Ir a Credenciales

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

  3. En la sección Restricciones de la aplicación , seleccione Referencias HTTP .

  4. Para cada restricción que desee agregar, haga clic en Agregar un elemento , ingrese la restricción y haga clic en Listo .

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

nube de gcloud

  1. Obtenga el ID de la clave que desea restringir.

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

  2. Usa el comando gcloud services api-keys update para agregar restricciones de referencia HTTP a una clave API.

    Reemplace los siguientes valores:

    • KEY_ID : el ID de la clave que desea restringir.
    • ALLOWED_REFERRER_1 : Su restricción de referencia HTTP.

      Puedes agregar tantas restricciones como necesites; Utilice comas para separar las restricciones. Debe proporcionar todas las restricciones de referencia con el comando de actualización; las restricciones de referencia proporcionadas reemplazan cualquier restricción de referencia existente en la clave.

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

Java

Para ejecutar este ejemplo, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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

DESCANSAR

  1. Obtenga el ID de la clave que desea restringir.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puede obtener la identificación utilizando el métodokeys.list . El ID aparece en el campo uid de la respuesta.

    Reemplace PROJECT_ID con su Google Cloud ID o nombre del proyecto.

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

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

    Reemplace los siguientes valores:

    • ALLOWED_REFERRER_1 : Su restricción de referencia HTTP.

      Puedes agregar tantas restricciones como necesites; Utilice comas para separar las restricciones. Debe proporcionar todas las restricciones de referencia con la solicitud; las restricciones de referencia proporcionadas reemplazan cualquier restricción de referencia existente en la clave.

    • PROJECT_ID : Tu Google Cloud ID o nombre del proyecto.

    • KEY_ID : el ID de la clave que desea 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 agregar restricciones de referencia HTTP a una clave mediante la API REST, consulte Agregar restricciones del navegador en la documentación de la API de claves API.

Direcciones IP

Puede especificar una o más direcciones IP de las personas que llaman, como un servidor web o un trabajo cron, que pueden usar su clave API. Puede especificar las direcciones IP en cualquiera de los siguientes formatos:

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

El uso de localhost no es compatible con las restricciones del servidor.

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

Consola

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

    Ir a Credenciales

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

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

  4. Para cada dirección IP que desee agregar, haga clic en Agregar un elemento , ingrese la dirección y haga clic en Listo .

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

nube de gcloud

  1. Obtenga el ID de la clave que desea restringir.

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

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

    Reemplace los siguientes valores:

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

      Puede agregar tantas direcciones IP como necesite; utilice comas para separar las direcciones.

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

Java

Para ejecutar este ejemplo, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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

DESCANSAR

  1. Obtenga el ID de la clave que desea restringir.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puede obtener la identificación utilizando el métodokeys.list . El ID aparece en el campo uid de la respuesta.

    Reemplace PROJECT_ID con su Google Cloud ID o nombre del proyecto.

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

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

    Reemplace los siguientes valores:

    • ALLOWED_IP_ADDR_1 : Su dirección IP permitida.

      Puede agregar tantas direcciones IP como necesite; Utilice comas para separar las restricciones. Debe proporcionar todas las direcciones IP con la solicitud; Las restricciones de referencia proporcionadas reemplazan cualquier restricción de dirección IP existente en la clave.

    • PROJECT_ID : Tu Google Cloud ID o nombre del proyecto.

    • KEY_ID : el ID de la clave que desea 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 agregar restricciones de dirección IP a una clave mediante la API REST, consulte Agregar restricciones de servidor en la documentación de la API de claves API.

aplicaciones de Android

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

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

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

Para restringir su clave API a una o más aplicaciones de Android, use una de las siguientes opciones:

Consola

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

    Ir a Credenciales

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

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

  4. Para cada aplicación de Android que desee agregar, haga clic en Agregar un elemento e ingrese el nombre del paquete y la huella digital del certificado SHA-1, luego haga clic en Listo .

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

nube de gcloud

  1. Obtenga el ID de la clave que desea restringir.

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

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

    Reemplace los siguientes valores:

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

      Puedes agregar tantas aplicaciones como necesites; utilice indicadores 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, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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

DESCANSAR

  1. Obtenga el ID de la clave que desea restringir.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puede obtener la identificación utilizando el métodokeys.list . El ID aparece en el campo uid de la respuesta.

    Reemplace PROJECT_ID con su Google Cloud ID o nombre del proyecto.

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

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

    Reemplace los siguientes valores:

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

      Puedes agregar la información para tantas aplicaciones como necesites; use comas para separar los objetos de la aplicación Android . Debe proporcionar todas las solicitudes con la solicitud; Las aplicaciones proporcionadas reemplazan cualquier aplicación permitida existente en la clave.

    • PROJECT_ID : Tu Google Cloud ID o nombre del proyecto.

    • KEY_ID : el ID de la clave que desea 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 agregar restricciones de aplicaciones de Android a una clave mediante la API REST, consulte Agregar restricciones de Android en la documentación de la API de claves API.

aplicaciones de iOS

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

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

Para restringir su clave API a una o más aplicaciones de iOS, use una de las siguientes opciones:

Consola

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

    Ir a Credenciales

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

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

  4. Para cada aplicación de iOS que desee agregar, haga clic en Agregar un elemento e ingrese el ID del paquete, luego haga clic en Listo .

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

nube de gcloud

  1. Obtenga el ID de la clave que desea restringir.

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

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

    Reemplace los siguientes valores:

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

      Puede agregar tantos ID de paquete como necesite; utilice comas para separar los ID.

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

Java

Para ejecutar este ejemplo, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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

DESCANSAR

  1. Obtenga el ID de la clave que desea restringir.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puede obtener la identificación utilizando el métodokeys.list . El ID aparece en el campo uid de la respuesta.

    Reemplace PROJECT_ID con su Google Cloud ID o nombre del proyecto.

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

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

    Reemplace los siguientes valores:

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

      Puedes agregar la información para tantas aplicaciones como necesites; utilice comas para separar los ID del paquete. Debe proporcionar todos los ID de paquete con la solicitud; Los ID de paquete proporcionados reemplazan cualquier aplicación permitida existente en la clave.

    • PROJECT_ID : Tu Google Cloud ID o nombre del proyecto.

    • KEY_ID : el ID de la clave que desea 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 agregar restricciones de aplicaciones de iOS a una clave mediante la API REST, consulte Agregar restricciones de iOS en la documentación de la API de claves API.

Agregar restricciones de API

Las restricciones de API especifican qué API se pueden llamar mediante la clave API.

Para agregar restricciones de API, utilice una de las siguientes opciones:

Consola

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

    Ir a Credenciales

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

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

  4. Seleccione todas las API a las que se utilizará su clave API para acceder.

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

nube de gcloud

  1. Obtenga el ID de la clave que desea restringir.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puedes obtener la ID usando el comando gcloud services api-keys list para enumerar 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 API.

    Reemplace los siguientes valores:

    • KEY_ID : el ID de la clave que desea restringir.
    • SERVICE_1 , SERVICE_2 ...: Los nombres de servicio de las API a las que se puede acceder con la clave.

      Debe proporcionar todos los nombres de servicios con el comando de actualización; Los nombres de los servicios proporcionados reemplazan cualquier servicio existente en la clave.

    Puede encontrar el nombre del servicio buscando la API en el panel de API . Los nombres de los servicios 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, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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

DESCANSAR

  1. Obtenga el ID de la clave que desea restringir.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puede obtener la identificación utilizando el métodokeys.list . El ID aparece en el campo uid de la respuesta.

    Reemplace PROJECT_ID con su Google Cloud ID o nombre del proyecto.

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

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

    Reemplace los siguientes valores:

    • SERVICE_1 , SERVICE_2 ...: Los nombres de servicio de las API a las que se puede acceder con la clave.

      Debe proporcionar todos los nombres de los servicios con la solicitud; Los nombres de los servicios proporcionados reemplazan cualquier servicio existente en la clave.

      Puede encontrar el nombre del servicio buscando la API en el panel de API . Los nombres de los servicios son cadenas como bigquery.googleapis.com .

    • PROJECT_ID : Tu Google Cloud ID o nombre del proyecto.

    • KEY_ID : el ID de la clave que desea 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 agregar restricciones de API a una clave mediante la API REST, consulte Agregar restricciones de API en la documentación de API de claves de API.

Obtener información del proyecto a partir de una cadena de claves

Puedes determinar cual Google Cloud proyecto al que está asociada una clave API desde su cadena.

Reemplace KEY_STRING con la cadena clave para la que necesita información del proyecto.

nube de gcloud

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

 gcloud services api-keys lookup KEY_STRING
 

Java

Para ejecutar este ejemplo, debe instalar la biblioteca 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());
    }
  }
}

Pitón

Para ejecutar este ejemplo, debe instalar la biblioteca cliente de claves 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}")

DESCANSAR

Utilice el método lookupKey para obtener el ID del proyecto a partir de una cadena de clave.

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 API

Si necesita una nueva clave API con las mismas restricciones que una clave API existente, puede crear una copia de la clave API existente. Esta operación crea una nueva clave API con una cadena de clave e ID únicos, con las restricciones de la clave API existente.

La operación de copia está disponible sólo en el Google Cloud consola. Para utilizar otros métodos, siga los pasos para crear una clave API y luego aplique las mismas restricciones de clave API a la clave API recién generada.

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

    Ir a Credenciales

  2. Haga clic en el nombre de la clave API que desea copiar.

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

  3. Haga clic en Crear una copia .

  4. Ingrese un nombre para la nueva clave API y confirme que las restricciones sean correctas.

  5. Haga clic en Crear .

Rotar una clave API

Al rotar periódicamente sus claves API, puede limitar el impacto de cualquier clave API comprometida.

Cuando rota una clave API, crea una nueva clave con las mismas restricciones que la clave anterior y actualiza sus aplicaciones para usar la nueva clave. Una vez actualizadas todas sus aplicaciones, elimina la clave anterior.

La operación de rotación está disponible sólo en el Google Cloud consola. Para utilizar otros métodos, siga los pasos para crear una clave API y luego aplique las mismas restricciones de clave API a la clave API recién generada. Después de actualizar sus aplicaciones para usar la nueva clave, elimina la clave anterior.

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

    Ir a Credenciales

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

  3. Haga clic en Girar clave .

  4. Ingrese un nombre para la nueva clave API y confirme que las restricciones sean correctas.

  5. Haga clic en Crear .

  6. Copie la cadena de clave y actualice sus aplicaciones para usar la nueva cadena.

  7. Después de haber actualizado todas las aplicaciones para usar la nueva clave, regrese a la página de detalles de la nueva clave. En la sección Clave anterior , haga clic en Eliminar la clave anterior para eliminar la clave anterior.

    Si descubre que eliminó la clave anterior prematuramente, puede recuperarla .

Recuperar una clave API

Si elimina una clave API por error, puede recuperarla (restaurarla) dentro de los 30 días posteriores a su eliminación. Después de 30 días, no podrá recuperar la clave API.

Consola

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

    Ir a Credenciales

  2. Haga clic en Restaurar credenciales eliminadas .

  3. Busque la clave API eliminada que desea recuperar y haga clic en Restaurar .

    La recuperación de una clave API puede tardar unos minutos en propagarse. Después de la propagación, la clave API recuperada se muestra en la lista de claves API.

nube de gcloud

  1. Obtenga el ID de la clave que desea recuperar.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puedes obtener la identificación usando el comando gcloud services api-keys list --show-deleted para enumerar las claves eliminadas en tu proyecto.

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

    gcloud services api-keys undelete KEY_ID

    Reemplace los siguientes valores:

    • KEY_ID : el ID de la clave que desea recuperar.

Java

Para ejecutar este ejemplo, debe instalar la biblioteca 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());
    }
  }
}

DESCANSAR

  1. Obtenga el ID de la clave que desea recuperar.

    El ID no es el mismo que el nombre para mostrar o la cadena de clave. Puede obtener el ID utilizando el métodokeys.list , con el parámetro de consulta showDeleted establecido en true . El ID de la clave aparece en el campo uid de la respuesta.

    Reemplace PROJECT_ID con su Google Cloud ID o nombre del proyecto.

    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. Utilice el método de recuperación para recuperar la clave 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 ; debe sondear la operación para saber cuándo se completa y obtener el estado de la operación.

    Reemplace los siguientes valores:

    • PROJECT_ID : Tu Google Cloud ID o nombre del proyecto.
    • KEY_ID : el ID de la clave que desea restringir.

Determinar el tipo de clave API

Puede determinar si la clave API está vinculada a una cuenta de servicio inspeccionando la clave.

Consola

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

    Ir a Credenciales

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

nube de gcloud

  1. Obtenga el ID de la clave.

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

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

    gcloud services api-keys describe KEY_ID

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

Encuesta de operaciones de larga duración

Claves API Los métodos API utilizan operaciones de larga duración. Si utiliza la API REST para crear y administrar claves API, se devuelve un objeto de operación desde la solicitud del método inicial. Utilice el nombre de la operación para sondear la operación de larga duración. Cuando se completa la solicitud de larga duración, el sondeo de la operación devuelve los datos de la solicitud de larga duración.

Para sondear una operación API de claves API de larga duración, se utiliza el método operations.get .

Reemplace OPERATION_NAME con 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 API

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

Puede agregar hasta 1200 restricciones de aplicaciones a una clave API.

¿Qué sigue?