Elimine e anule a eliminação de contas de serviço

Esta página explica como eliminar e restaurar contas de serviço através da API Identity and Access Management (IAM), da Trusted Cloud consola e da ferramenta de linha de comandosgcloud.

Antes de começar

Funções necessárias

Para receber as autorizações de que precisa para eliminar e restaurar contas de serviço, peça ao seu administrador que lhe conceda as seguintes funções do IAM no projeto:

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

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

Para saber mais sobre estas funções, consulte o artigo Funções das contas de serviço.

As funções básicas do IAM também contêm autorizações para gerir contas de serviço. Não deve conceder funções básicas num ambiente de produção, mas pode concedê-las num ambiente de desenvolvimento ou teste.

Elimine uma conta de serviço

Quando elimina uma conta de serviço, as aplicações deixam de ter acesso aos Trusted Cloud by S3NS recursos através dessa conta de serviço. Se eliminar a conta de serviço do Compute Engine predefinida, as instâncias de VM do Compute Engine que usam essa conta de serviço deixam de ter acesso aos recursos no projeto.

Elimine contas de serviço com cuidado. Certifique-se de que as suas aplicações críticas já não estão a usar uma conta de serviço antes de a eliminar. Se não tiver a certeza de que está a ser usada uma conta de serviço, a Google recomenda que desative a conta de serviço em vez de a eliminar. As contas de serviço desativadas podem ser reativadas se ainda forem necessárias.

Se quiser restaurar uma conta de serviço eliminada, pode anular a eliminação se tiverem passado 30 dias ou menos desde que eliminou a conta de serviço. Após 30 dias, o IAM remove permanentemente a conta de serviço. Trusted Cloud Não é possível recuperar a conta de serviço após a remoção permanente, mesmo que apresente um pedido de apoio técnico.

Para reduzir ainda mais o risco de eliminar uma conta de serviço necessária, também pode ativar as recomendações de risco de alterações. As recomendações de risco de alteração geram avisos quando tenta eliminar contas de serviço que o sistema Trusted Cloud identificou como importantes.

Se eliminar uma conta de serviço e, em seguida, criar uma nova conta de serviço com o mesmo nome, a nova conta de serviço é tratada como uma identidade separada. Não herda as funções concedidas à conta de serviço eliminada. Por outro lado, quando elimina uma conta de serviço e, em seguida, anula a eliminação, a identidade da conta de serviço não se altera, e a conta de serviço mantém as respetivas funções.

Quando uma conta de serviço é eliminada, as respetivas associações de funções não são removidas imediatamente. São automaticamente anuladas do sistema após um máximo de 60 dias. Até lá, a conta de serviço aparece nas associações de funções com o prefixo deleted: e o sufixo ?uid=NUMERIC_ID, em que NUMERIC_ID é um ID numérico exclusivo para a conta de serviço.

As contas de serviço eliminadas não contam para a sua quota de contas de serviço.

Consola

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Selecione a conta de serviço que quer eliminar e, de seguida, clique em Eliminar .

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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

    Comando:

    gcloud iam service-accounts delete \
        SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com

    Saída:

    Deleted service account SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
  3. C++

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

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

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API C# IAM.

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

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    
    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 cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Go IAM.

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

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    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 cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Java IAM.

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

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.DeleteServiceAccountRequest;
    import com.google.iam.admin.v1.ServiceAccountName;
    import java.io.IOException;
    
    public class DeleteServiceAccount {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        String projectId = "your-project-id";
        String serviceAccountName = "my-service-account-name";
    
        deleteServiceAccount(projectId, serviceAccountName);
      }
    
      // Deletes a service account.
      public static void deleteServiceAccount(String projectId, String serviceAccountName)
              throws IOException {
        // Initialize client that will be used to send requests.
        // This client only needs to be created once, and can be reused for multiple requests.
        try (IAMClient client = IAMClient.create()) {
          String accountName = ServiceAccountName.of(projectId, serviceAccountName).toString();
          String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
          DeleteServiceAccountRequest request = DeleteServiceAccountRequest.newBuilder()
                  .setName(accountEmail)
                  .build();
          client.deleteServiceAccount(request);
    
          System.out.println("Deleted service account: " + serviceAccountName);
        }
      }
    }

    Python

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

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

    Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def delete_service_account(project_id: str, account: str) -> None:
        """Deletes a service account.
    
        project_id: ID or number of the Google Cloud project you want to use.
        account: ID or email which is unique identifier of the service account.
        """
    
        iam_admin_client = iam_admin_v1.IAMClient()
        request = types.DeleteServiceAccountRequest()
        request.name = f"projects/{project_id}/serviceAccounts/{account}"
    
        iam_admin_client.delete_service_account(request=request)
        print(f"Deleted a service account: {account}")

    REST

    O método serviceAccounts.delete elimina uma conta de serviço.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
    • SA_ID: o ID da sua conta de serviço. Este pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.s3ns-system.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 o seu pedido, expanda uma destas opções:

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

Anule a eliminação de uma conta de serviço

Em alguns casos, pode usar o comando undelete para anular a eliminação de uma conta de serviço eliminada. Normalmente, pode anular a eliminação de uma conta de serviço eliminada se esta cumprir os seguintes critérios:

  • A conta de serviço foi eliminada há menos de 30 dias.

    Após 30 dias, o IAM remove permanentemente a conta de serviço. Trusted Cloud Não é possível recuperar a conta de serviço depois de ser removida permanentemente, mesmo que apresente um pedido de apoio técnico.

  • Não existe nenhuma conta de serviço com o mesmo nome da conta de serviço eliminada.

    Por exemplo, suponha que elimina acidentalmente a conta de serviço my-service-account@project-id.s3ns-system.iam.gserviceaccount.com. Continua a precisar de uma conta de serviço com esse nome, pelo que cria uma nova conta de serviço com o mesmo nome, my-service-account@project-id.s3ns-system.iam.gserviceaccount.com.

    A nova conta de serviço não herda as autorizações da conta de serviço eliminada. Na prática, é completamente separada da conta de serviço eliminada. No entanto, não pode anular a eliminação da conta de serviço original, porque a nova conta de serviço tem o mesmo nome.

    Para resolver este problema, elimine a nova conta de serviço e, em seguida, tente anular a eliminação da conta de serviço original.

Se não conseguir anular a eliminação da conta de serviço, pode criar uma nova conta de serviço com o mesmo nome, revogar todas as funções da conta de serviço eliminada e conceder as mesmas funções à nova conta de serviço. Para ver detalhes, consulte o artigo Políticas com responsáveis eliminados.

Encontre o ID numérico de uma conta de serviço eliminada

Quando anula a eliminação de uma conta de serviço, tem de indicar o respetivo ID numérico. O ID numérico é um número de 21 dígitos, como 123456789012345678901, que identifica exclusivamente a conta de serviço. Por exemplo, se eliminar 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 conta de serviço têm IDs numéricos diferentes.

Se souber que uma associação numa política de permissão inclui a conta de serviço eliminada, pode obter a política de permissão e, em seguida, encontrar o ID numérico na política de permissão. O ID numérico é anexado ao nome da conta de serviço eliminada. Por exemplo, nesta política de autorização, o ID numérico da conta de serviço eliminada é 123456789012345678901:

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

Os IDs numéricos só são anexados aos nomes dos diretores eliminados.

Em alternativa, pode pesquisar nos registos de auditoria a DeleteServiceAccountoperação que eliminou a conta de serviço:

  1. Na Trusted Cloud consola, aceda à página Explorador de registos.

    Aceda ao Explorador de registos

  2. No editor de consultas, introduza a seguinte consulta, substituindo SERVICE_ACCOUNT_EMAIL pelo endereço de email da sua conta de serviço (por exemplo, my-service-account@project-id.s3ns-system.iam.gserviceaccount.com):

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. Se a conta de serviço foi eliminada há mais de uma hora, clique em schedule Última hora, selecione um período mais longo na lista pendente e, de seguida, clique em Aplicar.

  4. Clique em Executar consulta. O Logs Explorer apresenta as DeleteServiceAccountoperações que afetaram as contas de serviço com o nome que especificou.

  5. Encontre e anote o ID numérico da conta de serviço eliminada através de uma das seguintes ações:

    • Se os resultados da pesquisa incluírem apenas uma operação DeleteServiceAccount, encontre o ID numérico no campo ID único do painel Campos de registo.

    • Se os resultados da pesquisa mostrarem mais do que um registo, faça o seguinte:

      1. Encontre a entrada de registo correta. Para encontrar a entrada de registo correta, clique na seta do expansor junto a uma entrada de registo. Reveja os detalhes da entrada do registo e determine se a entrada do registo mostra a operação que quer anular. Repita este processo até encontrar a entrada de registo correta.

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

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

Anule a eliminação da conta de serviço através do ID numérico

Depois de encontrar o ID numérico da conta de serviço eliminada, pode tentar restaurar a conta de serviço.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Execute o comando gcloud beta iam service-accounts undelete para anular a eliminação de uma conta de serviço.

    Comando:

    gcloud beta iam service-accounts undelete ACCOUNT_ID

    Saída:

    restoredAccount:
        email: SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
        etag: BwWWE7zpApg=
        name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
        oauth2ClientId: '123456789012345678901'
        projectId: PROJECT_ID
        uniqueId: 'ACCOUNT_ID'
  3. REST

    O método serviceAccounts.undelete restaura uma conta de serviço eliminada.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos 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 o seu pedido, expanda uma destas opções:

    Se for possível anular a eliminação da conta, recebe um código de resposta 200 OK com detalhes sobre a conta de serviço restaurada, como o seguinte:

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

O que se segue?