Como criar e gerenciar chaves de contas de serviço

Nesta página, explicamos como criar e gerenciar chaves de conta de serviço usando o Console do Google Cloud, a gcloudferramenta de linha de comando, a API Cloud Identity and Access Management API ou uma das Bibliotecas de cliente do Google Cloud.

Pré-requisitos para este guia

Permissões exigidas

Para permitir que o usuário gerencie as chaves da conta de serviço, conceda a ele o papel Administrador da chave da conta de serviço (roles/iam.serviceAccountKeyAdmin). Os papéis primários do Cloud IAM também contêm permissões para gerenciar as chaves da conta de serviço, mas recomendamos que você conceda este papel para evitar o acesso desnecessário a outros recursos do Google Cloud.

Para mais informações, consulte a lista de funções de Contas de serviço.

Como criar chaves de conta de serviço

Para usar uma conta de serviço fora do Google Cloud, como em outras plataformas ou locais, é preciso primeiro estabelecer a identidade da conta de serviço. Pares de chaves públicas/privadas fornecem uma maneira segura de atingir essa meta.

É possível criar uma chave da conta de serviço usando o Console do Cloud, a gcloudferramenta, oserviceAccounts.keys.create() método ou uma das bibliotecas de cliente.

Nos exemplos abaixo, [SA-NAME] é o nome da sua conta de serviço, e [PROJECT-ID] é o ID do seu projeto do Google Cloud. É possível recuperar a string [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com da página Contas de serviço no Console do Cloud.

Console

  1. Abra a página IAM e Admin no Console do Cloud.

    Abrir a página "IAM e Admin"

  2. Clique em Selecionar um projeto e em Abrir.

  3. Na navegação à esquerda, clique em Contas de serviço.

  4. Encontre a linha da conta de serviço para que você quer criar uma chave. Nessa linha, clique no botão e em Criar chave.

  5. Selecione um Tipo de chave e clique em Criar.

Comando gcloud

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

Comando:

    gcloud iam service-accounts keys create ~/key.json \
      --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Saída:

created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as
    [/usr/home/username/key.json] for
    [SA-NAME@PROJECT-ID.iam.gserviceaccount.com]
    

API REST

Solicitação:

    POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com/keys
    

Saída:

{
        "name":"projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
        "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
        "privateKeyData":"MIIJqAIB . . .",
        "validBeforeTime": "2028-05-08T21:00:00Z",
        "validAfterTime": "2016-01-25T18:38:09.000Z",
        "keyAlgorithm": "KEY_ALG_RSA_2048"
    }
    

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para saber mais informações, consulte a documentação de referência da API Cloud IAM para C#.


    using System;
    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();
            Console.WriteLine("Created key: " + key.Name);
            return key;
        }
    }

Go

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Go.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // createKey creates a service account key.
    func createKey(w io.Writer, serviceAccountEmail string) (*iam.ServiceAccountKey, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %v", err)
    	}

    	resource := "projects/-/serviceAccounts/" + serviceAccountEmail
    	request := &iam.CreateServiceAccountKeyRequest{}
    	key, err := service.Projects.ServiceAccounts.Keys.Create(resource, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Keys.Create: %v", err)
    	}
    	fmt.Fprintf(w, "Created key: %v", key.Name)
    	return key, nil
    }
    

Java

Antes de testar este exemplo, siga as instruções de configuração do Java no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Java.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.CreateServiceAccountKeyRequest;
    import com.google.api.services.iam.v1.model.ServiceAccountKey;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class CreateServiceAccountKey {

      // Creates a key for a service account.
      public static void createKey(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          ServiceAccountKey key =
              service
                  .projects()
                  .serviceAccounts()
                  .keys()
                  .create(
                      "projects/-/serviceAccounts/your-service-account-name@"
                          + projectId
                          + ".iam.gserviceaccount.com",
                      new CreateServiceAccountKeyRequest())
                  .execute();

          System.out.println("Created key: " + key.getName());
        } catch (IOException e) {
          System.out.println("Unable to create service account key: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-account-keys")
                .build();
        return service;
      }
    }

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Python.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def create_key(service_account_email):
        """Creates a key for a service account."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        key = service.projects().serviceAccounts().keys().create(
            name='projects/-/serviceAccounts/' + service_account_email, body={}
            ).execute()

        print('Created key: ' + key['name'])

Observe que o privateKeyData retornado é uma representação de string codificada em base64 do valor TYPE_GOOGLE_CREDENTIALS_FILE (chave/credenciais JSON ou P12).

Quando você cria uma chave, o novo par de chaves públicas/particulares é gerado e o download dele é feito para sua máquina. Ele serve como a única cópia da chave particular. Você é responsável por armazenar a chave privada com segurança. Anote a localização dela e certifique-se de que o aplicativo possa acessá-la. Ele precisa da chave para fazer chamadas de API autenticadas.

Pode levar até 60 segundos para que seja possível usar uma chave recém-criada na autenticação. Caso ocorram falhas na autenticação logo após a criação de uma nova chave, aguarde 60 segundos antes de tentar novamente.

O formato da chave varia dependendo de como ela é gerada. Chaves criadas usando o Console do Cloud ou a ferramenta de linha de comando gcloud tem esta aparência:

{
    "type": "service_account",
    "project_id": "[PROJECT-ID]",
    "private_key_id": "[KEY-ID]",
    "private_key": "-----BEGIN PRIVATE KEY-----\n[PRIVATE-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]"
    }
    

Enquanto isso, as chaves geradas com a API REST ou as bibliotecas de clientes têm o seguinte formato:

{
    "name": "projects/[PROJECT-ID]/serviceAccounts/[SERVICE-ACCOUNT-EMAIL]/keys/[KEY-ID]",
    "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
    "privateKeyData": "[PRIVATE-KEY]",
    "validAfterTime": "[DATE]",
    "validBeforeTime": "[DATE]",
    "keyAlgorithm": "KEY_ALG_RSA_2048"
    }
    

Observe mais uma vez que o privateKeyData retornado é uma representação de string codificada em base64 do valor TYPE_GOOGLE_CREDENTIALS_FILE (chave/credenciais JSON ou P12).

Como a formatação difere entre cada método, é mais fácil gerar uma chave com o mesmo método que você planeja usar ao fazer futuras chamadas de API. Por exemplo, se você estiver usando gcloud, também gere sua chave usando gcloud. Se quiser usar uma chave para um método gerado utilizando um método diferente (por exemplo, usar uma chave gerada por REST com gcloud), será preciso editar a chave para corresponder ao formato apropriado.

O Google garante que todas as chaves públicas para todas as contas de serviço sejam publicamente acessíveis por qualquer pessoa e fiquem disponíveis para verificar assinaturas criadas com a chave privada. A chave pública está publicamente acessível nos seguintes URLs:

  • certificado x.509: https://www.googleapis.com/service_accounts/v1/metadata/x509/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
  • chave da Web JSON (JWK): https://www.googleapis.com/service_accounts/v1/jwk/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
  • ponto de extremidade bruto: https://www.googleapis.com/service_accounts/v1/metadata/raw/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com

Como listar chaves de conta de serviço

É possível listar as chaves da conta de serviço de uma conta de serviço usando o Console do Cloud, a ferramenta gcloud, o método serviceAccount.keys.list() ou uma das bibliotecas de cliente.

O método serviceAccount.keys.list() normalmente é usado para auditar contas de serviço e chaves ou para criar ferramentas personalizadas a fim de gerenciar contas de serviço.

Para descobrir a que projeto sua chave pertence, faça o download da chave como um arquivo JSON e procure nesse arquivo.

É possível que você veja chaves que você não criou listadas. Essas são chaves gerenciadas pelo Google Cloud usadas pelos serviços do Google Cloud, como o App Engine e o Compute Engine. Para mais informações sobre a diferença entre chaves do usuário e pelo Google Cloud, consulte Noções básicas sobre as contas de serviço.

Console

  1. Abra a página IAM e Admin no Console do Cloud.

    Abrir a página IAM e Admin

  2. Clique em Selecionar um projeto e em Abrir.

  3. Na navegação à esquerda, clique em Contas de serviço. Todas as contas de serviço e chaves correspondentes são listadas.

Comando gcloud

Execute o comando gcloud iam service-accounts keys list para listar as chaves da conta de serviço.

Comando:

    gcloud iam service-accounts keys list \
      --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Saída:

KEY_ID CREATED_AT EXPIRES_AT
8e6e3936d7024646f8ceb39792006c07f4a9760c 2016-01-26T21:01:42.000Z 2026-01-23T21:01:42.000Z
937c98f870f5c8db970af527aa3c12fd88b1c20a 2016-01-26T20:55:40.000Z 2026-01-23T20:55:40.000Z

API REST

Chame o serviceAccount.keys.list() para listar as chaves de uma conta de serviço.

Solicitação:

    GET https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com/keys
    

Saída:

{
        "keys": [
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com/keys/90c48f61c65cd56224a12ab18e6ee9ca9c3aee7c",
            "validAfterTime": "2016-01-25T18:38:09.000Z",
            "validBeforeTime": "2026-01-22T18:38:09.000Z",
            "keyAlgorithm": "KEY_ALG_RSA_2048"
        },
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com/keys/e5e3800831ac1adc8a5849da7d827b4724b1fce8",
            "validAfterTime": "2016-01-25T13:43:27.000Z",
            "validBeforeTime": "2016-01-26T13:43:27.000Z",
            "keyAlgorithm": "KEY_ALG_RSA_2048"
        },
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com/keys/b97699f042b8eee6a846f4f96259fbcd13e2682e",
            "validAfterTime": "2016-01-26T13:28:27.000Z",
            "validBeforeTime": "2016-01-27T13:28:27.000Z",
            "keyAlgorithm": "KEY_ALG_RSA_2048"
        }
      ]
    }
    

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para saber mais informações, consulte a documentação de referência da API Cloud IAM para C#.


    using System;
    using System.Collections.Generic;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;

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

            var response = service.Projects.ServiceAccounts.Keys
                .List($"projects/-/serviceAccounts/{serviceAccountEmail}")
                .Execute();
            foreach (ServiceAccountKey key in response.Keys)
            {
                Console.WriteLine("Key: " + key.Name);
            }
            return response.Keys;
        }
    }

Go

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Go.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // listKey lists a service account's keys.
    func listKeys(w io.Writer, serviceAccountEmail string) ([]*iam.ServiceAccountKey, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %v", err)
    	}

    	resource := "projects/-/serviceAccounts/" + serviceAccountEmail
    	response, err := service.Projects.ServiceAccounts.Keys.List(resource).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Keys.List: %v", err)
    	}
    	for _, key := range response.Keys {
    		fmt.Fprintf(w, "Listing key: %v", key.Name)
    	}
    	return response.Keys, nil
    }
    

Java

Antes de testar este exemplo, siga as instruções de configuração do Java no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Java.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.ServiceAccountKey;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;

    public class ListServiceAccountKeys {

      // Lists all keys for a service account.
      public static void listKeys(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          List<ServiceAccountKey> keys =
              service
                  .projects()
                  .serviceAccounts()
                  .keys()
                  .list(
                      "projects/-/serviceAccounts/"
                          + "your-service-account-name@"
                          + projectId
                          + ".iam.gserviceaccount.com")
                  .execute()
                  .getKeys();

          for (ServiceAccountKey key : keys) {
            System.out.println("Key: " + key.getName());
          }
        } catch (IOException e) {
          System.out.println("Unable to list service account keys: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-account-keys")
                .build();
        return service;
      }
    }

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Python.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def list_keys(service_account_email):
        """Lists all keys for a service account."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        keys = service.projects().serviceAccounts().keys().list(
            name='projects/-/serviceAccounts/' + service_account_email).execute()

        for key in keys['keys']:
            print('Key: ' + key['name'])

Como encontrar uma chave da conta de serviço

Só é possível visualizar os dados da chave privada para uma chave da conta de serviço quando ela é criada pela primeira vez.

Encontre informações básicas sobre uma chave, como ID, algoritmo e dados de chave pública, com o método da API REST projects.serviceAccounts.keys.get(). Não é possível usar o Console do Cloud ou a ferramenta de linha de comando gcloud.

Como fazer upload de chaves públicas para contas de serviço

Você pode fazer upload da parte da chave pública de um par de chaves gerenciadas pelo usuário para uma conta de serviço. Depois de fazer upload da chave pública, ela será permanentemente associada à conta de serviço e será usada da mesma forma que qualquer outra chave da conta de serviço gerenciada pelo usuário.

Se você preferir usar um par de chaves gerenciado pelo usuário em vez de um par de chaves gerenciado pelo Google, não deixe de mantê-lo e alterná-lo.

Antes de fazer upload da sua chave pública, verifique se ela está no formato RSA_X509_PEM. Se você ainda não tiver um certificado, é possível gerar um X.509 autoassinado no formato apropriado usando ferramentas como openssl. Para gerar um certificado válido usando ferramenta openssl:

openssl req -x509 -nodes -newkey rsa:2048 -keyout /output/path/to/private/key \
        -out /output/path/to/public/key -subj "/CN=unused"
    

Por padrão, os certificados X.509 criados usando openssl expiram após 30 dias. No entanto, é possível estender ou reduzir o prazo de validade usando a sinalização -n.

Comando gcloud

Execute o comando gcloud alpha iam service-accounts keys upload para fazer upload de uma chave pública a fim de assinar chaves de contas de serviço.

Comando:

    gcloud alpha iam service-accounts keys upload /path/to/public/key \
      --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

A saída contém um identificador exclusivo para a chave enviada:

Name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0
    

Para determinar se o comando foi bem-sucedido, execute o comando gcloud iam service-accounts keys list:

    gcloud iam service-accounts keys list \
      --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

A saída terá o mesmo identificador exclusivo retornado após a criação da chave:

KEY_ID CREATED_AT EXPIRES_AT
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 2019-06-26T21:01:42.000Z 2029-06-23T21:01:42.000Z

API REST

Chame serviceAccount.keys.upload() para fazer o upload de uma chave pública para uma conta de serviço.

Solicitação:

    POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com/keys:upload
    

Corpo da solicitação:

{
      "publicKeyData": "LS0tLS1CRUdJTiBDRVJUSUZJQ...jlsCjVjMXUzVlVqS3AtLS0tXG4="
    }
    

O corpo da solicitação precisa conter os dados da chave pública no formato RSA_X509_PEM.

Saída:

{
      "name": "projects/[PROJECT-ID]/serviceAccounts/[SERVICE-ACCOUNT-EMAIL]/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0",
      "keyAlgorithm": "KEY_ALG_RSA_2048",
      "keyOrigin": "USER_PROVIDED",
    }
    

Como excluir chaves de contas de serviço

Exclua uma chave de conta de serviço usando o Console do Cloud, a ferramenta gcloud, o método serviceAccount.keys.delete() ou uma das bibliotecas de cliente.

Se você excluir uma chave, não será mais possível usá-la para acessar os recursos do Cloud Platform pelo aplicativo. Uma prática recomendada de segurança é trocar as chaves da conta de serviço regularmente. Para fazer isso, crie uma nova chave, alterne os aplicativos para que usem essa chave e exclua a chave antiga. Use os métodos serviceAccount.keys.create() e serviceAccount.keys.delete() juntos para automatizar o revezamento.

Console

  1. Abra a página IAM e Admin no Console do Cloud.

    Abrir a página IAM e Admin

  2. Clique em Selecionar um projeto e em Abrir.

  3. Na navegação à esquerda, clique em Contas de serviço. Todas as contas de serviço e chaves correspondentes são listadas.

  4. Encontre a linha da conta de serviço para que você quer criar uma chave. Nessa linha, clique no botão nessa linha e em Criar chave.

  5. Na lista de chaves, clique em Excluir para aquelas que você quer remover.

Comando gcloud

Execute o comando gcloud iam service-accounts keys delete para excluir as chaves da conta de serviço.

Comando:

    gcloud iam service-accounts keys delete [KEY-ID] \
      --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Saída:

Deleted key [8e6e3936d7024646f8ceb39792006c07f4a9760c] for
    service account [SA-NAME@PROJECT-ID.iam.gserviceaccount.com]
    

API REST

Solicitação:

    DELETE https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com/keys/[KEY-ID]
    

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para saber mais informações, consulte a documentação de referência da API Cloud IAM para C#.


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

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

            service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Execute();
            Console.WriteLine("Deleted key: " + fullKeyName);
        }
    }

Go

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Go.

import (
    	"context"
    	"fmt"
    	"io"

    	iam "google.golang.org/api/iam/v1"
    )

    // deleteKey deletes a service account key.
    func deleteKey(w io.Writer, fullKeyName string) error {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %v", err)
    	}

    	_, err = service.Projects.ServiceAccounts.Keys.Delete(fullKeyName).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Keys.Delete: %v", err)
    	}
    	fmt.Fprintf(w, "Deleted key: %v", fullKeyName)
    	return nil
    }
    

Java

Antes de testar este exemplo, siga as instruções de configuração do Java no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Java.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.json.jackson2.JacksonFactory;
    import com.google.api.services.iam.v1.Iam;
    import com.google.api.services.iam.v1.IamScopes;
    import com.google.api.services.iam.v1.model.ServiceAccountKey;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;

    public class DeleteServiceAccountKey {

      // Deletes a service account key.
      public static void deleteKey(String projectId) {
        // String projectId = "my-project-id";

        Iam service = null;
        try {
          service = initService();
        } catch (IOException | GeneralSecurityException e) {
          System.out.println("Unable to initialize service: \n" + e.toString());
          return;
        }

        try {
          // First, get the name of the key using List() or Get()
          List<ServiceAccountKey> keys =
              service
                  .projects()
                  .serviceAccounts()
                  .keys()
                  .list(
                      "projects/-/serviceAccounts/"
                          + "your-service-account-name@"
                          + projectId
                          + ".iam.gserviceaccount.com")
                  .execute()
                  .getKeys();
          String keyToDelete = keys.get(0).getName();

          // Then you can delete the key
          service.projects().serviceAccounts().keys().delete(keyToDelete).execute();

          System.out.println("Deleted key: " + keyToDelete);
        } catch (IOException e) {
          System.out.println("Unable to delete service account key: \n" + e.toString());
        }
      }

      private static Iam initService() throws GeneralSecurityException, IOException {
        // Use the Application Default Credentials strategy for authentication. For more info, see:
        // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
        GoogleCredential credential =
            GoogleCredential.getApplicationDefault()
                .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));
        // Initialize the IAM service, which can be used to send requests to the IAM API.
        Iam service =
            new Iam.Builder(
                    GoogleNetHttpTransport.newTrustedTransport(),
                    JacksonFactory.getDefaultInstance(),
                    credential)
                .setApplicationName("service-account-keys")
                .build();
        return service;
      }
    }

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM para Python.

import os

    from google.oauth2 import service_account
    import googleapiclient.discovery

    def delete_key(full_key_name):
        """Deletes a service account key."""

        credentials = service_account.Credentials.from_service_account_file(
            filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
            scopes=['https://www.googleapis.com/auth/cloud-platform'])

        service = googleapiclient.discovery.build(
            'iam', 'v1', credentials=credentials)

        service.projects().serviceAccounts().keys().delete(
            name=full_key_name).execute()

        print('Deleted key: ' + full_key_name)