Como configurar o Login do SO

O Login do SO permite usar os papéis do IAM do Compute Engine para gerenciar o acesso SSH às instâncias do Linux. Além disso, é uma alternativa ao gerenciamento manual do acesso à instância por meio da adição e remoção de chaves SSH nos metadados.

Neste tópico, apresentamos as etapas básicas para configurar o login do SO. Ao configurá-lo, é possível adicionar uma camada de segurança usando a autenticação de dois fatores. Para mais informações, consulte Como configurar o login do SO com a autenticação de dois fatores.

Para configurar o Login do SO e conectar-se às instâncias, siga o processo abaixo:

  1. Ative o recurso de login do SO no seu projeto ou nas instâncias individuais.
  2. Conceda os papéis do IAM necessários para você mesmo, os membros do seu projeto ou os membros da sua organização.
  3. Se preferir, siga qualquer uma das etapas abaixo:
  4. Conecte-se às instâncias.
  5. Revise os comportamentos de login esperados.

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 famílias de imagens do Windows Server e do SQL Server ainda não são compatíveis com o Login do SO.

Como ativar ou desativar o Login do SO

Antes de gerenciar o acesso à instância usando papéis do IAM, ative o recurso Login do SO definindo um par de chave-valor de metadados no projeto ou nos metadados da instância: enable-oslogin=TRUE. Para desativar o Login do SO, defina o valor dos metadados como FALSE. Por exemplo, ative o recurso em todo o projeto usando enable-oslogin=TRUE para os envolvidos no projeto, mas defina enable-oslogin=FALSE nas instâncias específicas que ainda não podem usá-lo.

Aplique o valor de metadados enable-oslogin aos projetos ou instâncias usando uma das seguintes opções:

Console

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

  1. No Console do Google Cloud Platform, acesse a página Metadados.

    Acessar a página de metadados

  2. Clique em Editar.
  3. Adicione uma entrada de metadados em que a chave é enable-oslogin e o valor é TRUE. Se quiser, 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.

Para definir enable-oslogin nos metadados de uma instância atual, siga estas instruções:

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

    Acessar a página de 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 e o valor TRUE. Se preferir, defina o valor como FALSE para excluir a instância do recurso.
  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.

Para definir enable-oslogin nos metadados da instância ao criá-la, siga estas instruções:

  1. No Console do GCP, 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 da sua instância.
  4. Na seção Metadados, adicione uma entrada de metadados com a chave enable-oslogin e o valor TRUE. Se preferir, defina o valor como FALSE para excluir a instância do recurso.
  5. Clique em Criar para criar a instância.

gcloud

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

Use o comando project-info add-metadata (em inglês) na ferramenta de linha de comando gcloud e defina oslogin=TRUE para ativar o login do SO:

gcloud compute project-info add-metadata \
    --metadata enable-oslogin=TRUE

Se preferir, defina enable-oslogin como FALSE para desativar o login do SO.

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 definir enable-oslogin nos metadados de uma instância atual, siga estas instruções:

Use o comando instances add-metadata na ferramenta de linha de comando gcloud e defina oslogin=TRUE para ativar o Login do SO: Substitua instance-name pelo nome da instância.

gcloud compute instances add-metadata instance-name \
    --metadata enable-oslogin=TRUE

Se preferir, defina enable-oslogin como FALSE para impedir que a instância use o Login do SO.

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 definir enable-oslogin nos metadados da instância ao criá-la, siga estas instruções:

Use o comando instances create na ferramenta de linha de comando gcloud e defina oslogin=TRUE para ativar o Login do SO: Substitua instance-name pelo nome da instância.

gcloud compute instances create instance-name \
    --metadata enable-oslogin=TRUE

Se preferir, defina enable-oslogin como FALSE para impedir que a instância use o Login do SO.

Além dos valores de metadados necessários, sua instância precisa ter a versão mais recente do ambiente convidado instalada. Se você tiver instâncias que executam imagens personalizadas importadas, instale o ambiente convidado nessas instâncias para ativar o login do SO.

Após ativar o login do SO nas instâncias do projeto, conceda aos usuários permissão para se conectar a elas.

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

Como conceder papéis do IAM de login do SO

Após 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.

  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 detalhes ou os endereços IP externos das instâncias, a menos que você os forneça diretamente. 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:

Siga o processo abaixo para conceder acesso SSH às contas de serviço:

  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. Insira as Application Default Credentials na conta de serviço para que elas possam autorizar solicitações às APIs necessárias. Para fazer isso, use uma das seguintes opções:

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.

Ao ter o acesso revogado, o usuário ainda terá chaves SSH públicas associadas à conta, mas elas não funcionarão nas instâncias da VM.

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

Depois de se conectar à instância, revise os comportamentos de login esperados.

Comportamentos de login esperados

  • Ao usar o login do SO em algumas instâncias, é possível receber a seguinte mensagem de erro após a conexão ter sido 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.

  • Ao fazer login em uma instância usando o comando gcloud compute ssh, a mensagem de login tem o seguinte formato para um usuário user que pertence ao domínio example.com:

    Using OS Login user user_example_com instead of default user user

    Essa mensagem confirma que o usuário está fazendo login com um perfil de Login do SO.

Como adicionar chaves SSH a uma conta de usuário

Associe chaves SSH públicas aos seguintes tipos de conta de usuário:

Use a ferramenta de linha de comando gcloud ou a API OS Login para adicionar chaves SSH à própria conta. Se você for administrador de domínio de uma organização, outra opção é usar a API Directory para adicionar chaves SSH à conta de usuário na organização.

gcloud

Os comandos gcloud compute os-login estão disponíveis somente no SDK do Cloud versão 184 e posterior.

Use a ferramenta de linha de comando gcloud para associar as chaves SSH públicas a uma conta.

gcloud compute os-login ssh-keys add \
    --key-file key-file-path \
    --ttl expire-time

Substitua as seguintes informações:

  • key-file-path: o caminho para a chave SSH pública na estação de trabalho local. Verifique se a chave SSH pública está formatada corretamente. Se você usa o PuTTYgen em sistemas Linux para gerar as chaves públicas, use o formato public-openssh.
  • expire-time: uma sinalização opcional que define um prazo de validade para a chave SSH pública. Por exemplo, especifique 30m para a chave SSH expirar após 30 minutos. Essa sinalização usa as seguintes unidades:
    • s para segundos
    • m para minutos
    • h para horas
    • d para dias Defina o valor como 0 para indicar que não há prazo de validade.

API OS Login

Use a API OS Login para associar chaves SSH públicas a uma conta.

POST https://oslogin.googleapis.com/v1/users/account-email:importSshPublicKey

{
 "key": "ssh-key",
 "expirationTimeUsec": "expiration-timestamp"
}

Substitua as seguintes informações:

  • account-email: o endereço de e-mail que representa a conta de usuário gerenciada.
  • ssh-key: a chave pública a ser aplicada à conta. Verifique se a chave SSH pública está formatada corretamente. Se você usa o PuTTYgen em sistemas Linux para gerar as chaves públicas, use o formato public-openssh.
  • expiration-timestamp: o prazo de validade da chave, em microssegundos, a partir do período.

API Directory

Como administrador de domínio de uma organização, use a referência da API Directory para adicionar chaves SSH à conta de outro usuário na organização. Por exemplo, crie uma solicitação PUT para o método directory.users.update com uma ou mais entradas SSH sshPublicKeys.

PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

{
 "sshPublicKeys": [
  {
   "key": "ssh-key",
   "expirationTimeUsec": "expiration-timestamp"
  },
  {
   "key": "ssh-key",
   "expirationTimeUsec": "expiration-timestamp"
  }
 ]
}

Substitua as seguintes informações:

  • user-id-key: um ID imutável para o usuário.
  • ssh-key: uma chave pública a ser aplicada à conta. Verifique se a chave SSH pública está formatada corretamente. Se você usa o PuTTYgen em sistemas Linux para gerar as chaves públicas, use o formato public-openssh.
  • expiration-timestamp: o prazo de validade de uma chave, em microssegundos, a partir do período.

Para remover todas as chaves de uma conta, especifique "sshPublicKeys": null como o corpo, substituindo user-id-key por um ID imutável para o usuário:

PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

{
  "sshPublicKeys": null
}

Após adicionar as chaves à conta, conecte-se a instâncias usando ferramentas de terceiros e o nome de usuário associado à sua conta. O administrador da sua organização pode alterar esse nome de usuário. Para encontrar o nome de usuário da conta, execute o comando gcloud compute os-login describe-profile:

gcloud compute os-login describe-profile

name: account-email
posixAccounts:
⋮
  username: user-name

Substitua as seguintes informações:

  • account-email: o endereço de e-mail que representa a conta de usuário gerenciada.
  • user-name: o nome de usuário para estabelecer conexões SSH. Por padrão, ele é gerado com base no seu account-email.

A seguir