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. Trusted Cloud by S3NS 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 Trusted Cloud by S3NS 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 aosTrusted Cloud by S3NS 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 Trusted Cloud by S3NS 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 Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.

    gcloud

    1. Instale a CLI Google Cloud e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada. Depois de iniciar sessão, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init
    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 e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada.

      Create local authentication credentials for your user account:

      gcloud auth application-default login

      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 e, em seguida, inicie sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Trusted 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. Trusted Cloud by S3NS
    • Se especificar a conta de serviço através da Trusted 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 Trusted 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 Trusted 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 identifier for a user in a workforce identity pool. For details, see Represent workforce pool users in IAM policies.

  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 Trusted 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 Trusted 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 identifier for a user in a workforce identity pool. For details, see Represent workforce pool users in IAM policies.

  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 Trusted 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.s3ns.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.s3ns.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.s3ns.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 Trusted Cloud by S3NS 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 Trusted Cloud by S3NS ferramentas, como a CLI gcloud, podem usar automaticamente a conta de serviço para aceder às Trusted Cloud by S3NS 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 Trusted Cloud by S3NS 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 Trusted Cloud by S3NS.

  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?