Altere a conta de serviço associada


Este documento explica como configurar uma máquina virtual (VM) existente para usar uma conta de serviço diferente. 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 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.

    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. 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.

    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 configurar contas de serviço na sua VM, peça ao seu administrador que lhe conceda a função IAM de administrador de instâncias do Compute (v1) (roles/compute.instanceAdmin.v1) na VM ou no seu 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.

Esta função predefinida contém as autorizações necessárias para configurar contas de serviço na sua VM. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para configurar contas de serviço na sua VM:

  • compute.instances.setServiceAccount
  • compute.instances.stop
  • compute.instances.start

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 a conta de serviço

Pode criar uma conta de serviço gerida pelo utilizador ou usar a conta de serviço predefinida do Compute Engine. Recomendamos uma conta de serviço gerida pelo utilizador.

Para a conta de serviço selecionada, certifique-se de que as funções de gestão de identidade e de acesso (IAM) necessárias estão atribuídas.

Gerido pelo utilizador

Se ainda não tiver uma conta de serviço gerida pelo utilizador, crie uma conta de serviço. Para obter instruções detalhadas, consulte o artigo Configure uma conta de serviço.

Predefinição

Se conhece a conta de serviço predefinida do Compute Engine e quer usar as credenciais fornecidas pela conta de serviço predefinida em vez de criar novas contas de serviço, pode conceder funções do IAM à conta de serviço predefinida.

Antes de atribuir funções da IAM à conta de serviço predefinida, tenha em atenção que:

  • A concessão de uma função do IAM à conta de serviço predefinida afeta todas as VMs que estão a ser executadas como a conta de serviço predefinida. Por exemplo, se conceder à conta de serviço predefinida a função roles/storage.objectAdmin, todas as VMs executadas como a conta de serviço predefinida com os âmbitos de acesso necessários têm autorizações concedidas pela função roles/storage.objectAdmin. Da mesma forma, se limitar o acesso omitindo determinadas funções, isto afeta todas as VMs executadas como a conta de serviço predefinida.

  • Consoante a configuração da política da organização, a conta de serviço predefinida pode receber automaticamente a função de editor no seu projeto. Recomendamos vivamente que desative a concessão automática de funções aplicando a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts. Se tiver criado a sua organização após 3 de maio de 2024, esta restrição é aplicada por predefinição.

    Se desativar a concessão automática de funções, tem de decidir que funções conceder às contas de serviço predefinidas e, em seguida, conceder estas funções.

    Se a conta de serviço predefinida já tiver a função de editor, recomendamos que substitua a função de editor por funções menos permissivas.Para modificar as funções da conta de serviço em segurança, use o Simulador de políticas para ver o impacto da alteração e, em seguida, conceda e revogue as funções adequadas.

Se não tiver a certeza sobre a concessão de funções de IAM à conta de serviço predefinida, crie uma nova conta de serviço gerida pelo utilizador.

Anexe a conta de serviço e atualize o âmbito de acesso

Para alterar a conta de serviço e os âmbitos de acesso de uma VM, a VM tem de ser parada temporariamente.

Se a conta de serviço estiver num projeto diferente do da VM, tem de configurar a conta de serviço para um recurso num projeto diferente.

Use um dos seguintes métodos para alterar a conta de serviço e os âmbitos de acesso na sua VM.

Consola

  1. Aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique no nome da instância de VM para a qual quer alterar a conta de serviço.

  3. Clique em Parar. Se não existir a opção Parar, clique em Mais ações > Parar. Aguarde até que a VM seja parada.

  4. Clique em Edit.

  5. Desloque a página para baixo até à secção Conta de serviço.

  6. Na lista pendente, selecione a conta de serviço a atribuir à VM.

    • Se escolher uma conta de serviço gerida pelo utilizador, o âmbito de acesso da VM é, por predefinição, o âmbito cloud-platform recomendado. Se precisar de um âmbito diferente para a sua conta de serviço gerida pelo utilizador, use a CLI gcloud ou a API Compute Engine para anexar a conta de serviço.
    • Se escolher a conta de serviço predefinida do Compute Engine, pode modificar os respetivos âmbitos de acesso na Google Cloud consola.
      • Para alterar os âmbitos, na secção Âmbitos de acesso, selecione Definir acesso para cada API e defina os âmbitos adequados para as suas necessidades.
      • Recomendado Se não tiver a certeza dos âmbitos de acesso adequados a definir, escolha Permitir acesso total a todas as APIs Cloud e, em seguida, certifique-se de que restringe o acesso definindo funções de IAM na conta de serviço.
  7. Clique em Guardar para guardar as alterações.

  8. Clique em Iniciar/Retomar para reiniciar a VM.

gcloud

  1. Pare a VM através do comando instances stop. Substitua VM_NAME pelo nome da sua instância de VM.

    gcloud compute instances stop VM_NAME
    
  2. Anexe a conta de serviço. Para anexar a conta de serviço, use o comando instances set-service-account e forneça o nome da VM, o email da conta de serviço e os âmbitos desejados. Para mais informações sobre como definir âmbitos de acesso, consulte as Práticas recomendadas.

    gcloud compute instances set-service-account VM_NAME \
      --service-account=SERVICE_ACCOUNT_EMAIL \
      --scopes=SCOPES
    

    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 Listar contas de serviço.

      Se quiser remover a conta de serviço da VM, use a flag --no-service-account.

    • VM_NAME: o nome da instância de VM.

    • SCOPES: uma lista separada por vírgulas de URIs ou aliases de âmbito fornecidos na descrição da flag --scopes.

      Se quiser remover todos os âmbitos da VM, use a flag --no-scopes.

    Por exemplo, o seguinte comando atribui a conta de serviço my-sa-123@my-project-123.iam.gserviceaccount.com a uma VM denominada example-instance e define âmbitos de acesso nessa VM para permitir acesso de leitura/escrita ao Compute Engine e acesso só de leitura ao Cloud Storage:

    gcloud compute instances set-service-account example-instance \
      --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \
      --scopes=compute-rw,storage-ro
    
  3. Inicie a VM com o comando instances start. Substitua VM_NAME pelo nome da sua instância de VM.

    gcloud compute instances start VM_NAME
    

REST

  1. Pare a VM fazendo um pedido POST através do métodoinstances.stop:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    Substitua o seguinte:

    • PROJECT_ID: o projeto em que a sua VM se encontra
    • ZONE: a zona onde a sua VM está localizada
    • VM_NAME: o nome da VM que quer parar
  2. Anexe a conta de serviço fazendo um pedido POST ao método setServiceAccount:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount
    
    {
      "email": "SERVICE_ACCOUNT_EMAIL",
      "scopes": [
        "SCOPE_URI",
        "SCOPE_URI",
        ...
      ]
    }
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do projeto para este pedido.
    • ZONE: a zona à qual esta VM pertence.
    • VM_NAME: o nome da VM.
    • 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 Listar contas de serviço.
    • SCOPE_URI: o URI do âmbito obrigatório.

    Por exemplo, o pedido seguinte usa o email da conta de serviço my-sa-123@my-project-123.iam.gserviceaccount.com e define um âmbito do Cloud Storage e do BigQuery:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount
    
    {
      "email": "my-sa-123@my-project-123.iam.gserviceaccount.com",
      "scopes": [
        "https://www.googleapis.com/auth/bigquery",
        "https://www.googleapis.com/auth/devstorage.read_only"
      ]
    }
    
  3. Inicie a VM construindo um pedido POST através do método instances.start:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    Substitua o seguinte:

    • PROJECT_ID: o projeto em que a sua VM se encontra
    • ZONE: a zona onde a sua VM está localizada
    • VM_NAME: o nome da VM que quer iniciar

Veja a conta de serviço usada por uma VM

Para ver todas as contas de serviço num projeto, consulte o artigo Listar contas de serviço.

Se precisar de identificar a conta de serviço que está a ser usada por uma VM, conclua um dos seguintes procedimentos:

consola

  1. Aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Clique no nome da instância de VM para a qual quer alterar a conta de serviço.

  3. Aceda à secção Gestão de APIs e identidades. Esta secção apresenta a conta de serviço e o âmbito de acesso usados pela VM.

gcloud

Execute o comando gcloud compute instances describe:

gcloud compute instances describe VM_NAME \
    --format json

O resultado é semelhante ao seguinte:

{
  ...
  "serviceAccounts":[
      {
        "email":"123845678986-compute@developer.gserviceaccount.com",
        "scopes":[
            "https://www.googleapis.com/auth/devstorage.full_control"
        ]
      }
  ]
  ...
   }

Se a VM não estiver a usar uma conta de serviço, recebe uma resposta sem a propriedade serviceAccounts.

Servidor de metadados

Consultar o servidor de metadados a partir da própria VM. Fazer um pedido para http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/:

user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
-H "Metadata-Flavor: Google"

Se ativou uma ou mais contas de serviço quando criou a instância, este comando curl devolve um resultado semelhante ao seguinte:

123845678986-compute@developer.gserviceaccount.com/
default/

Se a instância não estiver a usar uma conta de serviço, recebe uma resposta vazia.

Práticas recomendadas

  • 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.
  • Elimine contas de serviço com cuidado. Certifique-se de que as suas aplicações críticas já não estão a usar uma conta de serviço antes de a eliminar. Se não tiver a certeza se está a ser usada uma conta de serviço, recomendamos que desative a conta de serviço em vez de a eliminar. As contas de serviço desativadas podem ser reativadas se ainda forem necessárias.
  • Mitigue os riscos de segurança da sua conta de serviço. Para mais informações, consulte as práticas recomendadas para trabalhar com contas de serviço.

O que se segue?