Como criar e gerenciar contas de serviço

Nesta página, explicamos como criar e gerenciar contas de serviço usando a API Cloud Identity and Access Management, o Console do Google Cloud e a ferramenta de linha de comando gcloud.

Quando você cria um novo projeto do Cloud, o Google Cloud cria automaticamente uma conta de serviço do Compute Engine e uma conta de serviço do App Engine nesse projeto. É possível criar até 98 contas de serviço para o projeto e controlar o acesso aos seus recursos.

Antes de começar

Permissões necessárias

Para permitir que um usuário gerencie contas de serviço, conceda um dos seguintes papéis:

  • Usuário da conta de serviço (roles/iam.serviceAccountUser): concede permissões para receber, listar ou personificar uma conta de serviço.
  • Administrador da conta de serviço (roles/iam.serviceAccountAdmin): inclui as permissões de Usuário da conta de serviço e também concede permissões para criar, atualizar, excluir e definir ou receber a política do Cloud IAM em um conta de serviço.

Os papéis primários do Cloud IAM também contêm permissões para gerenciar contas de serviço. No entanto, recomendamos que você conceda um dos papéis predefinidos acima para evitar acesso desnecessário a outros recursos do Google Cloud. Para saber mais sobre esses papéis, consulte a lista de papéis das contas de serviço.

Como criar uma conta de serviço

Criar uma conta de serviço é semelhante a adicionar um membro ao projeto, mas essa conta pertence aos aplicativos e não a um usuário final.

Nos exemplos abaixo, [SA-NAME] é o nome da conta de serviço que você fornece, como my-service-account. Esse é um identificador exclusivo. Ele aparecerá no endereço de e-mail da conta de serviço que foi provisionada durante a criação, como my-service-account@project-id.iam.gserviceaccount.com. Você também o usará para atualizar a conta de serviço com outras APIs. Não será possível alterá-lo após a criação.

Forneça também os seguintes valores:

  • [SA-DESCRIPTION] é uma descrição opcional para a conta de serviço.
  • [SA-DISPLAY-NAME] é um nome intuitivo para a conta de serviço.
  • [PROJECT-ID] é o ID do projeto do Google Cloud.

Para criar uma conta de serviço, no mínimo, o usuário precisa receber o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Clique em Selecione um projeto, escolha seu projeto e clique em Abrir.

  3. Clique em Criar conta de serviço.

  4. Insira o nome da conta de serviço (nome de exibição intuitivo), uma descrição opcional, selecione o papel que você quer conceder à conta de serviço e clique em Salvar.

Comando gcloud

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

Comando:

gcloud iam service-accounts create [SA-NAME] \
        --description "[SA-DESCRIPTION]" \
        --display-name "[SA-DISPLAY-NAME]"
    

A saída inclui o nome da conta de serviço:

Created service account [SA-NAME].
    

API REST

Chame serviceAccounts.create() para criar uma conta de serviço.

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts
    

O corpo da solicitação deve conter as propriedades da conta de serviço.

{
        "accountId": "[SA-NAME]",
        "serviceAccount": {
            "description": "[SA-DESCRIPTION]",
            "displayName": "[SA-DISPLAY-NAME]"
        }
    }
    

Saída:

{
        "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "projectId": "PROJECT-ID",
        "uniqueId": "113948692397867021414",
        "email": "SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "description": "SA-DESCRIPTION",
        "displayName": "SA-DISPLAY-NAME",
        "etag": "BwUp3rVlzes=",
        "oauth2ClientId": "117249000288840666939"
    }
    

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#.

Ver no GitHub (em inglês) Feedback

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

    public partial class ServiceAccounts
    {
        public static ServiceAccount CreateServiceAccount(string projectId,
            string name, string displayName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            var request = new CreateServiceAccountRequest
            {
                AccountId = name,
                ServiceAccount = new ServiceAccount
                {
                    DisplayName = displayName
                }
            };
            var serviceAccount = service.Projects.ServiceAccounts.Create(
                request, "projects/" + projectId).Execute();
            Console.WriteLine("Created service account: " + serviceAccount.Email);
            return serviceAccount;
        }
    }

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"
    )

    // createServiceAccount creates a service account.
    func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %v", err)
    	}

    	request := &iam.CreateServiceAccountRequest{
    		AccountId: name,
    		ServiceAccount: &iam.ServiceAccount{
    			DisplayName: displayName,
    		},
    	}
    	account, err := service.Projects.ServiceAccounts.Create("projects/"+projectID, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Create: %v", err)
    	}
    	fmt.Fprintf(w, "Created service account: %v", account)
    	return account, 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.

Ver no GitHub (em inglês) Feedback
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.CreateServiceAccountRequest;
    import com.google.api.services.iam.v1.model.ServiceAccount;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class CreateServiceAccount {

      // Creates a service account.
      public static void createServiceAccount(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 {
          ServiceAccount serviceAccount = new ServiceAccount();
          serviceAccount.setDisplayName("your-display-name");
          CreateServiceAccountRequest request = new CreateServiceAccountRequest();
          request.setAccountId("your-service-account-name");
          request.setServiceAccount(serviceAccount);

          serviceAccount =
              service.projects().serviceAccounts().create("projects/" + projectId, request).execute();

          System.out.println("Created service account: " + serviceAccount.getEmail());
        } catch (IOException e) {
          System.out.println("Unable to create service account: \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-accounts")
                .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_service_account(project_id, name, display_name):
        """Creates 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)

        my_service_account = service.projects().serviceAccounts().create(
            name='projects/' + project_id,
            body={
                'accountId': name,
                'serviceAccount': {
                    'displayName': display_name
                }
            }).execute()

        print('Created service account: ' + my_service_account['email'])
        return my_service_account

Depois de criar uma conta de serviço, atribua a ela um ou mais papéis para que ela possa atuar em seu nome.

Como listar contas de serviço

Ao listar contas de serviço, é possível especificar parâmetros para limitar o número de contas a serem incluídas na resposta. Em seguida, use ListServiceAccountsResponse.next_page_token em uma solicitação subsequente para listar as contas de serviço restantes.

Use esse método para auditar contas de serviço e chaves ou criar ferramentas personalizadas para gerenciar contas de serviço.

Para listar contas de serviço, o usuário precisa ter, no mínimo, o papel de Usuário da conta de serviço (roles/iam.serviceAccountUser) ou o papel primitivo de Visualizador (roles/viewer).

Console

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Clique em Selecione um projeto.

  3. Selecione o projeto e clique em Abrir. Todas as contas de serviço estão listadas na página Contas de serviço.

Comando gcloud

Execute o comando gcloud iam service-accounts list para listar todas as contas de serviço em um projeto.

Comando:

gcloud iam service-accounts list
    

A saída é a lista de todas as contas de serviço no projeto:

NAME                    EMAIL
    SA-DISPLAY-NAME-1       SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com
    SA-DISPLAY-NAME-2       SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com
    

API REST

Chame o método serviceAccounts.list().

Solicitação:

GET https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts
    

Saída:

{
        "accounts": [
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com",
            "projectId": "PROJECT-ID",
            "uniqueId": "108979773878059201436",
            "email": "SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com",
            "description": "SA-DESCRIPTION-1",
            "displayName": "SA-DISPLAY-NAME-1",
            "etag": "BwUpTsLVUkQ=",
            "oauth2ClientId": "102240834887833340852"
        },
        {
            "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com",
            "projectId": "PROJECT-ID",
            "uniqueId": "108979773878059201436",
            "email": "SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com",
            "description": "SA-DESCRIPTION-2",
            "displayName": "SA-DISPLAY-NAME-2",
            "etag": "BwUpTsLVUkQ=",
            "oauth2ClientId": "102240834887833340852"
        }]
    }
    

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#.

Ver no GitHub (em inglês) Feedback

    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 ServiceAccounts
    {
        public static IList<ServiceAccount> ListServiceAccounts(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            var response = service.Projects.ServiceAccounts.List(
                "projects/" + projectId).Execute();
            foreach (ServiceAccount account in response.Accounts)
            {
                Console.WriteLine("Name: " + account.Name);
                Console.WriteLine("Display Name: " + account.DisplayName);
                Console.WriteLine("Email: " + account.Email);
                Console.WriteLine();
            }
            return response.Accounts;
        }
    }

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"
    )

    // listServiceAccounts lists a project's service accounts.
    func listServiceAccounts(w io.Writer, projectID string) ([]*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %v", err)
    	}

    	response, err := service.Projects.ServiceAccounts.List("projects/" + projectID).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.List: %v", err)
    	}
    	for _, account := range response.Accounts {
    		fmt.Fprintf(w, "Listing service account: %v\n", account.Name)
    	}
    	return response.Accounts, 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.

Ver no GitHub (em inglês) Feedback
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.ListServiceAccountsResponse;
    import com.google.api.services.iam.v1.model.ServiceAccount;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;

    public class ListServiceAccounts {

      // Lists all service accounts for the current project.
      public static void listServiceAccounts(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 {
          ListServiceAccountsResponse response =
              service.projects().serviceAccounts().list("projects/" + projectId).execute();
          List<ServiceAccount> serviceAccounts = response.getAccounts();

          for (ServiceAccount account : serviceAccounts) {
            System.out.println("Name: " + account.getName());
            System.out.println("Display Name: " + account.getDisplayName());
            System.out.println("Email: " + account.getEmail());
            System.out.println();
          }
        } catch (IOException e) {
          System.out.println("Unable to list service accounts: \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-accounts")
                .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.

def list_service_accounts(project_id):
        """Lists all service accounts for the current project."""

        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_accounts = service.projects().serviceAccounts().list(
            name='projects/' + project_id).execute()

        for account in service_accounts['accounts']:
            print('Name: ' + account['name'])
            print('Email: ' + account['email'])
            print(' ')
        return service_accounts

Como atualizar uma conta de serviço

O nome de exibição (nome intuitivo) e a descrição de uma conta de serviço geralmente são usados para capturar informações adicionais, como o objetivo da conta de serviço ou uma pessoa de contato dela.

Para atualizar o nome ou descrição de uma conta de serviço, no mínimo, o usuário precisa receber o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Clique em Selecione um projeto, escolha seu projeto e clique em Abrir.

  3. Procure a conta de serviço que você quer renomear, clique no nessa linha e, em seguida, clique em Editar.

  4. Digite o novo nome e clique em Salvar.

Comando da gcloud

Execute o comando gcloud iam service-accounts update para atualizar uma conta de serviço.

Comando:

gcloud iam service-accounts update \
        [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com \
        --description "[UPDATED-SA-DESCRIPTION]" \
        --display-name "[UPDATED-DISPLAY-NAME]"
    

A saída é a conta de serviço renomeada:

description: Updated description
    displayName: Updated display name
    name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

API REST

Use o método serviceAccounts.patch().

Solicitação:

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

O corpo da solicitação precisa conter o e-mail da conta de serviço e o novo nome ou descrição de exibição.

{
        "serviceAccount": {
            "email": "[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com",
            "displayName": "[UPDATED-DISPLAY-NAME]",
            "description": "[UPDATED-DESCRIPTION]"
        },
        "updateMask": "displayName,description"
    }
    

Saída:

{
        "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "projectId": "PROJECT-ID",
        "uniqueId": "107522985251862639552",
        "email": "SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
        "description": "SA-DESCRIPTION",
        "displayName": "Updated display name",
        "etag": "BwUqLK4bL9U=",
        "oauth2ClientId": "105236325228757713905"
    }
    

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#.

Ver no GitHub (em inglês) Feedback

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

    public partial class ServiceAccounts
    {
        public static ServiceAccount RenameServiceAccount(string email,
            string newDisplayName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });

            // First, get a ServiceAccount using List() or Get().
            string resource = "projects/-/serviceAccounts/" + email;
            var serviceAccount = service.Projects.ServiceAccounts.Get(resource)
                .Execute();
            // Then you can update the display name.
            serviceAccount.DisplayName = newDisplayName;
            serviceAccount = service.Projects.ServiceAccounts.Update(
                serviceAccount, resource).Execute();
            Console.WriteLine($"Updated display name for {serviceAccount.Email} " +
                "to: " + serviceAccount.DisplayName);
            return serviceAccount;
        }
    }

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"
    )

    // renameServiceAccount renames a service account.
    func renameServiceAccount(w io.Writer, email, newDisplayName string) (*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %v", err)
    	}

    	// First, get a ServiceAccount using List() or Get().
    	resource := "projects/-/serviceAccounts/" + email
    	serviceAccount, err := service.Projects.ServiceAccounts.Get(resource).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Get: %v", err)
    	}
    	// Then you can update the display name.
    	serviceAccount.DisplayName = newDisplayName
    	serviceAccount, err = service.Projects.ServiceAccounts.Update(resource, serviceAccount).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Update: %v", err)
    	}

    	fmt.Fprintf(w, "Updated service account: %v", serviceAccount.Email)
    	return serviceAccount, 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.

Ver no GitHub (em inglês) Feedback
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.ServiceAccount;
    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class RenameServiceAccount {

      // Changes a service account's display name.
      public static void renameServiceAccount(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 a service account using List() or Get()
          ServiceAccount serviceAccount =
              service
                  .projects()
                  .serviceAccounts()
                  .get(
                      "projects/-/serviceAccounts/"
                          + "your-service-account-name@"
                          + projectId
                          + ".iam.gserviceaccount.com")
                  .execute();

          // Then you can update the display name
          serviceAccount.setDisplayName("your-new-display-name");
          serviceAccount =
              service
                  .projects()
                  .serviceAccounts()
                  .update(serviceAccount.getName(), serviceAccount)
                  .execute();

          System.out.println(
              "Updated display name for "
                  + serviceAccount.getName()
                  + " to: "
                  + serviceAccount.getDisplayName());
        } catch (IOException e) {
          System.out.println("Unable to rename service account: \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-accounts")
                .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 rename_service_account(email, new_display_name):
        """Changes a service account's display name."""

        # First, get a service account using List() or Get()
        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)

        resource = 'projects/-/serviceAccounts/' + email

        my_service_account = service.projects().serviceAccounts().get(
            name=resource).execute()

        # Then you can update the display name
        my_service_account['displayName'] = new_display_name
        my_service_account = service.projects().serviceAccounts().update(
            name=resource, body=my_service_account).execute()

        print('Updated display name for {} to: {}'.format(
            my_service_account['email'], my_service_account['displayName']))
        return my_service_account

Como desativar uma conta de serviço

Semelhante à exclusão de uma conta de serviço, quando você desativa uma conta de serviço, os aplicativos não terão mais acesso aos recursos do Google Cloud por meio dela. Se você desativar as contas de serviço padrão do App Engine e do Compute Engine, as instâncias não terão mais acesso aos recursos no projeto. Se você tentar desativar uma conta de serviço já desativada, nada acontecerá.

Diferente da exclusão de uma conta de serviço, é possível facilmente reativar contas desse tipo quando for necessário. Recomendamos desativar uma conta de serviço antes de excluí-la para garantir que nenhum aplicativo importante esteja usando a conta de serviço.

Para desativar uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Clique em Selecione um projeto, escolha seu projeto e clique em Abrir.

  3. Clique no nome da conta de serviço a ser desativada.

  4. Em Status da conta de serviço, clique em Desativar conta de serviço e em Desativar para confirmar a alteração.

Comando gcloud

Execute o comando gcloud iam service-accounts disable para desativar uma conta de serviço.

Comando:

gcloud iam service-accounts disable [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Saída:

Disabled service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

API REST

Use o método serviceAccounts.disable().

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

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#.

Ver no GitHub (em inglês) Feedback

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

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

            var request = new DisableServiceAccountRequest();

            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Disable(request, resource).Execute();
            Console.WriteLine("Disabled service account: " + email);
        }
    }

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"
    )

    // disableServiceAccount disables a service account.
    func disableServiceAccount(w io.Writer, email string) error {
    	// email:= service-account@your-project.iam.gserviceaccount.com
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %v", err)
    	}

    	request := &iam.DisableServiceAccountRequest{}
    	_, err = service.Projects.ServiceAccounts.Disable("projects/-/serviceAccounts/"+email, request).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Disable: %v", err)
    	}
    	fmt.Fprintf(w, "Disabled service account: %v", email)
    	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.

Ver no GitHub (em inglês) Feedback
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.DisableServiceAccountRequest;

    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class DisableServiceAccount {

      // Disables a service account.
      public static void disableServiceAccount(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 {
          DisableServiceAccountRequest request = new DisableServiceAccountRequest();
          service
              .projects()
              .serviceAccounts()
              .disable(
                  "projects/-/serviceAccounts/"
                      + "your-service-account-name@"
                      + projectId
                      + ".iam.gserviceaccount.com",
                  request)
              .execute();

          System.out.println(
              "Disabled service account: "
                  + "your-service-account-name@"
                  + projectId
                  + ".iam.gserviceaccount.com");
        } catch (IOException e) {
          System.out.println("Unable to disable service account: \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-accounts")
                .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 disable_service_account(email):
        """Disables 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)

        service.projects().serviceAccounts().disable(
            name='projects/-/serviceAccounts/' + email).execute()

        print("Disabled service account :" + email)

Como ativar uma conta de serviço

Depois de ativar uma conta de serviço desativada, os aplicativos recuperarão o acesso aos recursos do Google Cloud por meio dessa conta de serviço.

É possível ativar uma conta de serviço desativada a qualquer momento. Se você tentar ativar uma conta de serviço já ativada, nada acontecerá.

Para ativar uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Clique em Selecione um projeto, escolha seu projeto e clique em Abrir.

  3. Clique no nome da conta de serviço a ser ativada.

  4. Em Status da conta de serviço, clique em Ativar conta de serviço e em Ativar para confirmar a alteração.

Comando gcloud

Execute o comando gcloud iam service-accounts enable para ativar uma conta de serviço.

Comando:

gcloud iam service-accounts enable [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com
    

Saída:

Enabled service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

API REST

Use o método serviceAccounts.enable().

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

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#.

Ver no GitHub (em inglês) Feedback

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

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

            var request = new EnableServiceAccountRequest();

            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Enable(request, resource).Execute();
            Console.WriteLine("Enabled service account: " + email);
        }
    }

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"
    )

    // enableServiceAccount enables a service account.
    func enableServiceAccount(w io.Writer, email string) error {
    	// email:= service-account@your-project.iam.gserviceaccount.com
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %v", err)
    	}

    	request := &iam.EnableServiceAccountRequest{}
    	_, err = service.Projects.ServiceAccounts.Enable("projects/-/serviceAccounts/"+email, request).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Enable: %v", err)
    	}
    	fmt.Fprintf(w, "Enabled service account: %v", email)
    	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.

Ver no GitHub (em inglês) Feedback
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.EnableServiceAccountRequest;

    import java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class EnableServiceAccount {

      // Enables a service account.
      public static void enableServiceAccount(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 {
          EnableServiceAccountRequest request = new EnableServiceAccountRequest();
          service
              .projects()
              .serviceAccounts()
              .enable(
                  "projects/-/serviceAccounts/"
                      + "your-service-account-name@"
                      + projectId
                      + ".iam.gserviceaccount.com",
                  request)
              .execute();

          System.out.println(
              "Enabled service account: "
                  + "your-service-account-name@"
                  + projectId
                  + ".iam.gserviceaccount.com");
        } catch (IOException e) {
          System.out.println("Unable to enable service account: \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-accounts")
                .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 enable_service_account(email):
        """Enables 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)

        service.projects().serviceAccounts().enable(
            name='projects/-/serviceAccounts/' + email).execute()

        print("Disabled service account :" + email)

Como excluir uma conta de serviço

Quando você exclui uma conta de serviço, os aplicativos não têm mais acesso aos recursos do Google Cloud por meio dessa conta de serviço. Se você excluir as contas de serviço padrão do App Engine e do Compute Engine, as instâncias não terão mais acesso aos recursos no projeto.

Tome cuidado ao excluir contas de serviço e, antes de fazer isso, verifique se os aplicativos importantes não estão mais usando essa conta. Caso não tenha certeza se uma conta de serviço está sendo utilizada, recomendamos que você desative a conta de serviço antes de excluí-la. É fácil reativar esse tipo de conta, desde que ela ainda esteja em uso.

Quando uma conta de serviço é excluída, as vinculações de papéis dela não são removidas imediatamente, elas são limpas automaticamente do sistema após, no máximo, 60 dias.

Para excluir uma conta de serviço, no mínimo, o usuário precisa receber o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Clique em Selecionar um projeto e em Abrir.

  3. Selecione as contas de serviço que você quer excluir e clique em Excluir .

Comando gcloud

Execute o comando gcloud iam service-accounts delete para excluir uma conta de serviço.

Comando:

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

Saída:

Deleted service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com
    

API REST

Use o método serviceAccounts.delete().

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

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#.

Ver no GitHub (em inglês) Feedback

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

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

            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Delete(resource).Execute();
            Console.WriteLine("Deleted service account: " + email);
        }
    }

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"
    )

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

    	_, err = service.Projects.ServiceAccounts.Delete("projects/-/serviceAccounts/" + email).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Delete: %v", err)
    	}
    	fmt.Fprintf(w, "Deleted service account: %v", email)
    	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.

Ver no GitHub (em inglês) Feedback
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 java.io.IOException;
    import java.security.GeneralSecurityException;
    import java.util.Collections;

    public class DeleteServiceAccount {

      // Deletes a service account.
      public static void deleteServiceAccount(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 {
          service
              .projects()
              .serviceAccounts()
              .delete(
                  "projects/-/serviceAccounts/"
                      + "your-service-account-name@"
                      + projectId
                      + ".iam.gserviceaccount.com")
              .execute();

          System.out.println(
              "Deleted service account: "
                  + "your-service-account-name@"
                  + projectId
                  + ".iam.gserviceaccount.com");
        } catch (IOException e) {
          System.out.println("Unable to delete service account: \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-accounts")
                .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_service_account(email):
        """Deletes 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)

        service.projects().serviceAccounts().delete(
            name='projects/-/serviceAccounts/' + email).execute()

        print('Deleted service account: ' + email)

Depois de excluir uma conta de serviço, evite criar uma nova conta de serviço com o mesmo nome. Isso pode resultar em um comportamento inesperado. Para saber mais informações, consulte Como excluir e recriar contas de serviço.

Como cancelar a exclusão de uma conta de serviço

Em alguns casos, é possível usar o comando undelete para cancelar a exclusão de uma conta de serviço excluída. Geralmente, é possível cancelar a exclusão de uma conta de serviço excluída se ela atender a estes critérios:

  • A conta de serviço foi excluída há menos de 30 dias.

    Após 30 dias, o Cloud IAM removerá permanentemente a conta de serviço. O Google Cloud não pode recuperar a conta de serviço depois que ela é removida permanentemente, mesmo que você envie uma solicitação de suporte.

  • Não há uma conta de serviço com o mesmo nome da conta de serviço excluída.

    Por exemplo, suponha que você excluiu acidentalmente a conta de serviço my-service-account@project-id.iam.gserviceaccount.com. Você ainda precisa de uma conta de serviço com esse nome, então você cria uma nova conta de serviço com o mesmo nome, my-service-account@project-id.iam.gserviceaccount.com.

    A nova conta de serviço não herda as permissões da conta de serviço excluída. Na verdade, ela é completamente separada da conta de serviço excluída. No entanto, não é possível cancelar a exclusão da conta de serviço original, porque a nova conta de serviço tem o mesmo nome.

    Para resolver esse problema, exclua a nova conta de serviço e tente cancelar a exclusão da conta de serviço original.

Como localizar o ID numérico da conta de serviço

Quando você cancelar a exclusão de uma conta de serviço, precisará fornecer o ID numérico dela. O ID numérico é um número de 21 dígitos, como 123456789012345678901, que identifica exclusivamente a conta de serviço. Por exemplo, se você excluir uma conta de serviço e, em seguida, criar uma nova conta de serviço com o mesmo nome, a conta de serviço original e a nova terão IDs numéricos diferentes.

Para encontrar o ID numérico de uma conta de serviço excluída, pesquise nos registros de auditoria por operações DeleteServiceAccount:

  1. Acesse a página Visualizador de registros no Console do Cloud.

    Acessar o visualizador de registros

  2. Na caixa de pesquisa próxima à parte superior da página, clique na arrow_drop_down seta de expansão e selecione Converter para filtro avançado.

  3. Na caixa de pesquisa, insira a seguinte consulta, substituindo [SERVICE_ACCOUNT_NAME] pelo nome da conta de serviço (por exemplo, my-service-account@project-id.iam.gserviceaccount.com):

    resource.type="service_account"
        resource.labels.email_id="[SERVICE_ACCOUNT_NAME]"
        "DeleteServiceAccount"
        
  4. Se a conta de serviço foi excluída há mais de uma hora, selecione um período mais longo na lista suspensa schedule Última hora.

    Se a conta de serviço foi excluída há mais de sete dias, selecione Sem limite.

  5. Clique em Enviar filtro. O Visualizador de registros exibe as operações DeleteServiceAccount que afetaram as contas de serviço com o nome especificado. O ID numérico de cada conta de serviço aparece ao lado do texto DeleteServiceAccount.

    Se os resultados da pesquisa incluem apenas uma operação DeleteServiceAccount, anote o ID numérico. Você usará o ID numérico para desfazer a exclusão da conta de serviço.

    Clique na arrow_right seta de expansão ao lado de um resultado de pesquisa, se houver mais de um. Revise os detalhes da entrada de registro e determine se ela mostra a operação que você quer desfazer. Repita esse processo até encontrar a entrada de registro correta e anote o ID numérico contido nessa entrada.

Como recuperar a conta de serviço por ID numérico

Depois de encontrar o ID numérico para a conta de serviço excluída, tente desfazer a exclusão da conta de serviço.

Comando gcloud

Execute o comando gcloud beta iam service-accounts undelete para cancelar a exclusão de uma conta de serviço.

Comando:

gcloud beta iam service-accounts undelete [ACCOUNT_ID]
    

Saída:

restoredAccount:
      email: SA-NAME@PROJECT-ID.iam.gserviceaccount.com
      etag: BwWWE7zpApg=
      name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com
      oauth2ClientId: '123456789012345678901'
      projectId: PROJECT-ID
      uniqueId: '[ACCOUNT-ID]'
    

API REST

Use o método serviceAccounts.undelete(). Substitua [ACCOUNT_UNIQUE_ID] pelo ID numérico da conta de serviço.

POST https://iam.googleapis.com/v1/projects/-/serviceAccounts/[ACCOUNT_UNIQUE_ID]:undelete
    

Se você cancelar a exclusão de uma conta, receberá um código de resposta 200 OK com detalhes sobre a conta de serviço restaurada.

A seguir