Eliminar y restaurar cuentas de servicio

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

Antes de empezar

  • Enable the IAM API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    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 .NET muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

    C++

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

    Go

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

    Java

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

    Python

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación Google Cloud .

    REST

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

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

  • Información sobre las cuentas de servicio de IAM

Roles obligatorios

Para obtener los permisos que necesitas para eliminar y restaurar cuentas de servicio, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto:

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Para obtener más información sobre estos roles, consulta Roles de cuentas de servicio.

Los roles básicos de gestión de identidades y accesos también contienen permisos para gestionar cuentas de servicio. No debes conceder roles básicos en un entorno de producción, pero sí puedes hacerlo en un entorno de desarrollo o de pruebas.

Eliminar una cuenta de servicio

Cuando eliminas una cuenta de servicio, las aplicaciones dejan de tener acceso a los recursos deGoogle Cloud a través de esa cuenta. Si eliminas 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 usen esas cuentas de servicio ya no tendrán acceso a los recursos del proyecto.

Elimina las cuentas de servicio con precaución. Asegúrate de que tus aplicaciones críticas ya no usen una cuenta de servicio antes de eliminarla. Si no sabes si se está usando una cuenta de servicio, Google recomienda inhabilitarla en lugar de eliminarla. Las cuentas de servicio inhabilitadas se pueden volver a habilitar si siguen siendo necesarias.

Si quieres restaurar una cuenta de servicio eliminada, puedes recuperarla si no han pasado más de 30 días desde que la eliminaste. Al cabo de 30 días, IAM elimina permanentemente la cuenta de servicio. Google Cloud No podrás recuperar la cuenta de servicio una vez que se haya eliminado permanentemente, aunque envíes una solicitud de asistencia.

Para reducir aún más el riesgo de eliminar una cuenta de servicio necesaria, también puede habilitar las recomendaciones de riesgo de cambio. Las recomendaciones de riesgo de cambios generan advertencias cuando intentas eliminar cuentas de servicio que Google Cloud ha identificado como importantes.

Si eliminas una cuenta de servicio y creas otra con el mismo nombre, la nueva cuenta de servicio se tratará como una identidad independiente y no heredará los roles concedidos a la cuenta de servicio eliminada. Por el contrario, si eliminas una cuenta de servicio y luego la restauras, su identidad no cambia y conserva sus roles.

Cuando se elimina una cuenta de servicio, sus vinculaciones de rol no se quitan inmediatamente, sino que se purgan automáticamente del sistema en un plazo máximo de 60 días. Hasta entonces, la cuenta de servicio aparece en las vinculaciones de roles con el prefijo deleted: y el sufijo ?uid=NUMERIC_ID, donde NUMERIC_ID es un ID numérico único de la cuenta de servicio.

Las cuentas de servicio eliminadas no se tienen en cuenta para la cuota de cuentas de servicio.

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.

  3. Selecciona la cuenta de servicio que quieras eliminar y, a continuación, haz clic en Eliminar .

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 eliminar 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
  3. C++

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

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

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

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

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

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

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

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

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

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

    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

    El método serviceAccounts.delete elimina una cuenta de servicio.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas alfanuméricas, como my-project.
    • SA_ID: el ID de tu cuenta de servicio. Puede ser la dirección de correo 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, despliega una de estas opciones:

    Si la acción se realiza correctamente, el cuerpo de la respuesta estará vacío.

Restaurar una cuenta de servicio

En algunos casos, puedes usar el comando undelete para restaurar una cuenta de servicio eliminada. Por lo general, puedes restaurar una cuenta de servicio eliminada si cumple estos criterios:

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

    Al cabo de 30 días, IAM elimina permanentemente la cuenta de servicio. Google Cloud No puedes recuperar la cuenta de servicio una vez que se haya eliminado permanentemente, aunque envíes una solicitud de asistencia.

  • No hay ninguna cuenta de servicio con el mismo nombre que la cuenta de servicio eliminada.

    Por ejemplo, supongamos que eliminas por error la cuenta de servicio my-service-account@project-id.iam.gserviceaccount.com. Aun así, necesitas una cuenta de servicio con ese nombre, por lo que creas una cuenta de servicio con el mismo nombre, my-service-account@project-id.iam.gserviceaccount.com.

    La nueva cuenta de servicio no hereda los permisos de la cuenta de servicio eliminada. De hecho, es completamente independiente de la cuenta de servicio eliminada. Sin embargo, no puedes restaurar la cuenta de servicio original porque la nueva tiene el mismo nombre.

    Para solucionar este problema, elimina la nueva cuenta de servicio y, a continuación, intenta restaurar la cuenta de servicio original.

Si no puedes restaurar la cuenta de servicio, puedes crear una nueva con el mismo nombre, revocar todos los roles de la cuenta de servicio eliminada y conceder los mismos roles a la nueva cuenta de servicio. Para obtener más información, consulta Políticas con principales eliminados.

Buscar el ID numérico de una cuenta de servicio eliminada

Cuando restauras 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 eliminas una cuenta de servicio y, a continuación, creas otra con el mismo nombre, la cuenta de servicio original y la nueva tendrán IDs numéricos diferentes.

Si sabes que un enlace de una política de permiso incluye la cuenta de servicio eliminada, puedes obtener la política de permiso y, a continuación, buscar el ID numérico en la política de permiso. El ID numérico se añade al nombre de la cuenta de servicio eliminada. Por ejemplo, en esta política de permiso, el ID numérico de la cuenta de servicio eliminada 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 IDs numéricos solo se añaden a los nombres de las entidades eliminadas.

También puedes buscar en tus registros de auditoría la operación DeleteServiceAccount que eliminó la cuenta de servicio:

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

    Ir a Explorador de registros

  2. En el editor de consultas, introduce la siguiente consulta y sustituye SERVICE_ACCOUNT_EMAIL por la dirección de correo de tu 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 eliminó hace más de una hora, haz clic en schedule Última hora, selecciona un periodo más largo en la lista desplegable y, a continuación, haz clic en Aplicar.

  4. Haz clic en Realizar una consulta. El Explorador de registros muestra las DeleteServiceAccount operaciones que han afectado a las cuentas de servicio con el nombre que has especificado.

  5. Busca y anota el ID numérico de la cuenta de servicio eliminada de una de las siguientes formas:

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

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

      1. Busca la entrada de registro correcta. Para encontrar la entrada de registro correcta, haz clic en la flecha de expansión situada 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 localizar el ID numérico, despliega el campo protoPayload de la entrada de registro y busca el campo resourceName.

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

Restaurar la cuenta de servicio por ID numérico

Una vez que hayas encontrado el ID numérico de la cuenta de servicio eliminada, puedes intentar restaurarla.

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 restaurar 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'
  3. REST

    El método serviceAccounts.undelete restaura una cuenta de servicio eliminada.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas alfanuméricas, como my-project.
    • SA_NUMERIC_ID: 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, despliega una de estas opciones:

    Si se puede restaurar la cuenta, recibirás un código de respuesta 200 OK con detalles sobre la cuenta de servicio restaurada, como los siguientes:

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

Siguientes pasos

Pruébalo

Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.

Empezar gratis