Borra y recupera cuentas de servicio

En esta página, se explica cómo borrar y recuperar cuentas de servicio mediante la API de Identity and Access Management (IAM), la consola de Google Cloud y la herramienta de línea de comandos de gcloud.

Antes de comenzar

  • Enable the IAM API.

    Enable the API

  • Configura la autenticación.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google 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.

    C++

    Para usar las muestras de C++ de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    C#

    Para usar las muestras de .NET de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    Go

    Para usar las muestras de Go de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    Java

    Para usar las muestras de Java de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    Python

    Para usar las muestras de Python de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    REST

    Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

  • Comprende las cuentas de servicio de IAM

Funciones obligatorias

Para obtener los permisos que necesitas para borrar y recuperar cuentas de servicio, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:

Si quieres obtener más información para otorgar roles, consulta Administra el acceso.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Para obtener más información sobre estas funciones, consulta Funciones de cuentas de servicio.

Las funciones básicas de IAM también contienen permisos para administrar cuentas de servicio. No deberías otorgar funciones básicas en un entorno de producción, pero puedes otorgarlas en un entorno de desarrollo o de prueba.

Borra una cuenta de servicio

Cuando borras una cuenta de servicio, las aplicaciones ya no tendrán acceso a los recursos de Google Cloud a través de esa cuenta. Si borras las cuentas de servicio predeterminadas de App Engine y Compute Engine, las aplicaciones de App Engine y las instancias de VM de Compute Engine que usan esas cuentas de servicio ya no tendrán acceso a los recursos del proyecto.

Borra las cuentas de servicio con cuidado. Asegúrate de que tus aplicaciones importantes ya no usen la cuenta de servicio antes de borrarla. Si no estás seguro de si se está usando una cuenta de servicio, te recomendamos que inhabilites la cuenta de servicio en lugar de borrarla. Las cuentas de servicio inhabilitadas se pueden volver a habilitar si aún son necesarias.

Si deseas restablecer una cuenta de servicio borrada, puedes recuperarla, si pasaron 30 días o menos desde que borraste la cuenta de servicio. Después de 30 días, IAM quitará la cuenta de servicio de forma permanente. Google Cloud no puede recuperar la cuenta de servicio después de que se quita de forma permanente, incluso si presentas una solicitud de asistencia.

Para reducir aún más el riesgo de borrar una cuenta de servicio necesaria, también puedes habilitar las recomendaciones de riesgos de cambios. Las recomendaciones de riesgos de cambios generan advertencias cuando intentas borrar cuentas de servicio que Google Cloud identificó como importantes.

Si borras una cuenta de servicio y, luego, creas una nueva con el mismo nombre, la cuenta nueva se trata como una identidad independiente. No hereda las funciones otorgadas a la cuenta de servicio que se borró. En cambio, cuando borras una cuenta de servicio y, luego, la recuperas, la identidad de la cuenta de servicio no cambia y la cuenta de servicio conserva sus funciones.

Cuando se borra una cuenta de servicio, sus vinculaciones de roles no se quitan de inmediato, sino que se borran definitivamente del sistema de manera automática después de un máximo de 60 días. Hasta ese momento, la cuenta de servicio aparecerá en las vinculaciones de roles con un prefijo deleted: y un sufijo ?uid=NUMERIC_ID, en el que NUMERIC_ID es un ID numérico único de la cuenta de servicio.

Las cuentas de servicio borradas no se toman en cuenta en la cuota de la cuenta de servicio.

Consola

  1. En la consola de Google Cloud, ve a la página Cuentas de servicio.

    Ir a Cuentas de servicio

  2. Selecciona un proyecto

  3. Selecciona la cuenta de servicio que deseas borrar y, luego, haz clic en Borrar .

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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. Ejecuta el comando gcloud iam service-accounts delete para borrar una cuenta de servicio.

    Comando:

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

    Resultado:

    Deleted service account SA_NAME@PROJECT_ID.iam.gserviceaccount.com

C++

Para obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Antes de comenzar.

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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Antes de comenzar.


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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Antes de comenzar.

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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Java.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Antes de comenzar.

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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Antes de comenzar.

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

Mediante el método serviceAccounts.delete, se borra una cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
  • SA_ID: El ID de la cuenta de servicio. Puede ser la dirección de correo electrónico de la cuenta de servicio con el formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com o el ID numérico único de la cuenta de servicio.

Método HTTP y URL:

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

Para enviar tu solicitud, expande una de estas opciones:

Si se ejecuta correctamente, el cuerpo de la respuesta estará vacío.

Recupera una cuenta de servicio

En algunos casos, puedes usar el comando undelete para recuperar una cuenta de servicio borrada. Por lo general, puedes recuperar una cuenta de servicio borrada si cumple con los criterios siguientes:

  • La cuenta de servicio se borró hace menos de 30 días.

    Después de 30 días, IAM quitará la cuenta de servicio de forma permanente. Google Cloud no puede recuperar la cuenta de servicio después de que se quita de forma permanente, incluso si presentas una solicitud de asistencia.

  • No existe una cuenta de servicio con el mismo nombre que la cuenta de servicio borrada.

    Por ejemplo, supongamos que borras la cuenta de servicio my-service-account@project-id.iam.gserviceaccount.com por accidente. Aún necesitas una cuenta de servicio con ese nombre, por lo que debes crear una cuenta de servicio nueva con el mismo nombre, my-service-account@project-id.iam.gserviceaccount.com.

    La cuenta de servicio nueva no hereda los permisos de la cuenta de servicio que se borró. En efecto, es completamente independiente de la cuenta de servicio que se borró. Sin embargo, no puedes recuperar la cuenta de servicio original, ya que la cuenta de servicio nueva tiene el mismo nombre.

    Para solucionar este problema, borra la cuenta de servicio nueva y, luego, intenta recuperar la cuenta original.

Si no puedes recuperar la cuenta de servicio, puedes crear una nueva con el mismo nombre. Revoca todas las funciones de la cuenta de servicio borrada y otorga las mismas funciones a la cuenta de servicio nueva. Para obtener más información, consulta Políticas con principales borrados.

Busca el ID numérico de una cuenta de servicio borrada

Cuando recuperas una cuenta de servicio, debes proporcionar su ID numérico. El ID numérico es un número de 21 dígitos, como 123456789012345678901, que identifica de forma única la cuenta de servicio. Por ejemplo, si borras una cuenta de servicio y, luego, creas una nueva con el mismo nombre, la original y la nueva tendrán ID numéricos diferentes.

Si sabes que una vinculación en una política de permisos incluye a la cuenta de servicio borrada, puedes obtener la política de permisos y, luego, buscar el ID numérico en la política de permisos. El ID numérico se agrega al nombre de la cuenta de servicio borrada. Por ejemplo, en esta política de permisos, el ID numérico de la cuenta de servicio borrada es 123456789012345678901:

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

Los ID numéricos solo se agregan a los nombres de las principales borrados.

Como alternativa, puedes buscar en tus registros de auditoría la operación DeleteServiceAccount que borró la cuenta de servicio:

  1. En la consola de Google Cloud, ve a la página Explorador de registros.

    Ir al Explorador de registros

  2. En el editor de consultas, ingresa la siguiente consulta y reemplaza SERVICE_ACCOUNT_EMAIL por la dirección de correo electrónico de la cuenta de servicio (por ejemplo, my-service-account@project-id.iam.gserviceaccount.com):

    resource.type="service_account"
    resource.labels.email_id="SERVICE_ACCOUNT_EMAIL"
    "DeleteServiceAccount"
    
  3. Si la cuenta de servicio se borró hace más de una hora, haz clic en schedule Última hora, selecciona un período de tiempo más largo de la lista desplegable y, luego, haz clic en Aplicar.

  4. Haga clic en Run query. El Explorador de registros muestra las operaciones DeleteServiceAccount que afectaron a las cuentas de servicio con el nombre que especificaste.

  5. Busca y anota el ID numérico de la cuenta de servicio borrada mediante una de las siguientes opciones:

    • Si los resultados de la búsqueda incluyen solo una operación DeleteServiceAccount, busca el ID numérico en el campo ID único del panel Campos de registros.

    • Si los resultados de la búsqueda muestran más de un registro, haz lo siguiente:

      1. Busca la entrada de registro correcta. Para encontrarla, haz clic en la flecha de expansión junto a una entrada de registro. Revisa los detalles de la entrada de registro y determina si muestra la operación que quieres deshacer. Repite este proceso hasta que encuentres la entrada de registro correcta.

      2. En la entrada de registro correcta, busca el ID numérico de la cuenta de servicio. Para ubicar el ID numérico, expande el campo protoPayload de la entrada de registro y, luego, busca el campo resourceName.

        El ID numérico es todo lo que se encuentra después de serviceAccounts en el campo resourceName.

Recupera la cuenta de servicio por ID numérico

Después de encontrar el ID numérico de la cuenta de servicio borrada, puedes intentar recuperar la cuenta de servicio.

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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. Ejecuta el comando gcloud beta iam service-accounts undelete para recuperar una cuenta de servicio.

    Comando:

    gcloud beta iam service-accounts undelete ACCOUNT_ID

    Resultado:

    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

Mediante el método serviceAccounts.undelete, se restablece una cuenta de servicio borrada.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud Los ID de proyecto son strings alfanuméricas, como my-project.
  • SA_NUMERIC_ID: Es el ID numérico único de la cuenta de servicio.

Método HTTP y URL:

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

Para enviar tu solicitud, expande una de estas opciones:

Si la cuenta se puede recuperar, recibirás un código de respuesta 200 OK con detalles sobre la cuenta de servicio restablecida, como se muestra a continuación:

{
  "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"
  }
}

¿Qué sigue?

Pruébalo tú mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Empezar gratis