Neste documento, explicamos como criar uma instância de máquina virtual (VM) configurada para usar uma conta de serviço gerenciada pelo usuário. Uma conta de serviço é um tipo especial de conta normalmente usada por um aplicativo ou uma carga de trabalho de computação para fazer chamadas de API autorizadas.
As contas de serviço são necessárias nos cenários em que uma carga de trabalho, como um aplicativo personalizado, precisa acessar recursos Google Cloud ou executar ações sem o envolvimento do usuário final. Para mais informações sobre quando usar contas de serviço, consulte Práticas recomendadas para usar contas de serviço.
Se você tiver aplicativos que precisam fazer chamadas para as APIs Google Cloud , o Google recomenda anexar uma conta de serviço gerenciada pelo usuário à VM em que o aplicativo ou a carga de trabalho está sendo executado. Em seguida, você concede à conta de serviço papéis do IAM, o que dá à conta de serviço e, por extensão, aos aplicativos em execução na VM, acesso aos recursosGoogle Cloud .
Antes de começar
-
Configure a autenticação, caso ainda não tenha feito isso.
A autenticação é
o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud .
Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Terraform
To use the Terraform samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
For more information, see Set up authentication for a local development environment.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
Funções exigidas
Para receber as permissões necessárias para criar VMs que usam contas de serviço, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Administrador da instância da computação (v1) (
roles/compute.instanceAdmin.v1
) -
Criar contas de serviço (
roles/iam.serviceAccountCreator
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esses papéis predefinidos contêm as permissões necessárias para criar VMs que usam contas de serviço. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar VMs que usam contas de serviço:
-
Para criar contas de serviço:
todas as permissões no papel
iam.serviceAccountCreator
-
Para conceder permissões à conta de serviço:
todas as permissões no papel
resourcemanager.projectIamAdmin
-
Para criar VMs:
compute.instances.create
no projeto- Para usar uma imagem personalizada para criar a VM:
compute.images.useReadOnly
na imagem - Usar um snapshot para criar a VM:
compute.snapshots.useReadOnly
no snapshot - Usar um modelo de instância para criar a VM:
compute.instanceTemplates.useReadOnly
no modelo de instância - Atribuir uma rede legada à VM:
compute.networks.use
no projeto - Especificar um endereço IP estático para a VM:
compute.addresses.use
no projeto - Atribuir um endereço IP externo à VM ao usar uma rede legada:
compute.networks.useExternalIp
no projeto - Especificar uma sub-rede para a VM:
compute.subnetworks.use
no projeto ou na sub-rede escolhida - Atribuir um endereço IP externo à VM ao usar uma rede VPC:
compute.subnetworks.useExternalIp
no projeto ou na sub-rede escolhida - Definir os metadados da instância de VM para a VM:
compute.instances.setMetadata
no projeto - Definir tags para a VM:
compute.instances.setTags
na VM - Definir rótulos para a VM:
compute.instances.setLabels
na VM - Definir uma conta de serviço para a VM usar:
compute.instances.setServiceAccount
na VM - Criar um disco para a VM:
compute.disks.create
no projeto - Anexar um disco atual no modo somente leitura ou de leitura e gravação:
compute.disks.use
no disco - Anexar um disco atual no modo somente leitura:
compute.disks.useReadOnly
no disco
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Informações gerais
É recomendável configurar contas de serviço para suas VMs da seguinte maneira:
- Crie uma nova conta de serviço gerenciada pelo usuário em vez de usar a conta de serviço padrão do Compute Engine e conceda papéis do IAM a essa conta de serviço apenas para os recursos e operações de que ela precisa.
- Anexe a conta de serviço à VM.
- Defina o escopo do Cloud Platform (
https://www.googleapis.com/auth/cloud-platform
) na sua VM. Isso permite que a conta de serviço da VM chame as APIs Google Cloud que ela tem permissão para usar.- Se você especificar a conta de serviço usando o console do Google Cloud,
o escopo de acesso da VM será definido automaticamente como
cloud-platform
. - Se você especificar a conta de serviço usando a Google Cloud CLI ou a API
Compute Engine, poderá usar o parâmetro
scopes
para definir o escopo de acesso.
- Se você especificar a conta de serviço usando o console do Google Cloud,
o escopo de acesso da VM será definido automaticamente como
Configurar uma conta de serviço
Crie uma conta de serviço e atribua os papéis do IAM necessários. Atribua quantos papéis do IAM forem necessários. É possível modificar os papéis do IAM na sua conta de serviço conforme necessário.
O Google recomenda limitar os privilégios das contas de serviço e verificar regularmente as permissões delas para garantir que estejam atualizadas.
Use um dos métodos a seguir para configurar a conta de serviço.
Console
- Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the required roles to the service account.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
In the Service account users role field, enter the identifier for the principal that will attach the service account to other resources, such as Compute Engine instances.
This is typically the email address for a Google Account.
-
Click Done to finish creating the service account.
In the Google Cloud console, go to the Create service account page.
Go to Create service accountgcloud
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
To provide access to your project and your resources, grant a role to the service account:
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
- To grant another role to the service account, run the command as you did in the previous step.
-
Grant the required role to the principal that will attach the service account to other resources.
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountUSER_EMAIL
: the email address for a Google Account
Set up authentication:
Terraform
Para criar uma conta de serviço, use o recurso
google_service_account
.
Lembre-se de substituir os valores do marcador de posição para account_id
e os atributos display_name
.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Criar uma VM e anexar a conta de serviço
Depois de criar a conta de serviço, crie uma VM e anexe a conta de serviço
criada na seção anterior. Defina também o escopo de acesso da VM como
cloud-platform
.
Se você já tem uma VM e quer configurá-la para usar uma conta de serviço diferente, consulte Alterar a conta de serviço anexada.
Use um dos métodos a seguir para criar uma VM e anexar a conta de serviço.
Console
No console do Google Cloud, acesse a página Criar uma instância.
Para anexar uma conta de serviço, faça o seguinte:
- No menu de navegação, clique em Segurança.
- Na lista Conta de serviço, selecione a conta de serviço que você criou.
- Em Escopos de acesso, selecione Permitir acesso total a todas as APIs do Cloud.
Opcional: especifique outras opções de configuração. Para mais informações, consulte Opções de configuração durante a criação de instâncias.
Para criar e iniciar a instância, clique em Criar.
gcloud
Para criar uma nova instância de VM e configurá-la para usar uma conta de serviço
personalizada com a Google Cloud CLI, use o
comando gcloud compute instances create
e forneça a
conta de serviço e o escopo de acesso cloud-platform
à instância
da VM.
gcloud compute instances create VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=https://www.googleapis.com/auth/cloud-platform
Substitua:
SERVICE_ACCOUNT_EMAIL
: o endereço de e-mail da conta de serviço que você criou. Por exemplo,my-sa-123@my-project-123.iam.gserviceaccount.com
. Para ver o endereço de e-mail, consulte Como listar contas de serviço.VM_NAME
: o nome da instância de VM.
Exemplo:
gcloud compute instances create example-vm \ --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/cloud-platform
Também é possível especificar o escopo usando o alias: --scopes=cloud-platform
.
Esses aliases são reconhecidos apenas pela CLI gcloud. A API
e outras bibliotecas não os reconhecem. Portanto, é necessário especificar o
URI de escopo completo.
Terraform
Para configurar uma nova VM para usar uma conta de serviço, use o
recurso
google_compute_instance
.
REST
Use o método
instances.insert
para criar a VM
e especificar o e-mail da conta de serviço e o escopo de acesso para a instância de VM.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE
/instances { "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name":"VM_NAME
", "disks":[ { "initializeParams":{ "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot":true } ], "networkInterfaces":[ { "network":"global/networks/NETWORK_NAME" } ], "serviceAccounts": [ { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], "shieldedInstanceConfig":{ "enableSecureBoot":"ENABLE_SECURE_BOOT" } }
Substitua:
PROJECT_ID
: ID do projeto em que a VM será criadaZONE
: zona em que a VM será criadaMACHINE_TYPE_ZONE
: a zona que contém o tipo de máquina que será usado para a nova VM.MACHINE_TYPE
: tipo de máquina, predefinida ou personalizada, para a nova VM.VM_NAME
: nome da nova VM.IMAGE_PROJECT
: o projeto que contém a imagem
Por exemplo, se você especificardebian-10
como a família de imagens, especifiquedebian-cloud
como projeto de imagem.IMAGE
: especifique uma destas opções:IMAGE
: uma versão específica de uma imagem públicaPor exemplo,
"sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
IMAGE_FAMILY
: uma família de imagensIsso cria a VM a partir da imagem do SO mais recente e não descontinuada. Por exemplo, se você especificar
"sourceImage": "projects/debian-cloud/global/images/family/debian-10"
, o Compute Engine criará uma VM usando a versão mais recente da imagem do SO na família de imagensDebian 10
.
NETWORK_NAME
: a rede VPC que você quer usar para a VM. Você pode especificardefault
para usar sua rede padrão.SERVICE_ACCOUNT_EMAIL
: o endereço de e-mail da conta de serviço que você criou. Por exemplo,my-sa-123@my-project-123.iam.gserviceaccount.com
. Para isso, consulte Receber um e-mail de conta de serviço.ENABLE_SECURE_BOOT
: opcional: se você escolher uma imagem compatível com recursos da VM protegida, o Compute Engine ativa, por padrão, o módulo de plataforma virtual confiável (vTPM) e o monitoramento de integridade. Por padrão, o Compute Engine não ativa a Inicialização segura.true
Se você especificarenableSecureBoot
para , o Compute Engine criará uma VM com todos os três recursos da VM protegida já ativados. Depois que o Compute Engine iniciar a VM, será preciso interrompê-la se você quiser modificar as opções de VM protegida.
Acessar e usar outros Google Cloud serviços
Depois que a VM for configurada para usar a conta de serviço, os aplicativos poderão usá-la para autenticação. O método mais comum é a autenticação usando o Application Default Credentials e uma biblioteca de cliente. Algumas ferramentas Google Cloud , como a CLI gcloud, podem usar automaticamente a conta de serviço para acessar APIs Google Cloud em uma VM. Para mais informações, consulte Autenticar cargas de trabalho usando contas de serviço.
Se uma conta de serviço for excluída, os aplicativos não terão mais acesso aos Google Cloud recursos por meio dela. 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. 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. As contas de serviço desativadas poderão ser reativadas se ainda forem necessárias.
Exemplo: acessar os recursos do Cloud Storage pela VM
Depois de configurar a VM para usar uma conta de serviço que tenha o
papel storage.admin
, use ferramentas como a gcloud CLI
para gerenciar os arquivos
armazenados no Cloud Storage. Para acessar os recursos
do Cloud Storage, faça o seguinte:
Verifique se a conta de serviço anexada à sua VM tem o papel
roles/storage.admin
.Se a VM usar uma imagem de SO personalizada, instale a CLI gcloud. Por padrão, a CLI gcloud é instalada na maioria das imagens de SO públicas fornecidas por Google Cloud.
Conecte-se à VM.
Na VM, use a CLI do Google Cloud para gerenciar seus recursos do Cloud Storage.
A seguir
- Saiba como autenticar cargas de trabalho usando contas de serviço.
- Saiba como alterar a conta de serviço anexada a uma VM.
- Saiba como listar e editar contas de serviço.
- Consulte as práticas recomendadas para trabalhar com contas de serviço e reduza os riscos de segurança.