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. Trusted Cloud

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 Trusted Cloud 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 Trusted Cloud 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 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 disable para inhabilitar una cuenta de servicio.

    Comando:

    gcloud iam service-accounts disable SA_NAME@PROJECT_ID.

    Resultado:

    Disabled service account SA_NAME@PROJECT_ID.
  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());
      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.

    
    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.

    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.

    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.

    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. Trusted 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. 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 deTrusted Cloud 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 Trusted Cloud 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 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 enable para habilitar una cuenta de servicio.

    Comando:

    gcloud iam service-accounts enable SA_NAME@PROJECT_ID.

    Resultado:

    Enabled service account SA_NAME@PROJECT_ID.
  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());
      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.

    
    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.

    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.

    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.

    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. Trusted 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. 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