Crie uma VM que use uma conta de serviço gerida pelo utilizador


Este documento explica como criar uma instância de máquina virtual (VM) configurada para usar uma conta de serviço gerida pelo utilizador. Uma conta de serviço é um tipo especial de conta normalmente usada por uma aplicação ou uma carga de trabalho de computação para fazer chamadas de API autorizadas.

As contas de serviço são necessárias para cenários em que uma carga de trabalho, como uma aplicação personalizada, precisa de aceder a recursos ou realizar ações sem a participação do utilizador final. Google Cloud Para mais informações sobre quando usar contas de serviço, consulte o artigo Práticas recomendadas para usar contas de serviço.

Se tiver aplicações que precisam de fazer chamadas para Google Cloud APIs, a Google recomenda que anexe uma conta de serviço gerida pelo utilizador à VM na qual a aplicação ou a carga de trabalho está a ser executada. Em seguida, concede funções de IAM à conta de serviço, o que dá à conta de serviço e, por extensão, às aplicações em execução na VM, acesso aosGoogle Cloud recursos.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-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

    1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    Terraform

    Para usar os exemplos do Terraform nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para mais informações, consulte Set up authentication for a local development environment.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Funções necessárias

Para receber as autorizações de que precisa para criar VMs que usam contas de serviço, peça ao seu administrador que lhe conceda as seguintes funções do IAM no projeto:

Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Estas funções predefinidas contêm as autorizações necessárias para criar VMs que usam contas de serviço. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

As seguintes autorizações são necessárias para criar VMs que usam contas de serviço:

  • Para criar contas de serviço: Todas as autorizações na função iam.serviceAccountCreator
  • Para conceder autorizações à conta de serviço: Todas as autorizações na função resourcemanager.projectIamAdmin
  • Para criar VMs:
    • compute.instances.create no projeto
    • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
    • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
    • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
    • Para atribuir uma rede antiga à VM: compute.networks.use no projeto
    • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
    • Para atribuir um endereço IP externo à VM quando usar uma rede antiga: compute.networks.useExternalIp no projeto
    • Para especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
    • Para atribuir um endereço IP externo à VM quando usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
    • Para definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
    • Para definir etiquetas para a VM: compute.instances.setTags na VM
    • Para definir etiquetas para a VM: compute.instances.setLabels na VM
    • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
    • Para criar um novo disco para a VM: compute.disks.create no projeto
    • Para anexar um disco existente no modo de leitura ou leitura/escrita: compute.disks.use no disco
    • Para anexar um disco existente no modo de leitura: compute.disks.useReadOnly no disco

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Vista geral

Recomendamos que configure as contas de serviço para as suas VMs da seguinte forma:

  1. Crie uma nova conta de serviço gerida pelo utilizador em vez de usar a conta de serviço predefinida do Compute Engine e conceda funções de IAM a essa conta de serviço apenas para os recursos e as operações de que precisa.
  2. Anexe a conta de serviço à sua VM.
  3. Defina o âmbito da plataforma na nuvem (https://www.googleapis.com/auth/cloud-platform) na VM. Isto permite que a conta de serviço da VM chame as APIs que tem autorização para usar. Google Cloud
    • Se especificar a conta de serviço através da Google Cloud consola, defina o âmbito de acesso da conta de serviço como Permitir acesso total a todas as APIs Cloud.
    • Se especificar a conta de serviço através da CLI do Google Cloud ou da API Compute Engine, pode usar o parâmetro scopes para definir o âmbito de acesso.

Configure uma conta de serviço

Crie uma conta de serviço e atribua as funções do IAM necessárias. Atribua o número de funções de IAM que quiser. Pode modificar as funções de IAM na sua conta de serviço conforme necessário.

A Google recomenda que limite os privilégios das contas de serviço e verifique regularmente as autorizações da sua conta de serviço para se certificar de que estão atualizadas.

Use um dos seguintes métodos para configurar a conta de serviço.

Consola

    Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator). Learn how to grant roles.
  1. In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  2. Select your project.
  3. 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.

  4. Click Create and continue.
  5. 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.

  6. Click Continue.
  7. 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.

  8. Click Done to finish creating the service account.

gcloud

    Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator). Learn how to grant roles.
  1. In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  2. Select your project.
  3. 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.

  4. Click Create and continue.
  5. 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.

  6. Click Continue.
  7. 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.

  8. Click Done to finish creating the service account.

Terraform

Para criar uma conta de serviço, pode usar o recurso google_service_account.

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

Lembre-se de substituir os valores dos marcadores de posição dos atributos account_id e display_name.

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Crie uma VM e anexe a conta de serviço

Depois de criar a conta de serviço, crie uma VM e anexe a conta de serviço que criou na secção anterior. Defina também o âmbito de acesso da VM como cloud-platform.

Se já tiver uma VM e quiser configurá-la para usar uma conta de serviço diferente, consulte o artigo Altere a conta de serviço associada.

Use um dos seguintes métodos para criar uma VM e anexar a conta de serviço.

Consola

  1. Na Google Cloud consola, aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Para associar uma conta de serviço, faça o seguinte:

    1. No menu de navegação, clique em Segurança.
    2. Na lista Conta de serviço, selecione a conta de serviço que criou.
    3. Em Âmbitos de acesso, selecione Permitir acesso total a todas as APIs Cloud.
  3. Opcional: especifique outras opções de configuração. Para mais informações, consulte o artigo Opções de configuração durante a criação da instância.

  4. 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 através da CLI do Google Cloud, use o comando gcloud compute instances create e indique o email da conta de serviço e o âmbito de acesso cloud-platform à instância de VM.

gcloud compute instances create VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

Substitua o seguinte:

  • SERVICE_ACCOUNT_EMAIL: o endereço de email da conta de serviço que criou. Por exemplo: my-sa-123@my-project-123.iam.gserviceaccount.com. Para ver o endereço de email, consulte o artigo Liste contas de serviço.
  • VM_NAME: o nome da instância de VM.

Por 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 pode especificar o âmbito através do alias: --scopes=cloud-platform. Estes aliases só são reconhecidos pela CLI gcloud. A API e outras bibliotecas não reconhecem estes alias, pelo que tem de especificar o URI do âmbito completo.

Terraform

Para configurar uma nova VM para usar uma conta de serviço, pode usar o recurso google_compute_instance.

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

REST

Use o instances.insert método para criar a VM e especifique o email da conta de serviço e o âmbito 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 o seguinte:

  • PROJECT_ID: ID do projeto no qual criar a VM
  • ZONE: zona na qual criar a VM
  • MACHINE_TYPE_ZONE: zona que contém o tipo de máquina a usar para a nova VM
  • MACHINE_TYPE: tipo de máquina, predefinido ou personalizado, para a nova VM
  • VM_NAME: name da nova VM
  • IMAGE_PROJECT: project que contém a imagem
    Por exemplo, se especificar debian-10 como a família de imagens, especifique debian-cloud como o projeto de imagens.
  • IMAGE: especifique uma das seguintes opções:
    • IMAGE: uma versão específica de uma imagem pública

      Por exemplo, "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

    • IMAGE_FAMILY: uma família de imagens

      Isto cria a VM a partir da imagem do SO não descontinuada mais recente. Por exemplo, se especificar "sourceImage": "projects/debian-cloud/global/images/family/debian-10", o Compute Engine cria uma VM a partir da versão mais recente da imagem do SO na família de imagens Debian 10.

  • NETWORK_NAME: a rede VPC que quer usar para a VM. Pode especificar default para usar a sua rede predefinida.
  • SERVICE_ACCOUNT_EMAIL: o endereço de email da conta de serviço que criou. Por exemplo: my-sa-123@my-project-123.iam.gserviceaccount.com. Para ver o endereço de email, consulte o artigo Obtenha um email de conta de serviço.
  • ENABLE_SECURE_BOOT: Opcional: se escolheu uma imagem que suporta as funcionalidades da VM protegida, o Compute Engine ativa, por predefinição, o módulo de plataforma fidedigna virtual (vTPM) e a monitorização da integridade. O Compute Engine não ativa o Arranque seguro por predefinição.

    Se especificar true para enableSecureBoot, o Compute Engine cria uma VM com todas as três funcionalidades da VM protegida ativadas. Depois de o Compute Engine iniciar a VM, para modificar as opções da VM protegida, tem de parar a VM.

Aceder e usar outros Google Cloud serviços

Depois de configurar a VM para usar a conta de serviço, as aplicações podem usar a conta de serviço para fazer a autenticação. O método mais comum é a autenticação através das credenciais predefinidas da aplicação e de uma biblioteca de cliente. Algumas Google Cloud ferramentas, como a CLI gcloud, podem usar automaticamente a conta de serviço para aceder às Google Cloud APIs a partir de uma VM. Para mais informações, consulte o artigo Autentique cargas de trabalho com contas de serviço.

Se uma conta de serviço for eliminada, as aplicações deixam de ter acesso aos Google Cloud recursos através dessa conta de serviço. Se eliminar as contas de serviço predefinidas do App Engine e do Compute Engine, as suas VMs deixam de ter acesso aos recursos no projeto. Se não tiver a certeza de que uma conta de serviço está a ser usada, a Google recomenda que desative a conta de serviço antes de a eliminar. As contas de serviço desativadas podem ser reativadas se ainda forem necessárias.

Exemplo: aceda aos recursos do Cloud Storage a partir da sua VM

Depois de configurar a VM para usar uma conta de serviço com a função storage.admin, pode usar ferramentas como a CLI gcloud para gerir ficheiros que armazenou no Cloud Storage. Para aceder aos seus recursos do Cloud Storage, conclua o seguinte:

  1. Certifique-se de que a conta de serviço anexada à sua VM tem a função roles/storage.admin.

  2. Se a sua VM usar uma imagem do SO personalizada, instale a CLI gcloud. Por predefinição, a CLI gcloud é instalada na maioria das imagens de SO públicas fornecidas pela Google Cloud.

  3. Estabeleça ligação à VM.

  4. Na VM, use a Google Cloud CLI para gerir os seus recursos do Cloud Storage.

O que se segue?