Crie e elimine chaves de contas de serviço

Esta página explica como criar e eliminar chaves de contas de serviço através da Google Cloud consola, da CLI do Google Cloud, da API Identity and Access Management ou de uma das bibliotecas cliente do Google Cloud.

Antes de começar

Funções necessárias

Para obter as autorizações de que precisa para criar e eliminar chaves de contas de serviço, peça ao seu administrador para lhe conceder a função do IAM Administrador de chaves de contas de serviço (roles/iam.serviceAccountKeyAdmin) no projeto ou na conta de serviço cujas chaves quer gerir. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Para mais informações, consulte o artigo Funções das contas de serviço.

Consoante a configuração da política da organização, também pode ter de permitir a criação de chaves de contas de serviço no seu projeto antes de criar uma chave.

Para receber as autorizações de que precisa para permitir a criação de chaves de contas de serviço num projeto, peça ao seu administrador que lhe conceda as seguintes funções de IAM na sua organização:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Estas funções predefinidas contêm as autorizações necessárias para permitir a criação de chaves de contas de serviço num projeto. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para permitir a criação de chaves de contas de serviço num projeto:

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • resourcemanager.organizations.get
  • resourcemanager.projects.listTagBindings
  • resourcemanager.projects.listEffectiveTags
  • resourcemanager.tagKeys.get
  • resourcemanager.tagKeys.list
  • resourcemanager.tagValues.list
  • resourcemanager.tagValues.get

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Permita a criação de chaves de contas de serviço

Antes de criar uma chave de conta de serviço, certifique-se de que a restrição da política da organização iam.disableServiceAccountKeyCreation não é aplicada ao seu projeto. Se esta restrição for aplicada ao seu projeto, não pode criar chaves de contas de serviço nesse projeto.

Recomendamos que aplique esta restrição à maioria dos projetos e que apenas isente os projetos que realmente necessitam de chaves de contas de serviço. Para mais informações sobre métodos de autenticação alternativos, consulte o artigo Escolha o método de autenticação certo para o seu exemplo de utilização.

Para isentar um projeto da restrição da política de organização iam.disableServiceAccountKeyCreation, peça a um administrador da política de organização que faça o seguinte:

  1. Ao nível da organização, crie uma chave de etiqueta e um valor de etiqueta que vai usar para definir se um recurso deve estar isento da política da organização. Recomendamos que crie uma etiqueta com a chave disableServiceAccountKeyCreation e os valores enforced e not_enforced.

    Para saber como criar chaves de etiquetas e valores de etiquetas, consulte o artigo Criar e definir uma nova etiqueta.

  2. Anexe a etiqueta disableServiceAccountKeyCreation à organização e defina o respetivo valor como enforced. Todos os recursos na organização herdam este valor da etiqueta, a menos que seja substituído por um valor da etiqueta diferente.

    Para saber como anexar etiquetas a recursos, consulte o artigo Anexar etiquetas a recursos.

  3. Para cada projeto ou pasta que quer isentar da política da organização, anexe a etiqueta disableServiceAccountKeyCreation e defina o respetivo valor como not_enforced. Definir um valor de etiqueta para um projeto ou uma pasta desta forma substitui o valor de etiqueta herdado da organização.
  4. Crie ou atualize a política da organização que impede a criação de chaves de contas de serviço para que não aplique a restrição aos recursos isentos. Esta política deve ter as seguintes regras:

    • Configure a restrição iam.disableServiceAccountKeyCreation para não ser aplicada a recursos com a etiqueta disableServiceAccountKeyCreation: not_enforced. A condição nesta regra deve ter o seguinte aspeto:

      "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
      
    • Configure a restrição iam.disableServiceAccountKeyCreation para ser aplicada a todos os outros recursos.

Crie uma chave de conta de serviço

Para usar uma conta de serviço a partir de fora do Google Cloud, como noutras plataformas ou no local, primeiro tem de estabelecer a identidade da conta de serviço. Os pares de chaves públicas/privadas oferecem uma forma segura de atingir este objetivo. Quando cria uma chave de conta de serviço, a parte pública é armazenada emGoogle Cloud, enquanto a parte privada só está disponível para si. Para mais informações sobre pares de chaves públicas/privadas, consulte o artigo Chaves de contas de serviço.

Pode criar uma chave de conta de serviço através da Google Cloud consola, da CLI gcloud, do método serviceAccounts.keys.create() ou de uma das bibliotecas cliente. Uma conta de serviço pode ter até 10 chaves.

Por predefinição, as chaves de contas de serviço nunca expiram. Pode usar uma restrição de política da organização para especificar o período durante o qual uma chave de conta de serviço é válida. Para ver detalhes, consulte o artigo Tempos de expiração das chaves geridas pelo utilizador.

Nos exemplos abaixo, SA_NAME é o nome da sua conta de serviço e PROJECT_ID é o ID do seu projeto doGoogle Cloud . Pode obter a string na página Contas de serviço na consola Google Cloud .SA_NAME@PROJECT_ID.

Consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.
  2. Selecione um projeto.
  3. Clique no endereço de email da conta de serviço para a qual quer criar uma chave.
  4. Clique no separador Chaves.
  5. Clique no menu pendente Adicionar chave e, de seguida, selecione Criar nova chave.
  6. Selecione JSON como o Tipo de chave e clique em Criar.

Se clicar em Criar, transfere um ficheiro de chave da conta de serviço. Depois de transferir o ficheiro de chave, não o pode transferir novamente.

A chave transferida tem o seguinte formato, em que PRIVATE_KEY é a parte privada do par de chaves público/privado:

{
  "type": "service_account",
  "project_id": "PROJECT_ID",
  "private_key_id": "KEY_ID",
  "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
  "client_email": "SERVICE_ACCOUNT_EMAIL",
  "client_id": "CLIENT_ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}
Guarde sempre as chaves da conta de serviço num local seguro. Se não armazenar as chaves em segurança, os autores de ameaças podem encontrá-las e usá-las para aceder aos recursos aos quais a conta de serviço pode aceder. Recomendamos vivamente que armazene as suas chaves num arquivo de chaves baseado em hardware ou software. Para mais orientações sobre como armazenar chaves de contas de serviço em segurança, consulte o artigo Proteção contra o escalamento de privilégios.

Pode mover e mudar o nome deste ficheiro como quiser.

Pode usar ficheiros de chaves de contas de serviço para autenticar uma aplicação como uma conta de serviço.

gcloud

Execute o comando gcloud iam service-accounts keys create para criar chaves de contas de serviço.

Substitua os seguintes valores:

  • KEY_FILE: o caminho para um novo ficheiro de saída para a chave privada, por exemplo, ~/sa-private-key.json.
  • SA_NAME: o nome da conta de serviço para a qual criar uma chave.
  • PROJECT_ID: o ID do seu Google Cloud projeto.
gcloud iam service-accounts keys create KEY_FILE \
    --iam-account=SA_NAME@PROJECT_ID.

Saída:

created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as
[/usr/home/username/KEY_FILE] for
[SA_NAME@PROJECT_ID.]

O ficheiro de chave da conta de serviço é transferido para o seu computador. Depois de transferir o ficheiro de chave, não o pode transferir novamente.

A chave transferida tem o seguinte formato, em que PRIVATE_KEY é a parte privada do par de chaves público/privado:

{
  "type": "service_account",
  "project_id": "PROJECT_ID",
  "private_key_id": "KEY_ID",
  "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
  "client_email": "SERVICE_ACCOUNT_EMAIL",
  "client_id": "CLIENT_ID",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}

Guarde sempre as chaves da conta de serviço num local seguro. Se não armazenar as chaves em segurança, os autores de ameaças podem encontrá-las e usá-las para aceder aos recursos aos quais a conta de serviço pode aceder. Recomendamos vivamente que armazene as suas chaves num arquivo de chaves baseado em hardware ou software. Para mais orientações sobre como armazenar chaves de contas de serviço em segurança, consulte o artigo Proteção contra o escalamento de privilégios.

Pode mover e mudar o nome deste ficheiro como quiser.

Pode usar ficheiros de chaves de contas de serviço para autenticar uma aplicação como uma conta de serviço.

C++

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API C++ IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
return [](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.CreateServiceAccountKey(
      name,
      google::iam::admin::v1::ServiceAccountPrivateKeyType::
          TYPE_GOOGLE_CREDENTIALS_FILE,
      google::iam::admin::v1::ServiceAccountKeyAlgorithm::KEY_ALG_RSA_2048);
  if (!response) throw std::move(response).status();
  std::cout << "ServiceAccountKey successfully created: "
            << response->DebugString() << "\n"
            << "Please save the key in a secure location, as they cannot "
               "be downloaded later\n";
  return response->name();
}

C#

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API C# IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.


using System;
using System.Text;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class ServiceAccountKeys
{
    public static ServiceAccountKey CreateKey(string serviceAccountEmail)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var key = service.Projects.ServiceAccounts.Keys.Create(
            new CreateServiceAccountKeyRequest(),
            "projects/-/serviceAccounts/" + serviceAccountEmail)
            .Execute();

        // The PrivateKeyData field contains the base64-encoded service account key
        // in JSON format.
        // TODO(Developer): Save the below key (jsonKeyFile) to a secure location.
        //  You cannot download it later.
        byte[] valueBytes = System.Convert.FromBase64String(key.PrivateKeyData);
        string jsonKeyContent = Encoding.UTF8.GetString(valueBytes);

        Console.WriteLine("Key created successfully");
        return key;
    }
}

Go

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Go IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

import