Como criar e gerenciar contas de serviço

Nesta página, explicamos como criar e gerenciar contas de serviço usando a API Cloud Identity and Access Management, o Console do Google Cloud Platform e a ferramenta de linha de comando gcloud.

Ao criar um novo projeto do Cloud, o Google Cloud Platform (GCP) cria automaticamente uma conta de serviço do Compute Engine e uma do App Engine nesse projeto. É possível criar até 98 contas de serviço para o projeto e controlar o acesso aos seus recursos.

Antes de começar

Permissões necessárias

Para permitir que um usuário gerencie contas de serviço, conceda um dos seguintes papéis:

  • Usuário da conta de serviço (roles/iam.serviceAccountUser): concede permissões para receber, listar ou representar uma conta de serviço.
  • Administrador da conta de serviço (roles/iam.serviceAccountAdmin): inclui as permissões de Usuário da conta de serviço e também para criar, atualizar, excluir e definir ou receber a política do Cloud IAM em uma conta de serviço.

Os papéis primários do Cloud IAM também contêm permissões para gerenciar contas de serviço. No entanto, recomendamos a concessão de um dos papéis predefinidos acima para impedir o acesso desnecessário a outros recursos do GCP. Para saber mais sobre esses papéis, consulte a lista de papéis das contas de serviço.

Criar uma conta de serviço

Criar uma conta de serviço é semelhante a adicionar um membro ao projeto, mas essa conta pertence aos aplicativos e não a um usuário final.

Nos exemplos abaixo, [SA-NAME] é o nome da conta de serviço fornecida por você, como my-service-account. Esse é um identificador exclusivo que aparecerá no endereço de e-mail da conta de serviço provisionado durante a criação, como my-service-account@project-id.iam.gserviceaccount.com . Você também o usará para atualizar a conta de serviço com outras APIs. Não é possível alterá-lo depois da criação.

Forneça também os seguintes valores:

  • [SA-DESCRIPTION] é uma descrição opcional para a conta de serviço.
  • [SA-DISPLAY-NAME] é um nome amigável para a conta de serviço.
  • [PROJECT-ID] é o ID do projeto do Google Cloud Platform.

Para criar uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no console do GCP.

    Abrir a página Contas de serviço

  2. Clique em Selecionar um projeto.

  3. Selecione o projeto e clique em Abrir.

  4. Clique em Criar conta de serviço.

  5. Insira o nome da conta de serviço (nome de exibição amigável), uma descrição opcional, selecione o papel que você quer conceder à conta de serviço e clique em Salvar.

COMANDO GCLOUD

Execute o comando gcloud beta iam service-accounts create para criar uma conta de serviço.

Comando:

gcloud beta iam service-accounts create [SA-NAME] \
    --description "[SA-DESCRIPTION]" \
    --display-name "[SA-DISPLAY-NAME]"

A saída é a conta de serviço:

Created service account [SA-NAME].

API REST

Chame serviceAccounts.create() para criar uma conta de serviço.

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts

O corpo da solicitação deve conter as propriedades da conta de serviço.

{
    "accountId": "[SA-NAME]",
    "serviceAccount": {
        "description": "[SA-DESCRIPTION]",
        "displayName": "[SA-DISPLAY-NAME]"
    }
}

Saída:

{
    "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
    "projectId": "PROJECT-ID",
    "uniqueId": "113948692397867021414",
    "email": "SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
    "description": "SA-DESCRIPTION",
    "displayName": "SA-DISPLAY-NAME",
    "etag": "BwUp3rVlzes=",
    "oauth2ClientId": "117249000288840666939"
}

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para C#.


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

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Go.

import (
	"context"
	"fmt"
	"io"

	"golang.org/x/oauth2/google"
	iam "google.golang.org/api/iam/v1"
)

// createServiceAccount creates a service account.
func createServiceAccount(w io.Writer, projectID, name, displayName string) (*iam.ServiceAccount, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Created service account: %v", account)
	return account, nil
}

Java

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM Java.

public ServiceAccount createServiceAccount(String projectId, String name, String displayName)
    throws IOException {

  ServiceAccount serviceAccount = new ServiceAccount();
  serviceAccount.setDisplayName(displayName);
  CreateServiceAccountRequest request = new CreateServiceAccountRequest();
  request.setAccountId(name);
  request.setServiceAccount(serviceAccount);

  serviceAccount =
      service.projects().serviceAccounts().create("projects/" + projectId, request).execute();

  System.out.println("Created service account: " + serviceAccount.getEmail());
  return serviceAccount;
}

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Python.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

def create_service_account(project_id, name, display_name):
    """Creates a service account."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])

    service = googleapiclient.discovery.build(
        'iam', 'v1', credentials=credentials)

    my_service_account = service.projects().serviceAccounts().create(
        name='projects/' + project_id,
        body={
            'accountId': name,
            'serviceAccount': {
                'displayName': display_name
            }
        }).execute()

    print('Created service account: ' + my_service_account['email'])
    return my_service_account

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

Como listar contas de serviço

Ao listar contas de serviço, é possível especificar parâmetros para limitar o número de contas a serem incluídas na resposta. Você pode usar ListServiceAccountsResponse.next_page_token em uma solicitação subsequente para listar as contas de serviço restantes.

Use esse método para auditar contas de serviço e chaves ou criar ferramentas personalizadas para gerenciar contas de serviço.

Para listar contas de serviço, o usuário precisa ter, no mínimo, o papel de Usuário da conta de serviço (roles/iam.serviceAccountUser) ou o papel primário de Leitor (roles/viewer).

Console

  1. Abra a página Contas de serviço no console do GCP.

    Abrir a página "Contas de serviço"

  2. Clique em Selecionar um projeto.

  3. Selecione o projeto e clique em Abrir. Todas as contas de serviço estão listadas na página Contas de serviço.

COMANDO GCLOUD

Execute o comando gcloud iam service-accounts list para listar todas as contas de serviço em um projeto.

Comando:

gcloud iam service-accounts list

A saída é a lista de todas as contas de serviço no projeto:

NAME                    EMAIL
SA-DISPLAY-NAME-1       SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com
SA-DISPLAY-NAME-2       SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com

API REST

Chame o método serviceAccounts.list().

Solicitação:

GET https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts

Saída:

{
    "accounts": [
    {
        "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com",
        "projectId": "PROJECT-ID",
        "uniqueId": "108979773878059201436",
        "email": "SA-NAME-1@PROJECT-ID.iam.gserviceaccount.com",
        "description": "SA-DESCRIPTION-1",
        "displayName": "SA-DISPLAY-NAME-1",
        "etag": "BwUpTsLVUkQ=",
        "oauth2ClientId": "102240834887833340852"
    },
    {
        "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com",
        "projectId": "PROJECT-ID",
        "uniqueId": "108979773878059201436",
        "email": "SA-NAME-2@PROJECT-ID.iam.gserviceaccount.com",
        "description": "SA-DESCRIPTION-2",
        "displayName": "SA-DISPLAY-NAME-2",
        "etag": "BwUpTsLVUkQ=",
        "oauth2ClientId": "102240834887833340852"
    }]
}

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para C#.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class ServiceAccounts
{
    public static IList<ServiceAccount> ListServiceAccounts(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var response = service.Projects.ServiceAccounts.List(
            "projects/" + projectId).Execute();
        foreach (ServiceAccount account in response.Accounts)
        {
            Console.WriteLine("Name: " + account.Name);
            Console.WriteLine("Display Name: " + account.DisplayName);
            Console.WriteLine("Email: " + account.Email);
            Console.WriteLine();
        }
        return response.Accounts;
    }
}

Go

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Go.

import (
	"context"
	"fmt"
	"io"

	"golang.org/x/oauth2/google"
	iam "google.golang.org/api/iam/v1"
)

// listServiceAccounts lists a project's service accounts.
func listServiceAccounts(w io.Writer, projectID string) ([]*iam.ServiceAccount, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	response, err := service.Projects.ServiceAccounts.List("projects/" + projectID).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.List: %v", err)
	}
	for _, account := range response.Accounts {
		fmt.Fprintf(w, "Listing service account: %v\n", account.Name)
	}
	return response.Accounts, nil
}

Java

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM Java.

public List<ServiceAccount> listServiceAccounts(String projectId) throws IOException {

  ListServiceAccountsResponse response =
      service.projects().serviceAccounts().list("projects/" + projectId).execute();
  List<ServiceAccount> serviceAccounts = response.getAccounts();

  for (ServiceAccount account : serviceAccounts) {
    System.out.println("Name: " + account.getName());
    System.out.println("Display Name: " + account.getDisplayName());
    System.out.println("Email: " + account.getEmail());
    System.out.println();
  }
  return serviceAccounts;
}

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Python.

def list_service_accounts(project_id):
    """Lists all service accounts for the current project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])

    service = googleapiclient.discovery.build(
        'iam', 'v1', credentials=credentials)

    service_accounts = service.projects().serviceAccounts().list(
        name='projects/' + project_id).execute()

    for account in service_accounts['accounts']:
        print('Name: ' + account['name'])
        print('Email: ' + account['email'])
        print(' ')
    return service_accounts

Como renomear uma conta de serviço

O nome de exibição (nome amigável) de uma conta de serviço geralmente é usado para capturar informações adicionais sobre a conta de serviço, como o objetivo da conta de serviço ou uma pessoa de contato da conta.

Para renomear uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no console do GCP.

    Abrir a página "Contas de serviço"

  2. Clique em Selecionar um projeto.
  3. Selecione o projeto e clique em Abrir.
  4. Procure a conta de serviço que você quer renomear, clique no botão Mais more_vert nessa linha e clique em Editar.
  5. Digite o novo nome e clique em Salvar.

COMANDO GCLOUD

Execute o comando gcloud beta iam service-accounts update para atualizar uma conta de serviço.

Comando:

gcloud beta iam service-accounts update \
    [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com \
    --description "[UPDATED-SA-DESCRIPTION]" \
    --display-name "[UPDATED-DISPLAY-NAME]"

A saída é a conta de serviço renomeada:

description: Updated description
displayName: Updated display name
name: projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com

API REST

Use o método serviceAccounts.patch().

Solicitação:

PATCH https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com

O corpo da solicitação precisa conter o e-mail da conta de serviço e o novo nome ou descrição de exibição.

{
    "serviceAccount": {
        "email": "[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com",
        "displayName": "[UPDATED-DISPLAY-NAME]",
        "description": "[UPDATED-DESCRIPTION]",
    },
    "updateMask": "displayName,description"
}

Saída:

{
    "name": "projects/PROJECT-ID/serviceAccounts/SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
    "projectId": "PROJECT-ID",
    "uniqueId": "107522985251862639552",
    "email": "SA-NAME@PROJECT-ID.iam.gserviceaccount.com",
    "description": "SA-DESCRIPTION",
    "displayName": "Updated display name",
    "etag": "BwUqLK4bL9U=",
    "oauth2ClientId": "105236325228757713905"
}

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para C#.


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 RenameServiceAccount(string email,
        string newDisplayName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        // First, get a ServiceAccount using List() or Get().
        string resource = "projects/-/serviceAccounts/" + email;
        var serviceAccount = service.Projects.ServiceAccounts.Get(resource)
            .Execute();
        // Then you can update the display name.
        serviceAccount.DisplayName = newDisplayName;
        serviceAccount = service.Projects.ServiceAccounts.Update(
            serviceAccount, resource).Execute();
        Console.WriteLine($"Updated display name for {serviceAccount.Email} " +
            "to: " + serviceAccount.DisplayName);
        return serviceAccount;
    }
}

Go

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Go.

import (
	"context"
	"fmt"
	"io"

	"golang.org/x/oauth2/google"
	iam "google.golang.org/api/iam/v1"
)

// renameServiceAccount renames a service account.
func renameServiceAccount(w io.Writer, email, newDisplayName string) (*iam.ServiceAccount, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	// First, get a ServiceAccount using List() or Get().
	resource := "projects/-/serviceAccounts/" + email
	serviceAccount, err := service.Projects.ServiceAccounts.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.Get: %v", err)
	}
	// Then you can update the display name.
	serviceAccount.DisplayName = newDisplayName
	serviceAccount, err = service.Projects.ServiceAccounts.Update(resource, serviceAccount).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.ServiceAccounts.Update: %v", err)
	}

	fmt.Fprintf(w, "Updated service account: %v", serviceAccount.Email)
	return serviceAccount, nil
}

Java

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM Java.

public ServiceAccount renameServiceAccount(String email, String newDisplayName)
    throws IOException {

  // First, get a service account using List() or Get()
  ServiceAccount serviceAccount =
      service.projects().serviceAccounts().get("projects/-/serviceAccounts/" + email).execute();

  // Then you can update the display name
  serviceAccount.setDisplayName(newDisplayName);
  service.projects().serviceAccounts().update(serviceAccount.getName(), serviceAccount).execute();

  System.out.println(
      "Updated display name for " + serviceAccount.getName() + " to: " + newDisplayName);
  return serviceAccount;
}

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Python.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

def rename_service_account(email, new_display_name):
    """Changes a service account's display name."""

    # First, get a service account using List() or Get()
    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])

    service = googleapiclient.discovery.build(
        'iam', 'v1', credentials=credentials)

    resource = 'projects/-/serviceAccounts/' + email

    my_service_account = service.projects().serviceAccounts().get(
        name=resource).execute()

    # Then you can update the display name
    my_service_account['displayName'] = new_display_name
    my_service_account = service.projects().serviceAccounts().update(
        name=resource, body=my_service_account).execute()

    print('Updated display name for {} to: {}'.format(
        my_service_account['email'], my_service_account['displayName']))
    return my_service_account

Como desativar uma conta de serviço

Semelhante à exclusão de uma conta de serviço, quando você desativa esse tipo de conta, os aplicativos perderão o acesso aos recursos do GCP por meio dessa conta de serviço. Se você desativar as contas de serviço padrão do App Engine e do Compute Engine, as instâncias não terão mais acesso aos recursos no projeto. Se você tentar desativar uma conta de serviço já desativada, nada acontecerá.

Diferente da exclusão de uma conta de serviço, é possível facilmente reativar contas desse tipo quando for necessário. Recomendamos desativar uma conta de serviço antes de excluí-la para garantir que nenhum aplicativo importante esteja usando a conta de serviço.

Para desativar uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

COMANDO GCLOUD

Execute o comando gcloud alpha iam service-accounts disable para desativar uma conta de serviço.

Comando:

gcloud alpha iam service-accounts disable \
  [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com

Saída:

Disabled service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com

API REST

Use o método serviceAccounts.disable().

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com:disable

Como ativar uma conta de serviço

Após ativar uma conta de serviço desativada, os aplicativos poderão acessar novamente os recursos do GCP por meio dessa conta.

É possível ativar uma conta de serviço desativada a qualquer momento. Se você tentar ativar uma conta de serviço já ativada, nada acontecerá.

Para ativar uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

COMANDO GCLOUD

Execute o comando gcloud alpha iam service-accounts enable para ativar uma conta de serviço.

Comando:

gcloud alpha iam service-accounts enable \
  [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com

Saída:

Enabled service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com

API REST

Use o método serviceAccounts.enable().

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com:enable

Como excluir uma conta de serviço

Quando você exclui uma conta de serviço, os aplicativos deixam de ter acesso aos recursos do Google Cloud Platform por meio dessa conta. Se você excluir as contas de serviço padrão do App Engine e do Compute Engine, as instâncias não terão mais acesso aos recursos no projeto.

Tome cuidado ao excluir contas de serviço e, antes de fazer isso, verifique se os aplicativos importantes não estão mais usando essa conta. Caso não tenha certeza se uma conta de serviço está sendo utilizada, recomendamos que você desative a conta de serviço antes de excluí-la. É fácil reativar esse tipo de conta, desde que ela ainda esteja em uso.

Quando uma conta de serviço é excluída, suas vínculações de papel não são removidos imediatamente, eles são limpos automaticamente do sistema após no máximo 60 dias.

Para excluir uma conta de serviço, o usuário precisa ter, no mínimo, o papel de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) ou o papel primário de Editor (roles/editor).

Console

  1. Abra a página Contas de serviço no console do GCP.

    Abrir a página "Contas de serviço"

  2. Clique em Selecionar um projeto.

  3. Selecione o projeto e clique em Abrir.

  4. Selecione as contas de serviço que você quer excluir e clique em Excluir delete.

COMANDO GCLOUD

Execute o comando gcloud iam service-accounts delete para excluir uma conta de serviço.

Comando:

gcloud iam service-accounts delete \
  [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com

Saída:

Deleted service account SA-NAME@PROJECT-ID.iam.gserviceaccount.com

API REST

Use o método serviceAccounts.delete().

DELETE https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para C#.


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

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Go.

import (
	"context"
	"fmt"
	"io"

	"golang.org/x/oauth2/google"
	iam "google.golang.org/api/iam/v1"
)

// deleteServiceAccount deletes a service account.
func deleteServiceAccount(w io.Writer, email string) error {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return fmt.Errorf("iam.New: %v", err)
	}

	_, err = service.Projects.ServiceAccounts.Delete("projects/-/serviceAccounts/" + email).Do()
	if err != nil {
		return fmt.Errorf("Projects.ServiceAccounts.Delete: %v", err)
	}
	fmt.Fprintf(w, "Deleted service account: %v", email)
	return nil
}

Java

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM Java.

public void deleteServiceAccount(String email) throws IOException {

  service.projects().serviceAccounts().delete("projects/-/serviceAccounts/" + email).execute();

  System.out.println("Deleted service account: " + email);
}

Python

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Python.

import os

from google.oauth2 import service_account
import googleapiclient.discovery

def delete_service_account(email):
    """Deletes a service account."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])

    service = googleapiclient.discovery.build(
        'iam', 'v1', credentials=credentials)

    service.projects().serviceAccounts().delete(
        name='projects/-/serviceAccounts/' + email).execute()

    print('Deleted service account: ' + email)

Depois de excluir uma conta de serviço, evite criar uma nova conta de serviço com o mesmo nome. Isso pode resultar em um comportamento inesperado. Para saber mais informações, consulte Como excluir e recriar contas de serviço.

Como canelar a exclusão de uma conta de serviço

Às vezes, é possível restaurar uma conta de serviço excluída usando o comando undelete.

Para cancelar a exclusão de uma conta de serviço, o autor da chamada precisa ter a permissão iam.serviceAccounts.undelete na conta de serviço excluída. Essa permissão está incluída na papel primário de Proprietário (roles/owner).

O ID exclusivo da conta de serviço excluída precisa ser fornecido ao usar o comando de cancelamento de exclusão. IDs exclusivos são um número de 21 dígitos, como 103271949540120710052. Se você não souber o ID exclusivo da conta de serviço excluída, ele poderá ser encontrado no Registro de atividades da operação de exclusão correspondente.

Não é possível restaurar uma conta de serviço excluída nas seguintes condições:

  • Se uma conta de serviço permaneceu excluída por mais de 30 dias, significa que ela já foi excluída automaticamente do sistema e não poderá mais ser restaurada, mesmo se uma solicitação de suporte ao cliente for registrada.
  • Se o endereço de e-mail de uma conta de serviço excluída estiver sendo usado por uma conta de serviço ativa, não será possível restaurar a conta excluída. Por exemplo, se você excluir uma conta denominada foo@project-id.iam.gserviceaccount.com com um ID exclusivo 103271949540120710052 e, posteriormente, criar uma nova conta usando o mesmo nome foo@project-id.iam.gserviceaccount.com, mas com um ID exclusivo de 103271949540120710329, será impossível restaurar a primeira conta de serviço. Para resolver esse problema, exclua a conta de serviço mais recente e execute o comando undelete.

API REST

Use o método serviceAccounts.undelete().

POST https://iam.googleapis.com/v1/projects/[PROJECT-ID]/serviceAccounts/[ACCOUNT-UNIQUE-ID]:undelete

Uma chamada REST precisa ser emitida para recuperar a conta. Por exemplo, isso pode ser feito usando curl, em que o ID exclusivo da conta de serviço excluída é 103271949540120710052:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-length: 0" "https://iam.googleapis.com/v1/projects/-/serviceAccounts/103271949540120710052:undelete"

A recuperação bem-sucedida resultará em um código de resposta 200 com detalhes sobre a conta de serviço restaurada.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud IAM