Alterar a conta de serviço anexada


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 usado por um aplicativo ou 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 um aplicativo personalizado, precisa acessar Google Cloud recursos ou executar ações sem o envolvimento do usuário final. Para obter 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 Google Cloud APIs, o Google recomenda que você anexe uma conta de serviço gerenciada pelo usuário à VM na qual o aplicativo ou a carga de trabalho está em execução. Em seguida, você concede funções do IAM à conta de serviço, o que dá à conta de serviço – e, por extensão, aos aplicativos em execução na VM – acesso aGoogle Cloud recursos.

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

Funções obrigatórias

Para obter as permissões necessárias para configurar contas de serviço em sua VM, peça ao administrador para conceder a você a função do IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) na VM ou em seu projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Esta função predefinida contém as permissões necessárias para configurar contas de serviço na sua VM. Para ver 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 configurar contas de serviço na sua VM:

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

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Visão geral

É recomendável configurar contas de serviço para suas VMs da seguinte forma:

  1. 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 necessários.
  2. Anexe a conta de serviço à sua VM.
  3. Defina o escopo da plataforma de nuvem ( https://www.googleapis.com/auth/cloud-platform ) na sua VM. Isso permite que a conta de serviço da VM chame o Google Cloud APIs que 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á automaticamente padronizado para o escopo 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.

Configurar a conta de serviço

Você pode criar uma conta de serviço gerenciada pelo usuário ou usar a conta de serviço padrão do Compute Engine. Recomenda-se uma conta de serviço gerenciada pelo usuário.

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

Gerenciado pelo usuário

Se você ainda não tiver uma conta de serviço gerenciada pelo usuário, crie uma conta de serviço. Para obter instruções detalhadas, consulte Configurar uma conta de serviço .

Padrão

Se você estiver familiarizado com a conta de serviço padrão do Compute Engine e quiser usar as credenciais fornecidas pela conta de serviço padrão em vez de criar novas contas de serviço, poderá conceder papéis do IAM à conta de serviço padrão.

Antes de atribuir funções do IAM à conta de serviço padrão, observe que:

  • A concessão de uma função do IAM à conta de serviço padrão afeta todas as VMs em execução como conta de serviço padrão. Por exemplo, se você conceder à conta de serviço padrão a função roles/storage.objectAdmin , todas as VMs em execução como a conta de serviço padrão com os escopos de acesso necessários terão permissões concedidas pela função roles/storage.objectAdmin . Da mesma forma, se você limitar o acesso omitindo determinadas funções, isso afetará todas as VMs em execução como conta de serviço padrão.

  • Dependendo da configuração da política da sua organização, a conta de serviço padrão poderá receber automaticamente a função de Editor no seu projeto. É altamente recomendável desativar a concessão automática de função aplicando a restrição de política da organização iam.automaticIamGrantsForDefaultServiceAccounts . Se você criou sua organização após 3 de maio de 2024, essa restrição será aplicada por padrão.

    Se você desabilitar a concessão automática de funções, deverá decidir quais funções conceder às contas de serviço padrão e, em seguida, conceder essas funções você mesmo.

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

Se você não tiver certeza sobre a concessão de funções do IAM à conta de serviço padrão, crie uma nova conta de serviço gerenciada pelo usuário .

Anexe a conta de serviço e atualize o escopo de acesso

Para alterar a conta de serviço e os escopos de acesso de uma VM, a VM deve ser interrompida temporariamente.

Se a conta de serviço estiver em um projeto diferente da VM, você deverá configurar a conta de serviço para um recurso em um projeto diferente .

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

Console

  1. Acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Clique no nome da instância de VM cuja conta de serviço você deseja alterar.

  3. Se a VM não estiver parada, clique em Parar . Aguarde até que a VM seja interrompida.

  4. Clique em Editar .

  5. Role para baixo até a seção Conta de serviço .

  6. Na lista suspensa, selecione a conta de serviço a ser atribuída à VM.

    • Se você escolher uma conta de serviço gerenciada pelo usuário, o escopo de acesso da VM será padronizado para o escopo recomendado cloud-platform . Se você precisar de um escopo diferente para sua conta de serviço gerenciada pelo usuário, use a CLI gcloud ou a API Compute Engine para anexar a conta de serviço.
    • Se você escolher a conta de serviço padrão do Compute Engine, poderá modificar os escopos de acesso no console do Google Cloud.
      • Para alterar os escopos, na seção Escopos de acesso , selecione Definir acesso para cada API e defina os escopos apropriados para suas necessidades.
      • Recomendado Se você não tiver certeza dos escopos de acesso adequados a serem definidos, escolha Permitir acesso total a todas as APIs do Cloud e certifique-se de restringir o acesso definindo funções do IAM na conta de serviço.
  7. Clique em Salvar para salvar suas alterações.

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

gcloud

  1. Pare a VM usando o 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 e-mail da conta de serviço e os escopos desejados. Para obter mais informações sobre como configurar escopos de acesso, consulte 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 e-mail da conta de serviço que você criou. Por exemplo: my-sa-123@my-project-123.iam.gserviceaccount.com . Para visualizar o endereço de e-mail, consulte Listando contas de serviço .

      Se você quiser remover a conta de serviço da VM, use a sinalização --no-service-account .

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

    • SCOPES : uma lista separada por vírgulas de URIs ou aliases de escopo fornecidos na descrição do sinalizador --scopes .

      Se você quiser remover todos os escopos da VM, use o sinalizador --no-scopes .

    Por exemplo, o comando a seguir atribui a conta de serviço my-sa-123@my-project-123.iam.gserviceaccount.com a uma VM chamada instância de exemplo e define escopos de acesso nessa VM para permitir acesso de leitura/gravação ao Compute Engine e acesso somente 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 usando o comando instances start . Substitua VM_NAME pelo nome da sua instância de VM.

    gcloud compute instances start VM_NAME
    

DESCANSAR

  1. Pare a VM fazendo uma solicitação POST usando o método instances.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 sua VM está
    • ZONE : a zona onde sua VM está localizada
    • VM_NAME : o nome da VM que você deseja parar
  2. Anexe a conta de serviço fazendo uma solicitação 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 esta solicitação.
    • ZONE : a zona à qual esta VM pertence.
    • VM_NAME : o nome da VM.
    • 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 visualizar o endereço de e-mail, consulte Listando contas de serviço .
    • SCOPE_URI : o URI do escopo necessário.

    Por exemplo, a solicitação a seguir usa o e-mail da conta de serviço my-sa-123@my-project-123.iam.gserviceaccount.com e define um escopo 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 uma solicitação POST usando o 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 sua VM está
    • ZONE : a zona onde sua VM está localizada
    • VM_NAME : o nome da VM que você deseja iniciar

Ver a conta de serviço usada por uma VM

Para visualizar todas as contas de serviço em um projeto, consulte Listando contas de serviço .

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

console

  1. Acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Clique no nome da instância de VM cuja conta de serviço você deseja alterar.

  3. Vá para a seção API e gerenciamento de identidade . Esta seção exibe a conta de serviço e o escopo de acesso usado pela VM.

gcloud

Execute o comando gcloud compute instances describe :

gcloud compute instances describe VM_NAME \
    --format json

A saída é semelhante à seguinte:

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

Se a VM não estiver usando uma conta de serviço, você receberá uma resposta sem a propriedade serviceAccounts .

Servidor de Metadados

Consulte o servidor de metadados na própria VM. Faça uma solicitação 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 você ativou uma ou mais contas de serviço ao criar a instância, este comando curl retornará uma saída semelhante a esta:

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

Se a instância não estiver usando uma conta de serviço, você receberá uma resposta vazia.

Melhores práticas

  • Limite os privilégios das contas de serviço e verifique regularmente as permissões da sua conta de serviço para garantir que estejam atualizadas.
  • Exclua contas de serviço com cuidado. Certifique-se de que seus aplicativos críticos não estejam mais usando uma conta de serviço antes de excluí-la. Se você não tiver certeza se uma conta de serviço está sendo usada, recomendamos desabilitar a conta de serviço em vez de excluí-la. As contas de serviço desativadas poderão ser reativadas se ainda forem necessárias.
  • Mitigue os riscos de segurança da sua conta de serviço. Para obter mais informações, consulte Práticas recomendadas para trabalhar com contas de serviço .

O que vem a seguir?