Gerenciar as chaves de API

Esta página descreve como criar, editar e restringir chaves de API. Para informações sobre como usar chaves de API para acessar APIs do Google, consulte Usar chaves de API para acessar APIs.

Introdução às chaves de API

Há dois tipos de chaves de API: padrão e de autorização. As duas chaves permitem associar uma solicitação a um projeto para fins de faturamento e cota. No entanto, eles diferem da seguinte maneira:

  • Uma chave de API padrão não autentica um principal.

  • Uma chave de autorização faz a autenticação como uma conta de serviço. Ele opera de maneira semelhante a um token de acesso de longa duração.

A página Credenciais no consoleGoogle Cloud garante que o tipo correto de chave de API seja criado para uma API selecionada.

Chaves de API padrão

As chaves de API padrão oferecem uma maneira de associar uma solicitação a um projeto para fins de faturamento e cota. Quando você usa uma chave de API padrão (uma chave que não foi vinculada a uma conta de serviço) para acessar uma API, ela não identifica um principal. Sem um principal, a solicitação não pode usar o Identity and Access Management (IAM) para verificar se o autor da chamada está autorizado a realizar a operação solicitada.

As chaves de API padrão podem ser usadas com qualquer API que as aceite, a menos que restrições de API tenham sido adicionadas à chave. As chaves de API padrão não podem ser usadas com serviços que não as aceitam, incluindo no modo expresso.

Chaves de autorização

As chaves de autorização são chaves de API vinculadas a uma conta de serviço. Quando você usa uma chave de autorização para acessar uma API, sua solicitação é processada como se você tivesse usado a conta de serviço vinculada para fazer a solicitação.

As APIs que aceitam chaves de autorização incluem a Vertex AI (aiplatform.googleapis.com) e a API Gemini (generativelanguage.googleapis.com).

Ao usar chaves de autorização, lembre-se do seguinte:

Componentes da chave de API

Uma chave de API tem os seguintes componentes, que permitem gerenciar e usar a chave:

String
A string da chave de API é uma string criptografada. Por exemplo, AIzaSyDaGmWKa4JsXZ-HjGw7ISLn_3namBGewQe. Ao usar uma chave de API para acessar uma API, você sempre usa a string da chave. As chaves de API não têm um arquivo JSON associado.
ID
O ID da chave de API é usado pelas ferramentas administrativas do Google Cloud para identificar a chave de forma exclusiva. O ID da chave não pode ser usado para acessar APIs. O ID da chave pode ser encontrado no URL da página de edição da chave no console do Google Cloud . Também é possível receber o ID da chave usando a Google Cloud CLI para listar as chaves no seu projeto.
Nome de exibição
O nome de exibição é um nome opcional e descritivo para a chave. É possível definir esse campo ao criar ou atualizar a chave.
Conta de serviço vinculada
As chaves de autorização incluem o endereço de e-mail da conta de serviço.

Antes de começar

Conclua as tarefas a seguir para usar as amostras nesta página.

Configurar a autenticação

Selecione a guia para como planeja usar as amostras nesta página:

Console

Quando você usa o console Google Cloud para acessar serviços Google Cloud e APIs, não é necessário configurar a autenticação.

gcloud

No console do Google Cloud , ative o Cloud Shell.

Ativar o Cloud Shell

Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

C++

Para usar os exemplos de C++ nesta página em um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e configure o Application Default Credentials com suas credenciais de usuário.

  1. Instale a CLI do Google Cloud.

  2. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  3. Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:

    gcloud auth application-default login

    Não é necessário fazer isso se você estiver usando o Cloud Shell.

    Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.

Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud .

Java

Para usar os exemplos em Java desta página em um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e configure o Application Default Credentials com suas credenciais de usuário.

  1. Instale a CLI do Google Cloud.

  2. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  3. Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:

    gcloud auth application-default login

    Não é necessário fazer isso se você estiver usando o Cloud Shell.

    Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.

Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud .

Python

Para usar os exemplos do Python nesta página em um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e configure o Application Default Credentials com suas credenciais de usuário.

  1. Instale a CLI do Google Cloud.

  2. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

  3. Se você estiver usando um shell local, crie credenciais de autenticação local para sua conta de usuário:

    gcloud auth application-default login

    Não é necessário fazer isso se você estiver usando o Cloud Shell.

    Se um erro de autenticação for retornado e você estiver usando um provedor de identidade (IdP) externo, confirme se você fez login na CLI gcloud com sua identidade federada.

Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud .

REST

Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para CLI gcloud.

    Instale a CLI do Google Cloud.

    Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.

Saiba mais em Autenticar para usar REST na documentação de autenticação do Google Cloud .

Funções exigidas

Para receber as permissões necessárias para gerenciar chaves de API, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Ativar chaves de autorização

Antes de criar uma chave de autorização, faça uma das seguintes ações:

  • Atualize a restrição da política da organização constraints/iam.managed.disableServiceAccountApiKeyCreation para restringir os serviços em que os usuários podem criar chaves de autorização. Ao criar uma chave de autorização, os usuários precisam adicionar uma restrição de API que corresponda a um serviço permitido pela restrição.

  • Desative a restrição de política da organização constraints/iam.managed.disableServiceAccountApiKeyCreation.

Para mudar a política da organização, é necessário um recurso da organização. Não há suporte para projetos sem uma organização.

Para mudar a restrição de política, siga estas instruções.

Console

  1. No console do Google Cloud , acesse a página Políticas da organização.

    Acessar a página Políticas da organização

  2. Mude para a organização, pasta ou projeto em que você quer alterar as políticas.

  3. Na caixa Filtro, insira Block service e clique no nome da política Bloquear vinculações de chaves de API conta de serviço serviço.

  4. Clique em Gerenciar política.

  5. Na seção Origem da política, selecione Substituir política principal.

  6. Clique em Adicionar regra.

  7. Para desativar a restrição, defina Aplicação como Desativada.

    Para adicionar um serviço à lista de permissões, defina Aplicação como Ativada.

    1. Clique em Editar.

    2. Na seção Tipo de valor, selecione Definido pelo usuário.

    3. Insira o serviço para o qual você quer permitir a criação de chaves de API.

  8. Clique em Concluído.

  9. Opcional: clique em Testar alterações para ter insights sobre como a política proposta pode causar violações ou interrupções de compliance.

  10. Clique em Definir política.

gcloud

Para adicionar um serviço à lista de permissões, faça o seguinte:

  1. Crie um arquivo chamado spec.yaml com o conteúdo a seguir:

    name: SCOPE/SCOPE_ID/policies/iam.managed.disableServiceAccountApiKeyCreation
    spec:
      rules:
      - enforce: true
        parameters:
          allowedServices:
          - SERVICE_NAME
    

    Forneça os valores a seguir:

    • SCOPE: organizations, folders ou projects.

    • SCOPE_ID: dependendo de SCOPE, o ID da organização, pasta ou projeto a que a política da organização se aplica.

    • SERVICE_NAME: o nome do serviço que você quer permitir. Por exemplo, compute.googleapis.com.

  2. Execute o comando gcloud a seguir para permitir a vinculação de chaves de API a contas de serviço para o serviço especificado:

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

Para desativar a restrição, faça o seguinte:

  1. Crie um arquivo chamado spec.yaml com o conteúdo a seguir:

    name: SCOPE/SCOPE_ID/policies/iam.managed.disableServiceAccountApiKeyCreation
    spec:
      rules:
      - enforce: false
    
  2. Execute o seguinte comando gcloud para desativar a restrição:

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

Criar uma chave de API

Para criar uma chave de API, use uma das seguintes opções:

Console

  1. No console Google Cloud , acesse a página Credenciais:

    Ir para Credenciais

  2. Clique em Criar credenciais e selecione Chave de API no menu.

  3. Adicione pelo menos uma restrição de chave de API. Para mais informações, consulte Aplicar restrições de chave de API.

  4. Opcional: para vincular a chave de API a uma conta de serviço e criar uma chave de autorização, marque a caixa de seleção Autenticar chamadas de API por uma conta de serviço e clique em Selecionar uma conta de serviço para escolher a conta que você quer vincular à chave.

    Para mais informações, consulte Chaves de autorização.

  5. Clique em Criar. A caixa de diálogo Chave de API criada mostra a string da chave recém-criada.

gcloud

Use o comando gcloud services api-keys create para criar uma chave de API.

 gcloud services api-keys create \
     --display-name=DISPLAY_NAME \
     --api-target=service=SERVICE_1 \
     --api-target=service=SERVICE_2

Substitua os seguintes valores:

  • DISPLAY_NAME: um nome descritivo para a chave.

  • SERVICE_1, SERVICE_2...: os nomes de serviço das APIs que poderão usar a chave para serem acessadas.

    Para encontrar o nome do serviço, pesquise a API no Painel de APIs. Os nomes de serviço são strings como bigquery.googleapis.com.

    Para vincular a chave de API a uma conta de serviço e criar uma chave de autorização para serviços como a Vertex AI e a API Gemini, use gcloud beta com a flag --service-account:

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

    Para mais informações, consulte Chaves de autorização.

C++

Para executar esta amostra, você precisa instalar a biblioteca de cliente de chaves 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 executar essa amostra, instale a 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 executar esta amostra, você precisa instalar a biblioteca de cliente de chaves 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

Use o método keys.create para criar uma chave de API. Essa solicitação retorna uma operação de longa duração. Você precisa pesquisar a operação para receber as informações da nova chave.

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

Substitua os seguintes valores:

  • DISPLAY_NAME: um nome descritivo para a chave.

  • PROJECT_ID: o ID ou nome do projeto Google Cloud .

  • SERVICE_1, SERVICE_2...: os nomes de serviço das APIs que poderão usar a chave para serem acessadas.

Para encontrar o nome do serviço, pesquise a API no Painel de APIs. Os nomes de serviço são strings como bigquery.googleapis.com.

Opcional: para vincular a chave de API a uma conta de serviço e criar uma chave de autorização, use o seguinte comando:

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

Para mais informações, consulte Chaves de autorização.

Para mais informações sobre como criar chaves de API usando a API REST, consulte Como criar uma chave de API, na documentação de API de chaves de API.

Aplicar restrições de chave API

As chaves de API sem restrições não são seguras. Para reduzir os riscos de segurança, é possível restringir as chaves de API das seguintes maneiras:

  • Restrições de API: limitam uma chave de API para que ela só possa ser usada com um conjunto específico de APIs. As chaves de API sem restrições podem ser usadas com todas as APIs que aceitam chaves geradas por Google Cloud.

  • Restrições de aplicativo: limite uma chave de API para que ela só possa ser usada por sites, endereços IP ou aplicativos específicos. As chaves de API sem restrições de aplicativo podem ser usadas de qualquer lugar.

Recomendamos definir restrições de API e de aplicativo.

No console do Google Cloud , adicione pelo menos uma restrição de API para criar uma chave de API. No entanto, quando você cria chaves de API usando a CLI gcloud ou a API REST, elas não têm restrições, a menos que você especifique uma restrição. Para isso, adicione o seguinte ao criar uma chave de API:

  • A CLI gcloud: a flag --api-target e as restrições de API que você quer adicionar.

  • REST: o objeto restrictions para o corpo da solicitação, contendo uma matriz apiTargets que especifica as restrições que você quer adicionar.

Adicionar restrições à API

Essas restrições especificam quais APIs podem ser chamadas com a chave de API.

Para adicionar restrições de API, use uma das seguintes opções:

Console

  1. No console Google Cloud , acesse a página Credenciais:

    Ir para Credenciais

  2. Clique no nome da chave de API que você quer restringir.

  3. Na seção Restrições de API, clique em Restringir chave.

  4. Selecione todas as APIs que usarão a chave de API para serem acessadas.

  5. Clique em Salvar para salvar as mudanças e retornar à lista de chaves de API..

gcloud

  1. Encontre o ID da chave que você quer restringir.

    O ID não é igual ao nome de exibição ou à string de chave. Para conseguir o ID, use o comando gcloud services api-keys list para listar as chaves do projeto.

  2. Use o comando gcloud services api-keys update para especificar em quais serviços uma chave de API pode ser usada para acesso.

    Substitua os seguintes valores:

    • KEY_ID: o ID da chave que você quer restringir.
    • SERVICE_1, SERVICE_2...: os nomes de serviço das APIs que poderão usar a chave para serem acessadas.

      É necessário fornecer todos os nomes de serviço com o comando update; os nomes de serviço fornecidos substituem todos os serviços existentes na chave.

    Para encontrar o nome do serviço, pesquise a API no Painel de APIs. Os nomes de serviço são strings como bigquery.googleapis.com.

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

Java

Para executar essa amostra, instale a 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 executar esta amostra, você precisa instalar a biblioteca de cliente de chaves 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. Encontre o ID da chave que você quer restringir.

    O ID não é igual ao nome de exibição ou à string de chave. Você pode conseguir o ID usando o método keys.list. O ID é listado no campo uid da resposta.

    Substitua PROJECT_ID pelo Google Cloud ID ou nome do projeto.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://apikeys.googleapis.com/v2/projects/PROJECT_ID/locations/global/keys/"
  2. Use o método keys.patch para especificar em quais serviços uma chave de API pode ser usada para acesso.

    Essa solicitação retorna uma operação de longa duração. Você precisa pesquisar a operação para saber quando ela é concluída e conferir o status dela.

    Substitua os seguintes valores:

    • SERVICE_1, SERVICE_2...: os nomes de serviço das APIs que poderão usar a chave para serem acessadas.

      É necessário fornecer a solicitação a todos os nomes de serviço; os nomes de serviço fornecidos substituem todos os serviços existentes na chave.

      Para encontrar o nome do serviço, pesquise a API no Painel de APIs. Os nomes de serviço são strings como bigquery.googleapis.com.

    • PROJECT_ID: o ID ou nome do projeto do Google Cloud .

    • KEY_ID: o ID da chave que você quer 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 mais informações sobre como adicionar restrições de API a uma chave usando a API REST, consulte Como adicionar restrições de API, na documentação de API de chaves de API.

Adicionar restrições ao aplicativo

As restrições de aplicativo especificam quais sites, endereços IP ou apps podem usar uma chave de API.

Só é possível aplicar um tipo de restrição de aplicativo por vez. Escolha o tipo de restrição com base no tipo de aplicativo:

Opção Tipo de aplicativo Observações
Websites Aplicativos da Web Especifica os sites que podem usar a chave.
Endereços IP Aplicativos chamados por servidores específicos Especifica os servidores ou cron jobs que podem usar a chave. Essa é a única restrição disponível para chaves de autorização.
Apps Android Aplicativos Android Especifica o app Android que pode usar a chave.
Apps iOS Aplicativos iOS Especifica os pacotes do iOS que podem usar a chave.

Sites

Para controlar quais sites podem usar suas chaves de API, adicione um ou mais referenciadores HTTP como restrições de site. Por exemplo, adicionar https://example.com às restrições de site de uma chave de API significa que apenas chamadas de https://example.com podem usar essa chave.

Os referenciadores HTTP usados em restrições de sites têm suporte limitado para caracteres curinga. É possível substituir um caractere curinga (*) por um subdomínio ou caminho, mas não é possível usar um caractere curinga no meio de um URL. Por exemplo, *.example.com é válido e aceita todos os sites que terminam em .example.com. No entanto, mysubdomain*.example.com não é uma restrição válida.

Os números de porta podem ser incluídos em restrições de sites. Se você incluir um número de porta, apenas as solicitações que usam essa porta serão correspondidas. Se você não especificar um número de porta, as solicitações de qualquer número de porta serão correspondidas.

A tabela a seguir mostra alguns exemplos de cenários e restrições do navegador:

Cenário Restrições
Permitir um URL específico Adicione um URL com um caminho exato. Por exemplo:
www.example.com/path
www.example.com/path/path

Alguns navegadores implementam uma política de referenciador que envia somente o URL de origem para solicitações entre origens. Os usuários desses navegadores não podem usar chaves com restrições de URL específicas da página.

Permitir qualquer URL no site É preciso definir dois URLs na lista allowedReferers.
  1. URL do domínio, sem um subdomínio e com um caractere curinga no caminho. Por exemplo:
    example.com/*
  2. Um segundo URL que inclui um caractere curinga para o subdomínio e um curinga para o caminho. Por exemplo:
    *.example.com/*
Permitir qualquer URL em um único subdomínio ou domínio sem "www".

É preciso definir dois URLs na lista allowedReferers para permitir um domínio inteiro:

  1. URL para o domínio, sem uma barra no final. Por exemplo:
    www.example.com
    sub.example.com
    example.com
  2. Um segundo URL para o domínio que inclui um caractere curinga no caminho. Por exemplo:
    www.example.com/*
    sub.example.com/*
    example.com/*

Para restringir sua chave de API a sites específicos, use uma das seguintes opções:

Console

  1. No console Google Cloud , acesse a página Credenciais:

    Ir para Credenciais

  2. Clique no nome da chave de API que você quer restringir.

  3. Na seção Restrições de aplicativo, selecione Sites.

  4. Para cada restrição que você quiser adicionar, clique em Adicionar, insira a restrição e clique em Concluído.

  5. Clique em Salvar para salvar as mudanças e retornar à lista de chaves de API..

gcloud

  1. Encontre o ID da chave que você quer restringir.

    O ID não é igual ao nome de exibição ou à string de chave. Para conseguir o ID, use o comando gcloud services api-keys list para listar as chaves do projeto.

  2. Use o comando gcloud services api-keys update para adicionar restrições de site a uma chave de API.

    Substitua os seguintes valores:

    • KEY_ID: o ID da chave que você quer restringir.
    • ALLOWED_REFERRER_1: sua restrição de site.

      Você pode adicionar quantas restrições forem necessárias. use vírgulas para separar as restrições. É necessário fornecer todas as restrições do referenciador com o comando update. As restrições de referenciadores fornecidas substituem todas as restrições de referenciadores atuais na chave.

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

Java

Para executar essa amostra, instale a 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();