Excluir e cancelar a exclusão de contas de serviço

Nesta página, explicamos como excluir e cancelar a exclusão de contas de serviço usando a API Identity and Access Management (IAM), o console do Google Cloud e a ferramenta de linha de comando gcloud.

Antes de começar

  • Ative a IAM API.

    Ative a API

  • Configure a autenticação.

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

    Console

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

    gcloud

    É possível usar as amostras da CLI do gcloud nesta página de um dos seguintes ambientes de desenvolvimento:

    • Cloud Shell: para usar um terminal on-line com a CLI gcloud já configurada, ative o Cloud Shell.

      Na parte de baixo desta página, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. A inicialização da sessão pode levar alguns segundos.

    • Shell local: para usar a CLI da gcloud em um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud.

    C++

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

    1. Instale a CLI do Google Cloud.
    2. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    3. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login

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

    C#

    Para usar as amostras de .NET nesta página de um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure o Application Default Credentials com as credenciais de usuário.

    1. Instale a CLI do Google Cloud.
    2. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    3. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login

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

    Go

    Para usar as amostras de Go nesta página de um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure o Application Default Credentials com as credenciais de usuário.

    1. Instale a CLI do Google Cloud.
    2. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    3. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login

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

    Java

    Para usar as amostras de Java nesta página de um ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure o Application Default Credentials com as credenciais de usuário.

    1. Instale a CLI do Google Cloud.
    2. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    3. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login

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

    Python

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

    1. Instale a CLI do Google Cloud.
    2. Para inicializar a CLI gcloud, execute o seguinte comando:

      gcloud init
    3. Crie as credenciais de autenticação para sua Conta do Google:

      gcloud auth application-default login

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

    REST

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

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

  • Entenda as contas de serviço do IAM

Funções exigidas

Para ter as permissões necessárias para excluir e cancelar a exclusão de contas de serviço, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

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

Para saber mais sobre esses papéis, consulte Papéis de contas de serviço.

Os papéis básicos do IAM também contêm permissões para gerenciar as contas de serviço. Não conceda papéis básicos em um ambiente de produção, recomendamos que você faça isso em um ambiente de desenvolvimento ou teste.

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, os aplicativos do App Engine e as instâncias de VM do Compute Engine que usam essas contas de serviço não terão mais acesso aos recursos no projeto.

Exclua as contas de serviço com cuidado. Verifique se os aplicativos críticos não estão mais usando uma conta de serviço antes de excluí-la. Se você não tiver certeza se uma conta de serviço está sendo usada, recomendamos desativar a conta de serviço em vez de excluí-la. As contas de serviço desativadas poderão ser reativadas se ainda forem necessárias.

Para restaurar uma conta de serviço excluída, cancele a exclusão dela em até 30 dias. Após esse período, o IAM a remove permanentemente. 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.

Para reduzir ainda mais o risco de excluir uma conta de serviço necessária, também é possível ativar as recomendações de risco de alterações. As recomendações de alteração de risco geram avisos quando você tenta excluir contas de serviço que o Google Cloud identificou como importantes.

Se você excluir uma conta de serviço e criar uma nova com o mesmo nome, a nova conta de serviço será tratada como uma identidade separada. Ela não herda os papéis concedidos à conta de serviço excluída. Por outro lado, quando você exclui uma conta de serviço, ela é cancelada, a identidade da conta de serviço não é alterada e ela mantém os papéis.

Quando uma conta de serviço é excluída, as vinculações de papel não são removidas imediatamente. No entanto, elas são limpas automaticamente do sistema após no máximo 60 dias. Até que essa limpeza aconteça, a conta de serviço aparece nas vinculações de papéis com um prefixo deleted: e um sufixo ?uid=NUMERIC_ID, em que NUMERIC_ID é um ID numérico exclusivo da conta de serviço.

As contas de serviço excluídas não contam para a cota da conta de serviço.

Console

  1. No console do Google Cloud, acesse a página Contas de serviço.

    Acesse as Contas de serviço

  2. Selecione um projeto.

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

gcloud

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

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

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

C++

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

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.DeleteServiceAccount(name);
  if (!response.ok()) throw std::runtime_error(response.message());
  std::cout << "ServiceAccount successfully deleted.\n";
}

C#

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

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


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

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

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

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: %w", err)
	}

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

Java

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

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.iam.v1.Iam;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
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 serviceAccountName) {
    // String projectId = "my-project-id";
    // String serviceAccountName = "my-service-account-name";

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

    String serviceAccountEmail = serviceAccountName + "@" + projectId + ".iam.gserviceaccount.com";
    try {
      service
          .projects()
          .serviceAccounts()
          .delete("projects/-/serviceAccounts/" + serviceAccountEmail)
          .execute();

      System.out.println("Deleted service account: " + serviceAccountEmail);
    } 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
    GoogleCredentials credential =
        GoogleCredentials.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(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

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

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import os

from google.oauth2 import service_account  # type: ignore
import googleapiclient.discovery  # type: ignore

def delete_service_account(email: str) -> None:
    """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)

REST

O método serviceAccounts.deleteexclui uma chave de conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de e-mail da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

Método HTTP e URL:

DELETE https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID

Para enviar a solicitação, expanda uma destas opções:

Se bem-sucedido, o corpo da resposta fica vazio.

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 IAM remove 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 crie 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.

Se não for possível cancelar a exclusão da conta de serviço, crie uma nova conta de serviço com o mesmo nome, revogue todos os papéis da conta de serviço excluída, e conceda os mesmos papéis à nova conta de serviço. Para detalhes, consulte Políticas com principais excluídos.

Encontrar o ID numérico de uma conta de serviço excluída

Quando você cancelar a exclusão de uma conta de serviço, deverá 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.

Se você souber que uma vinculação em uma política de permissão inclui a conta de serviço excluída, será possível conseguir a política e encontrar o ID numérico nela. Esse ID está anexado ao nome da conta de serviço excluída. Por exemplo, nesta política, o ID numérico da conta de serviço excluída é 123456789012345678901:

{
  "version": 1,
  "etag": "BwUjMhCsNvY=",
  "bindings": [
    {
      "members": [
        "deleted:serviceAccount:my-service-account@project-id.iam.gserviceaccount.com?uid=123456789012345678901"
      ],
      "role": "roles/iam.serviceAccountUser"
    },
  ]
}

Os IDs numéricos só são anexados aos nomes dos principais excluídos.

Como alternativa, é possível pesquisar nos registros de auditoria a operação DeleteServiceAccount que excluiu a conta de serviço:

  1. No console do Google Cloud, acesse a página do Explorador de registros.

    Acessar o "Explorador de registros"

  2. No editor de consultas, insira a seguinte consulta, substituindo SERVICE_ACCOUNT_EMAIL pelo endereço de e-mail 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_EMAIL"
    "DeleteServiceAccount"
    
  3. Se a conta de serviço foi excluída há mais de uma hora, clique em schedule Última hora, selecione um período mais longo na lista suspensa e clique em Aplicar.

  4. Clique em Run query. O Explorador de registros exibe as operações DeleteServiceAccount que afetaram as contas de serviço com o nome especificado.

  5. Encontre e anote o ID numérico da conta de serviço excluída seguindo um destes procedimentos:

    • Se os resultados da pesquisa incluem apenas uma operação DeleteServiceAccount, localize o ID numérico no campo ID exclusivo do painel Campos de registro.

    • Se os resultados da pesquisa mostrarem mais de um registro, faça o seguinte:

      1. Encontre a entrada de registro correta. Para encontrar a entrada de registro correta, clique na seta expansora ao lado de uma entrada de registro. 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.

      2. Na entrada de registro correta, localize o ID numérico da conta de serviço. Para localizar o ID numérico, expanda o campo protoPayload da entrada de registro e localize o campo resourceName.

        O ID numérico é tudo o que está após serviceAccounts no campo resourceName.

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.

gcloud

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

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

  2. 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'

REST

O método serviceAccounts.undelete restaura uma conta de serviço excluída.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_NUMERIC_ID: o ID numérico exclusivo da conta de serviço.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NUMERIC_ID:undelete

Para enviar a solicitação, expanda uma destas opções:

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, como abaixo:

{
  "restoredAccount": {
    "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com",
    "projectId": "my-project",
    "uniqueId": "123456789012345678901",
    "email": "my-service-account@my-project.iam.gserviceaccount.com",
    "displayName": "My service account",
    "etag": "BwUp3rVlzes=",
    "description": "A service account for running jobs in my project",
    "oauth2ClientId": "987654321098765432109"
  }
}

A seguir

Faça um teste

Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.

Comece a usar gratuitamente