Como configurar o login do SO com a autenticação de dois fatores

Se você usar o login do SO para gerenciar o acesso às instâncias, poderá adicionar uma camada extra de segurança usando a autenticação de dois fatores, também conhecida como 2FA.

Para usar o login do SO com a autenticação 2FA nas instâncias, conclua as etapas a seguir:

  1. Ative a 2FA no seu domínio ou Conta do Google.
  2. Ative a 2FA no seu projeto ou instância.
  3. Conceda os papéis do IAM necessários para você mesmo, para os membros do seu projeto ou para os membros da sua organização.
  4. Opcional: se o projeto fizer parte de uma organização, consulte Como gerenciar o login do SO em uma organização.
  5. Conecte-se às instâncias.
  6. Analise os comportamentos de login esperados.

Depois de configurar o login do SO com a 2FA, use os registros de auditoria para monitorar as sessões de autenticação.

Antes de começar

Limitações

  • No momento, o login do SO não é compatível com o Google Kubernetes Engine (GKE). Os nós de cluster do GKE continuam usando as chaves SSH de metadados quando o login do SO está ativado.

  • As imagens do Windows Server e do SQL Server não são compatíveis com o login do SO.

Sistemas operacionais compatíveis

A autenticação de dois fatores do login do SO exige a criação de imagens do sistema operacional após as seguintes datas:

Sistema operacional Datas
CentOS 6 e 7 26 de março de 2019
Debian 9 26 de março de 2019
RHEL 6 e 7 26 de março de 2019
SUSE 12 e 15 17 de junho de 2019
Ubuntu 16.04 LTS, 18.04 LTS, 18.10 e 19.04 28 de junho de 2019

Métodos compatíveis ou tipos de desafio

O login do SO é compatível com os seguintes métodos de 2FA ou tipos de desafio:

Como ativar a 2FA no domínio ou na Conta do Google

Antes de ativar a autenticação de dois fatores no seu projeto ou instância, ative a 2FA no domínio ou na Conta do Google. Certifique-se de ativar a 2FA no domínio que contém o projeto ou as instâncias ou para o usuário que é o proprietário deles.

Um administrador do G Suite pode ativar a autenticação de dois fatores em um domínio. Um usuário individual do Google pode ativar a autenticação de dois fatores no nível da conta de usuário.

Domínio

A autenticação de dois fatores em um domínio precisa ser ativada por um administrador do G Suite.

Para ativar a 2FA em um domínio, consulte Proteger sua empresa com a verificação em duas etapas no guia de administração do G Suite.

Conta de usuário

Se as contas de usuário não forem gerenciadas por um administrador do G Suite, será possível configurar a 2FA para Contas do Google individuais.

Para configurar a 2FA em uma Conta do Google individual, consulte Verificação em duas etapas do Google.

Como ativar a 2FA no projeto ou na instância

Depois de ativar a autenticação de dois fatores no nível do domínio ou da conta de usuário, ative as instâncias individuais ou o projeto para usar a 2FA do login do SO.

É necessário que a instância ou o projeto tenha o login do SO ativado para usar a 2FA.

É possível configurar o login do SO e a 2FA durante a criação da instância ou a configuração do projeto. Outra opção é configurar a 2FA em uma instância ou um projeto atual que já tenha o login do SO ativado.

Para configurar seu projeto ou instância para usar a autenticação de dois fatores do login do SO, defina "enable-oslogin-2fa=TRUE" nos metadados do projeto ou da instância.

Console

Defina enable-oslogin-2fa nos metadados da instância ao criá-la:

  1. No Console do Google Cloud Platform, acesse a página "Instâncias de VMs".

    Acessar a página "Instâncias de VMs"

  2. Clique em Criar instância.
  3. Na página Criar uma nova instância, preencha as propriedades pretendidas da instância.
  4. Na seção Metadados, adicione as seguintes entradas de metadados:

    • enable-oslogin e o valor é TRUE.
    • enable-oslogin-2fa e o valor é TRUE.
  5. Clique em Criar para criar a instância.

Defina enable-oslogin-2fa nos metadados do projeto para que se aplique a todas as instâncias dele:

  1. Acesse a página "Metadados".

    Acessar a página "Metadados"

  2. Clique em Editar.
  3. Adicione uma entrada de metadados com a chave enable-oslogin-2fa e o valor TRUE. Se preferir, defina o valor como FALSE para desativar o recurso.
  4. Clique em Salvar para aplicar as alterações.

Para VMs que não executam o CoreOS, essa alteração é aplicada instantaneamente. Não é preciso reiniciar a instância. Para distribuições do CoreOS, reinicialize ou reinicie a instância para que a alteração entre em vigor. Para reiniciar, interrompa e, em seguida, inicie a operação nas instâncias.

Defina enable-oslogin-2fa nos metadados de uma instância atual:

  1. Acesse a página "Instâncias de VM".

    Acessar a página "Instâncias de VM"

  2. Clique no nome da instância em que você quer definir o valor dos metadados.
  3. Para editar as configurações da instância, clique em Editar na parte superior da página de detalhes da instância.
  4. Na seção Metadados personalizados, adicione uma entrada de metadados com a chave enable-oslogin-2fa e o valor TRUE. Se preferir, defina o valor como FALSE para excluir a instância do recurso. Verifique também se enable-oslogin está configurado como True.
  5. Na parte inferior da página de detalhes da instância, clique em Salvar para aplicar as alterações à instância.

Para todos os sistemas operacionais, exceto CoreOS, essa alteração é aplicada instantaneamente. Não é preciso reiniciar a instância. Para distribuições do CoreOS, reinicialize ou reinicie a instância para que a alteração entre em vigor. Para reiniciar, interrompa e, em seguida, inicie a operação nas instâncias.

gcloud

Defina enable-oslogin-2fa nos metadados da instância ao criá-la:

gcloud compute instances create [INSTANCE_NAME] \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True

Defina enable-oslogin-2fa nos metadados do projeto para que se aplique a todas as instâncias dele:

gcloud compute project-info add-metadata \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True

Defina enable-oslogin-2fa nos metadados de uma instância atual:

gcloud compute instances add-metadata \
  --metadata enable-oslogin=True,enable-oslogin-2fa=True [INSTANCE_NAME]

[INSTANCE_NAME] é o nome da instância.

Como configurar os papéis de login do SO em contas de usuário

Como conceder papéis do IAM de login do SO

Depois que você ativar o login do SO em uma ou mais instâncias no projeto, elas aceitarão conexões apenas de contas de usuário com os papéis necessários do IAM no projeto ou na organização:

Por exemplo, conceda acesso à instância para os usuários de acordo com o seguinte processo:

  1. Conceda os papéis de acesso à instância necessários ao usuário. Os usuários precisam ter os papéis a seguir:

  2. Se você for um administrador da organização e quiser permitir que membros de fora dela acessem as instâncias, conceda roles/compute.osLoginExternalUser para esses usuários no nível da organização.

Os usuários não podem ver os detalhes ou os endereços IP externos das instâncias, a menos que você os forneça diretamente a eles. Para ver os detalhes das instâncias, os usuários precisam de outros papéis do IAM. Por exemplo, o papel roles/compute.viewer permite que os usuários vejam todos os recursos no projeto, incluindo os detalhes das instâncias.

Como conceder acesso SSH a uma conta de serviço

É possível usar os papéis de login do SO para permitir que as contas de serviço estabeleçam conexões SSH com suas instâncias. Isso é útil para as seguintes tarefas:

Conceda acesso SSH às suas contas de serviço seguindo o processo abaixo:

  1. Crie uma conta de serviço.
  2. Conceda os papéis de login do SO necessários à conta de serviço. Contas de serviço exigem os mesmos papéis que contas de usuário. Para saber como configurar papéis e permissões para contas de serviço, consulte Como atribuir papéis a contas de serviço.
  3. Forneça Application Default Credentials à conta de serviço para que ela consiga autorizar solicitações para as APIs necessárias. Atribua Application Default Credentials usando uma das opções a seguir:

Depois de conceder acesso SSH às contas de serviço, será possível configurar os aplicativos para criar chaves SSH e estabelecer conexões SSH com outras instâncias nas redes VPC. Leia o tutorial Como conectar aplicativos a instâncias usando SSH para ver um exemplo de aplicativo com SSH da conta de serviço.

Como revogar papéis do IAM de login do SO

Para revogar o acesso do usuário às instâncias que podem usar o login do SO, remova os papéis do usuário dessa conta. Para informações sobre como remover um papel do IAM de um usuário, consulte Como conceder, alterar e revogar acesso a recursos.

Quando o acesso de um usuário é revogado, o usuário ainda tem as chaves SSH públicas associadas à conta dele. Porém, essas chaves não funcionam mais nas instâncias de VM.

Como conectar-se a instâncias

Depois de configurar os papéis necessários, conecte-se a uma instância usando as ferramentas do Compute Engine. O Compute Engine gera automaticamente chaves SSH e as associa à sua conta de usuário. Se preferir, para criar suas próprias chaves SSH e adicionar chaves públicas à sua conta de usuário, conecte-se a instâncias usando ferramentas de terceiros. A instância recebe a chave pública da sua conta de usuário e permite que você se conecte à instância caso forneça o nome de usuário correto e a chave SSH privada.

Quando você se conectar à sua instância, receberá uma mensagem com base no método de 2FA ou no tipo de desafio selecionado.

  • Para o Google Authenticator, você verá a seguinte mensagem:

    "Enter your one-time password:"

  • Para a verificação por mensagem de texto ou chamada telefônica, você verá a seguinte mensagem:

    "A security code has been sent to your phone. Enter code to continue:"

  • Para o prompt do smartphone, você verá a seguinte mensagem:

    A login prompt has been sent to your enrolled device:"

    Para o método do prompt do smartphone ou tablet, aceite as mensagens no dispositivo para continuar. Para outros métodos, insira o código de segurança ou a senha única.

Comportamentos de login esperados

  • Ao usar o login do SO em algumas instâncias, talvez você receba a seguinte mensagem de erro após a conexão ser estabelecida:

    /usr/bin/id: cannot find name for group ID 123456789

    Ignore essa mensagem de erro. Esse erro não afeta suas instâncias.

  • Se um nome de usuário não for definido por um administrador do G Suite, o login do SO gerará um nome de usuário padrão do Linux combinando o nome de usuário e o domínio do e-mail associado ao perfil do usuário no Google. Essa convenção de nomenclatura garante a exclusividade. Por exemplo, se o e-mail de usuário associado ao perfil do Google for user@example.com, o respectivo nome de usuário gerado será user_example_com.

    Esse nome de usuário gerado é baseado nos domínios associados a uma conta do G Suite. Se um usuário pertencer a uma organização do G Suite separada, o nome de usuário gerado será precedido por "ext_". Por exemplo, se user@example.com acessar uma VM em uma organização diferente, o respectivo nome de usuário gerado será ext_user_example_com.

  • Quando você faz login em uma instância usando o comando gcloud compute ssh, a seguinte mensagem é exibida:

    Using OS Login user [user_example_com] instead of default user [user]

    Essa mensagem confirma que você está fazendo login com seu perfil de login do SO.

Como ver os registros de auditoria da 2FA do login do SO

O Compute Engine fornece registros de auditoria para rastrear solicitações de autenticação de dois fatores. A autenticação de dois fatores tem dois tipos de solicitação:

  • StartSession. Inicia uma nova sessão de autenticação. Em uma chamada StartSession, um cliente declara os recursos dele para o servidor e recebe informações sobre o primeiro desafio. Uma chamada StartSession retorna o resultado a seguir:

    • Um ID de sessão, passado para todas as chamadas subsequentes de ContinueSession.
    • Informações sobre o desafio ou o método de 2FA usado nessa nova sessão de autenticação
  • ContinueSession. Continua uma sessão de autenticação atual. Usando o ID de sessão fornecido, a API ContinueSession pode executar uma das duas ações a seguir:

    • Aceitar a resposta de um desafio ou método e, em seguida, autenticar, rejeitar ou exigir outros desafios ao usuário.
    • Alternar para um tipo de desafio diferente daquele inicialmente proposto pelo servidor na rodada anterior de chamadas de API. Se um cliente optar por concluir um tipo de desafio diferente (por exemplo, Google Authenticator em vez do prompt do smartphone), ele poderá solicitar um tipo de desafio distinto em uma chamada para o servidor usando um request.challengeId do tipo pretendido.

Para ver os registros, é preciso ter permissões para o visualizador de registros ou ser um leitor ou editor do projeto.

  1. Acesse a página "Registros" no Console do GCP.

    Acessar a página "Registros" (em inglês)

  2. Expanda o menu suspenso e selecione Audited Resource.
  3. Na barra de pesquisa, digite oslogin.googleapis.com e pressione Enter.
  4. Você verá uma lista de registros de auditoria com descrições das solicitações de autenticação de dois fatores. Expanda qualquer uma das entradas para mais informações:

    Registros de auditoria da autenticação de dois fatores.

Em qualquer um dos registros de auditoria, é possível realizar estas ações:

  1. Expandir a propriedade protoPayload.

    Métricas do registro de auditoria da autenticação de dois fatores.

  2. Procurar por methodName para ver a atividade à qual esse registro se aplica. Pode ser uma solicitação StartSession ou ContinueSession. Por exemplo, se o registro rastrear uma solicitação StartSession, o nome do método será "google.cloud.oslogin.OsLoginService.v1.StartSession". Da mesma forma, um registro ContinueSession seria "google.cloud.oslogin.OsLoginService.v1.ContinueSession". Uma entrada de registro de auditoria é registrada para todas as solicitações de início e continuação da sessão.

Há diferentes propriedades de registros de auditoria para tipos de registro distintos. Por exemplo, os registros de auditoria relacionados a StartSession têm propriedades específicas para iniciar sessões, enquanto os registros de ContinueSession têm o próprio conjunto de propriedades. Há algumas propriedades de registros de auditoria que também são compartilhadas entre os tipos de registro.

Todos os registros de auditoria de autenticação de dois fatores

Propriedade Valor
serviceName oslogin.googleapis.com
resourceName Uma string com o número do projeto. Esse número indica a qual solicitação de login o registro de auditoria pertence. Por exemplo, projects/myproject12345.
severity O nível de gravidade da mensagem do registro. Por exemplo, INFO ou WARNING.
request.email O endereço de e-mail do usuário que a chamada de API está autenticando.
request.numericProjectId O número do projeto do Google Cloud Platform.
response.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartOrContinueSessionResponse
response.sessionId Uma string com o ID exclusivo da sessão. Esse ID é transmitido para a próxima chamada de API na sequência.
response.authenticationStatus Status da sessão. Por exemplo, Authenticated, Challenge required ou Challenge pending.
response.challenges O conjunto de desafios que é possível tentar passar nesta rodada de autenticação. No máximo, um desses desafios é iniciado e tem o status READY. Os outros são fornecidos como opções que o usuário pode especificar como uma alternativa ao desafio principal proposto.

Registros de auditoria StartSession

Propriedade Valor
methodName google.cloud.oslogin.OsLoginService.v1.StartSession
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartSessionRequest
request.supportedChallengeTypes A lista de tipos de desafio ou métodos de 2FA que podem ser escolhidos.

Registros de auditoria ContinueSession

Propriedade Valor
methodName google.cloud.oslogin.OsLoginService.v1.ContinueSession
request.sessionId Uma string com o ID exclusivo da sessão anterior. Esse ID é transmitido da chamada de API anterior na sequência.
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.ContinueSessionRequest
request.challengeId Uma string com o ID do desafio que será iniciado ou executado. Esse ID precisa pertencer a um tipo de desafio retornado da chamada response.challenges em uma resposta de API anterior.
request.action A ação a ser tomada.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine