Crear cuentas de servicio

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

De forma predeterminada, cada proyecto puede tener hasta 100 cuentas de servicio que controlen el acceso a tus recursos. Si hace falta, puedes solicitar un aumento de la cuota. Más información sobre las cuotas y los límites

Antes de empezar

Roles obligatorios

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

Si quieres conceder acceso a tu proyecto a las cuentas de servicio recién creadas, también necesitas el rol Administrador de gestión de identidades y accesos de proyectos (roles/resourcemanager.projectIamAdmin).

Crear una cuenta de servicio

Cuando crees una cuenta de servicio, debes proporcionar un ID alfanumérico (SERVICE_ACCOUNT_NAME en los ejemplos de abajo), como my-service-account. El ID debe tener entre 6 y 30 caracteres y puede contener caracteres alfanuméricos en minúscula y guiones. Una vez que hayas creado una cuenta de servicio, no podrás cambiar su nombre.

El nombre de la cuenta de servicio aparece en la dirección de correo que se proporciona durante la creación, con el formato SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com.

Cada cuenta de servicio también tiene un ID numérico único y permanente que se genera automáticamente.

También debes proporcionar la siguiente información al crear una cuenta de servicio:

  • DESCRIPTION es una descripción opcional de la cuenta de servicio.
  • DISPLAY_NAME es un nombre descriptivo de la cuenta de servicio.
  • PROJECT_ID es el ID de tu Trusted Cloud by S3NS proyecto.

Después de crear una cuenta de servicio, es posible que tengas que esperar 60 segundos o más para poder usarla. Este comportamiento se produce porque las operaciones de lectura son coherentes con el tiempo. Puede tardar un tiempo en que la nueva cuenta de servicio se haga visible. Si intentas leer o usar una cuenta de servicio inmediatamente después de crearla y recibes un error, puedes volver a intentar la solicitud con un tiempo de espera exponencial.

Consola

  1. En la Trusted Cloud consola, ve a la página Crear cuenta de servicio.
  2. Selecciona un Trusted Cloud proyecto.
  3. Escribe el nombre de la cuenta de servicio, que será el que se muestre en la Trusted Cloud consola.

    La consola Trusted Cloud genera un ID de cuenta de servicio basado en este nombre. Edita el ID si es necesario. No podrás cambiarlo más adelante.

  4. Opcional: Escribe una descripción de la cuenta de servicio.
  5. Si no quieres configurar los controles de acceso ahora, haz clic en Hecho para terminar de crear la cuenta de servicio. Para configurar los controles de acceso ahora, haga clic en Crear y continuar y siga con el paso siguiente.
  6. Opcional: Elige uno o varios roles de gestión de identidades y accesos que quieras asignar a la cuenta de servicio en el proyecto.
  7. Cuando hayas terminado de añadir roles, haz clic en Continuar.
  8. Opcional: En el campo Rol de usuarios de la cuenta de servicio, añade los miembros que necesiten asociar la cuenta de servicio a otros recursos.
  9. Opcional: En el campo Rol de administradores de la cuenta de servicio, añade los miembros que necesiten gestionar la cuenta de servicio.
  10. Haz clic en Hecho para terminar de crear 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. Para crear la cuenta de servicio, ejecuta el comando gcloud iam service-accounts create:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --description="DESCRIPTION" \
      --display-name="DISPLAY_NAME"

    Sustituye los siguientes valores:

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio

    • DESCRIPTION: descripción opcional de la cuenta de servicio

    • DISPLAY_NAME: un nombre de cuenta de servicio que se mostrará en la consola Trusted Cloud

  3. Opcional: Para conceder a tu cuenta de servicio un rol de gestión de identidades y accesos en tu proyecto, ejecuta el comando gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com" \
      --role="ROLE_NAME"

    Sustituye los siguientes valores:

    • PROJECT_ID: el ID del proyecto

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio

    • ROLE_NAME: un nombre de rol, como roles/compute.osLogin

  4. Opcional: Para permitir que los usuarios asocien la cuenta de servicio a otros recursos, ejecuta el comando gcloud iam service-accounts add-iam-policy-binding para asignar a un usuario el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en la cuenta de servicio:

    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
      --member="user:USER_EMAIL" \
      --role="roles/iam.serviceAccountUser"

    Sustituye los siguientes valores:

    • PROJECT_ID: el ID del proyecto

    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio

    • USER_EMAIL: la dirección de correo del usuario

  5. 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& project_id, std::string const& account_id,
       std::string const& display_name, std::string const& description) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::ServiceAccount service_account;
      service_account.set_display_name(display_name);
      service_account.set_description(description);
      auto response = client.CreateServiceAccount("projects/" + project_id,
                                                  account_id, service_account);
      if (!response) throw std::move(response).status();
      std::cout << "ServiceAccount successfully created: "
                << response->DebugString() << "\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 ServiceAccount CreateServiceAccount(string projectId,
            string name, string displayName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var request = new CreateServiceAccountRequest
            {
                AccountId = name,
                ServiceAccount = new ServiceAccount
                {
                    DisplayName = displayName
                }
            };
            var serviceAccount = service.Projects.ServiceAccounts.Create(
                request, "projects/" + projectId).Execute();
            Console.WriteLine("Created service account: " + serviceAccount.Email);
            return serviceAccount;
        }
    }
    

    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"
    )
    
    // createServiceAccount creates a service account.
    func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	request := &iam.CreateServiceAccountRequest{
    		AccountId: name,
    		ServiceAccount: &iam.ServiceAccount{
    			DisplayName: displayName,
    		},
    	}
    	account, err := service.Projects.ServiceAccounts.Create("projects/"+projectID, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.ServiceAccounts.Create: %w", err)
    	}
    	fmt.Fprintf(w, "Created service account: %v", account)
    	return account, 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.CreateServiceAccountRequest;
    import com.google.iam.admin.v1.ProjectName;
    import com.google.iam.admin.v1.ServiceAccount;
    import java.io.IOException;
    
    public class CreateServiceAccount {
      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";
    
        createServiceAccount(projectId, serviceAccountName);
      }
    
      // Creates a service account.
      public static ServiceAccount createServiceAccount(String projectId, String serviceAccountName)
              throws IOException {
        ServiceAccount serviceAccount = ServiceAccount
                .newBuilder()
                .setDisplayName("your-display-name")
                .build();
        CreateServiceAccountRequest request = CreateServiceAccountRequest.newBuilder()
                .setName(ProjectName.of(projectId).toString())
                .setAccountId(serviceAccountName)
                .setServiceAccount(serviceAccount)
                .build();
        // 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()) {
          serviceAccount = iamClient.createServiceAccount(request);
          System.out.println("Created service account: " + serviceAccount.getEmail());
        }
        return serviceAccount;
      }
    }

    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.

    from typing import Optional
    
    from google.cloud import iam_admin_v1
    from google.cloud.iam_admin_v1 import types
    
    
    def create_service_account(
        project_id: str, account_id: str, display_name: Optional[str] = None
    ) -> types.ServiceAccount:
        """Creates a service account.
    
        project_id: ID or number of the Google Cloud project you want to use.
        account_id: ID which will be unique identifier of the service account
        display_name (optional): human-readable name, which will be assigned
            to the service account
    
        return: ServiceAccount
        """
    
        iam_admin_client = iam_admin_v1.IAMClient()
        request = types.CreateServiceAccountRequest()
    
        request.account_id = account_id
        request.name = f"projects/{project_id}"
    
        service_account = types.ServiceAccount()
        service_account.display_name = display_name
        request.service_account = service_account
    
        account = iam_admin_client.create_service_account(request=request)
    
        print(f"Created a service account: {account.email}")
        return account

    REST

    El método serviceAccounts.create crea 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_NAME: ID alfanumérico de tu cuenta de servicio. El nombre debe tener entre 6 y 30 caracteres, y puede contener caracteres alfanuméricos en minúscula y guiones.
    • SA_DESCRIPTION: opcional. Una descripción de la cuenta de servicio.
    • SA_DISPLAY_NAME: nombre legible para humanos de la cuenta de servicio.

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    {
      "accountId": "SA_NAME",
      "serviceAccount": {
        "description": "SA_DESCRIPTION",
        "displayName": "SA_DISPLAY_NAME"
      }
    }
    

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

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

Después de crear una cuenta de servicio, concédele uno o varios roles para que pueda actuar en tu nombre.

Además, si la cuenta de servicio necesita acceder a recursos de otros proyectos, normalmente debes habilitar las APIs de esos recursos en el proyecto en el que has creado la cuenta de servicio.

Siguientes pasos