Inhabilitar y habilitar cuentas de servicio

En esta página se explica cómo inhabilitar y habilitar cuentas de servicio mediante la API Identity and Access Management (IAM), la consola de Google Cloud y la CLI de gcloud. Cloud de Confiance

Antes de empezar

Roles obligatorios

Para obtener los permisos que necesitas para gestionar cuentas de servicio, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de cuentas de servicio (roles/iam.serviceAccountAdmin) 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 este rol, 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.

Inhabilitar una cuenta de servicio

Al igual que cuando se elimina una cuenta de servicio, cuando se inhabilita una cuenta de servicio, las aplicaciones ya no tienen acceso a los recursos de Cloud de Confiance a través de esa cuenta de servicio. Si inhabilitas la cuenta de servicio predeterminada de Compute Engine, las instancias ya no tendrán acceso a los recursos del proyecto. Si intentas inhabilitar una cuenta de servicio que ya está inhabilitada, no tendrá ningún efecto.

A diferencia de las cuentas de servicio eliminadas, las cuentas de servicio inhabilitadas se pueden volver a habilitar fácilmente cuando sea necesario. Te recomendamos que inhabilite una cuenta de servicio antes de eliminarla para asegurarse de que ninguna aplicación crítica la esté usando.

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.

  3. Haga clic en el nombre de la cuenta de servicio que quiera inhabilitar.

  4. En Estado de la cuenta de servicio, haz clic en Inhabilitar cuenta de servicio y, a continuación, en Inhabilitar para confirmar el cambio.

gcloud

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance 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 disable para inhabilitar una cuenta de servicio.

    Comando:

    gcloud iam service-accounts disable SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com

    Resultado:

    Disabled service account SA_NAME@PROJECT_ID.s3ns.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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::DisableServiceAccountRequest request;
      request.set_name(name);
      auto response = client.DisableServiceAccount(request);
      if (!response.ok()) throw std::runtime_error(response.message());
      std::cout << "ServiceAccount successfully disabled.\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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class ServiceAccounts
    {
        public static void DisableServiceAccount(string email)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var request = new DisableServiceAccountRequest();
    
            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Disable(request, resource).Execute();
            Console.WriteLine("Disabled 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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // disableServiceAccount disables a service account.
    func disableServiceAccount(w io.Writer, email string) error {
    	// email:= service-account@your-project.iam.gserviceaccount.com
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	request := &iam.DisableServiceAccountRequest{}
    	_, err = service.Projects.ServiceAccounts.Disable("projects/-/serviceAccounts/"+email, request).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Disable: %w", err)
    	}
    	fmt.Fprintf(w, "Disabled 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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.DisableServiceAccountRequest;
    import java.io.IOException;
    
    public class DisableServiceAccount {
    
      public static void main(String[] args) throws IOException {
        // TODO(Developer): Replace the below variables before running.
        String projectId = "your-project-id";
        String serviceAccountName = "your-service-account-name";
    
        disableServiceAccount(projectId, serviceAccountName);
      }
    
      // Disables a service account.
      public static void disableServiceAccount(String projectId, String accountName)
              throws IOException {
        String email = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
    
        // 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 iamClient = IAMClient.create()) {
          iamClient.disableServiceAccount(DisableServiceAccountRequest.newBuilder()
                  .setName(String.format("projects/%s/serviceAccounts/%s", projectId, email))
                  .build());
    
          System.out.println("Disabled service account: " + accountName);
        }
      }
    }

    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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    import time
    
    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def disable_service_account(project_id: str, account: str) -> types.ServiceAccount:
        """Disables 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.DisableServiceAccountRequest()
        name = f"projects/{project_id}/serviceAccounts/{account}"
        request.name = name
    
        iam_admin_client.disable_service_account(request=request)
        time.sleep(5)  # waiting to make sure changes applied
    
        get_request = types.GetServiceAccountRequest()
        get_request.name = name
    
        service_account = iam_admin_client.get_service_account(request=get_request)
        if service_account.disabled:
            print(f"Disabled service account: {account}")
        return service_account

    REST

    El método serviceAccounts.disable inhabilita inmediatamente una cuenta de servicio.

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

    • PROJECT_ID: tu ID de proyecto. Cloud de Confiance 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.s3ns.iam.gserviceaccount.com o 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_ID:disable

    Para enviar tu solicitud, despliega una de estas opciones:

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

Habilitar una cuenta de servicio

Después de habilitar una cuenta de servicio inhabilitada, las aplicaciones volverán a tener acceso a los recursos deCloud de Confiance a través de esa cuenta de servicio.

Puedes habilitar una cuenta de servicio inhabilitada cuando lo necesites. Si intentas habilitar una cuenta de servicio que ya está habilitada, no tendrá ningún efecto.

Consola

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

    Ir a Cuentas de servicio

  2. Selecciona un proyecto.

  3. Haz clic en el nombre de la cuenta de servicio que quieras habilitar.

  4. En Estado de la cuenta de servicio, haz clic en Habilitar cuenta de servicio y, a continuación, en Habilitar para confirmar el cambio.

gcloud

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance 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 enable para habilitar una cuenta de servicio.

    Comando:

    gcloud iam service-accounts enable SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com

    Resultado:

    Enabled service account SA_NAME@PROJECT_ID.s3ns.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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::EnableServiceAccountRequest request;
      request.set_name(name);
      auto response = client.EnableServiceAccount(request);
      if (!response.ok()) throw std::runtime_error(response.message());
      std::cout << "ServiceAccount successfully enabled.\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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class ServiceAccounts
    {
        public static void EnableServiceAccount(string email)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var request = new EnableServiceAccountRequest();
    
            string resource = "projects/-/serviceAccounts/" + email;
            service.Projects.ServiceAccounts.Enable(request, resource).Execute();
            Console.WriteLine("Enabled 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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // enableServiceAccount enables a service account.
    func enableServiceAccount(w io.Writer, email string) error {
    	// email:= service-account@your-project.iam.gserviceaccount.com
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	request := &iam.EnableServiceAccountRequest{}
    	_, err = service.Projects.ServiceAccounts.Enable("projects/-/serviceAccounts/"+email, request).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.ServiceAccounts.Enable: %w", err)
    	}
    	fmt.Fprintf(w, "Enabled 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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.EnableServiceAccountRequest;
    import java.io.IOException;
    
    
    public class EnableServiceAccount {
    
      public static void main(String[] args) throws IOException {
        // TODO(Developer): Replace the below variables before running.
        String projectId = "your-project-id";
        String serviceAccountName = "your-service-account-name";
    
        enableServiceAccount(projectId, serviceAccountName);
      }
    
      // Enables a service account.
      public static void enableServiceAccount(String projectId, String accountName)
              throws IOException {
        String email = String.format("%s@%s.iam.gserviceaccount.com", accountName, projectId);
    
        // 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 iamClient = IAMClient.create()) {
          iamClient.enableServiceAccount(EnableServiceAccountRequest.newBuilder()
                  .setName(String.format("projects/%s/serviceAccounts/%s", projectId, email))
                  .build());
    
          System.out.println("Enabled service account: " + email);
        }
      }
    }

    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.

    Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

    import time
    
    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def enable_service_account(project_id: str, account: str) -> types.ServiceAccount:
        """Enables 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.EnableServiceAccountRequest()
        name = f"projects/{project_id}/serviceAccounts/{account}"
        request.name = name
    
        iam_admin_client.enable_service_account(request=request)
        time.sleep(5)  # waiting to make sure changes applied
    
        get_request = types.GetServiceAccountRequest()
        get_request.name = name
    
        service_account = iam_admin_client.get_service_account(request=get_request)
        if not service_account.disabled:
            print(f"Enabled service account: {account}")
        return service_account

    REST

    El método serviceAccounts.enable habilita una cuenta de servicio que se había inhabilitado.

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

    • PROJECT_ID: tu ID de proyecto. Cloud de Confiance 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.s3ns.iam.gserviceaccount.com o 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_ID:enable

    Para enviar tu solicitud, despliega una de estas opciones:

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

Siguientes pasos