Criar contas de serviço

Nesta página, explicamos como criar contas de serviço usando a API Identity and Access Management (IAM), o console Trusted Cloud e a ferramenta de linha de comando gcloud.

Por padrão, cada projeto pode ter até 100 contas de serviço que controlam o acesso aos seus recursos. Se necessário, é possível solicitar um aumento de cota. Saiba mais sobre cotas e limites.

Antes de começar

Funções exigidas

Para conseguir as permissões necessárias para criar contas de serviço, peça ao administrador para conceder a você o papel Criar contas de serviço (roles/iam.serviceAccountCreator) do IAM no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Se você quer conceder acesso às contas de serviço recém-criadas ao projeto, também precisa do papel de administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin).

Crie uma conta de serviço

Ao criar uma conta de serviço, é necessário fornecer um código alfanumérico (SERVICE_ACCOUNT_NAME nos exemplos abaixo), como my-service-account. O código precisa ter entre 6 e 30 caracteres e pode conter caracteres alfanuméricos minúsculos e traços. Depois de criar uma conta de serviço, não é possível alterar o nome dela.

O nome da conta de serviço aparece no endereço de e-mail provisionado durante a criação, no formato SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com.

Cada conta de serviço também tem um código numérico exclusivo e permanente, que é gerado automaticamente.

Você também fornece as seguintes informações ao criar uma conta de serviço:

  • DESCRIPTION é uma descrição opcional da conta de serviço.
  • DISPLAY_NAME é um nome intuitivo para a conta de serviço.
  • PROJECT_ID é o ID do projeto Trusted Cloud by S3NS .

Depois de criar uma conta de serviço, talvez seja necessário aguardar 60 segundos ou mais para usar essa conta. Esse comportamento ocorre porque as operações de leitura têm consistência eventual e pode levar algum tempo para a nova conta de serviço ficar visível. Se você tentar ler ou usar uma conta de serviço imediatamente depois de criá-la e receber um erro, será possível repetir a solicitação com espera exponencial.

Console

  1. No console Trusted Cloud , acesse a página Criar conta de serviço.
  2. Selecionar um projeto do Trusted Cloud
  3. Insira um nome de conta de serviço a ser exibido no console Trusted Cloud .

    O console Trusted Cloud gerará um ID de conta de serviço com base nesse nome. Edite o ID se for necessário. Não será possível alterar o ID depois.

  4. Opcional: digite uma descrição da conta de serviço.
  5. Se você não quiser definir controles de acesso agora, clique em Concluído para finalizar a criação da conta de serviço. Para definir os controles de acesso agora, clique em Criar e continuar e avance para a próxima etapa.
  6. Opcional: escolha um ou mais papéis do IAM para conceder à conta de serviço no projeto.
  7. Quando você terminar de adicionar papéis, clique em Continuar.
  8. Opcional: no campo Papel de usuários da conta de serviço, adicione participantes que precisam anexar a conta de serviço a outros recursos.
  9. Opcional: no campo Papel de administrador da conta de serviço, adicione membros que precisam gerenciar a conta de serviço.
  10. Clique em Concluído para terminar a criação da conta de serviço.

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 criar a conta de serviço, execute o comando gcloud iam service-accounts create.

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

    Substitua os seguintes valores:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.

    • DESCRIPTION: uma descrição opcional da conta de serviço.

    • DISPLAY_NAME: um nome de conta de serviço a ser exibido no console Trusted Cloud .

  3. Opcional: para conceder à conta de serviço um papel do IAM no projeto, execute o 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"

    Substitua os seguintes valores:

    • PROJECT_ID: o ID do projeto

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.

    • ROLE_NAME: um nome de papel, como roles/compute.osLogin

  4. Opcional: para permitir que os usuários anexem a conta de serviço a outros recursos, execute o comando gcloud iam service-accounts add-iam-policy-binding para conceder a um usuário o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço:

    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"

    Substitua os seguintes valores:

    • PROJECT_ID: o ID do projeto

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.

    • USER_EMAIL: o endereço de e-mail do usuário

  5. C++

    Para saber como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API C++ do IAM.

    Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

    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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API C# do IAM.

    Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

    
    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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API Go do IAM.

    Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

    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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API Java do IAM.

    Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

    
    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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API Python do IAM.

    Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

    Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

    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

    O método serviceAccounts.create cria uma conta de serviço.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Trusted Cloud . Os IDs do projeto são strings alfanuméricas, como my-project.
    • SA_NAME: o ID alfanumérico da sua conta de serviço. Esse nome precisa ter entre 6 e 30 caracteres e pode conter caracteres alfanuméricos minúsculos e traços.
    • SA_DESCRIPTION: opcional. Uma descrição da conta de serviço.
    • SA_DISPLAY_NAME: um nome legível para a conta de serviço.

    Método HTTP e URL:

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

    Corpo JSON da solicitação:

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

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

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

Depois de criar uma conta de serviço, atribua a ela um ou mais papéis para que ela possa atuar em seu nome.

Além disso, se a conta de serviço precisar acessar recursos em outros projetos, geralmente é necessário ativar as APIs desses recursos no projeto em que você criou a conta de serviço.

A seguir