Borra y recupera cuentas de servicio

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

Antes de comenzar

Roles requeridos

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:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante 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 deTrusted Cloud by S3NS a través de esa cuenta. Si borras la cuenta de servicio predeterminada de Compute Engine, las instancias de VM de Compute Engine que usan esa cuenta 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. Trusted 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 Trusted 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.

Console

  1. En la consola de Trusted 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 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. Ejecuta el comando gcloud iam service-accounts delete para borrar una cuenta de servicio.

    Comando:

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

    Resultado:

    Deleted service account SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
  3. 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.

    Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN 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 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.

    Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN 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 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.

    Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN 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 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.

    Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN 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 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.

    Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN 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

    A través del 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 de tu proyecto de Trusted Cloud . Los IDs de proyecto son cadenas 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.s3ns-system.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. Trusted 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.s3ns-system.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.s3ns-system.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.s3ns-system.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 Trusted 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.s3ns-system.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 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. 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.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

    A través del 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 de tu proyecto de Trusted Cloud . Los IDs de proyecto son cadenas 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.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"
      }
    }
    

¿Qué sigue?