Como configurar o login do SO

Neste documento, você conhecerá as etapas básicas para configurar o Login do SO.

O Login do SO permite que você use papéis do IAM do Compute Engine para conceder ou revogar o acesso SSH às instâncias do Linux. O Login do SO é uma alternativa ao gerenciamento do acesso à instância adicionando e removendo chaves SSH em metadados. Para saber mais sobre os benefícios de usar esse recurso, consulte Login do SO.

Se você quiser ativar o Login do SO com uma camada de segurança usando a autenticação de dois fatores, consulte Como configurar o Login do SO com a autenticação de dois fatores. Para analisar todas as opções de gerenciamento de acesso às suas VMs, consulte Como escolher um método de acesso.

Para configurar o Login do SO e se conectar às instâncias, siga estas etapas:

  1. Instale ou atualize o ambiente convidado.
  2. (Opcional) Se você for um administrador da organização, consulte Como gerenciar o Login do SO em uma organização.
  3. Ative o recurso de login do SO no seu projeto ou nas instâncias individuais.
  4. Conceda os papéis do IAM necessários para você mesmo, os membros do seu projeto ou os membros da sua organização.
  5. (Opcional) Adicione chaves SSH personalizadas a contas de usuário para você, o membro do projeto ou os membros da organização. Se preferir, o Compute Engine poderá gerar essas chaves automaticamente, quando você se conectar às instâncias.
  6. Conecte-se às instâncias.
  7. 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.

  • Atualmente, as imagens do Fedora CoreOS não são compatíveis com o Login do SO. Para gerenciar o acesso à instância a VMs criadas usando essas imagens, use o sistema de ignição do Fedora CoreOS.

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

Etapa 1: instalar ou atualizar o ambiente convidado

A instância precisa ter a versão mais recente do ambiente convidado instalada. A maioria das imagens públicas já tem a versão mais recente instalada.

Se você tiver instâncias que executam imagens personalizadas importadas, instale o ambiente convidado nessas VMs.

Se você não tiver o ambiente convidado mais recente, atualize o ambiente convidado.

Etapa 2: (opcional) analisar o gerenciamento do Login do SO em uma organização

Se você for administrador da organização, poderá definir algumas configurações, como ativar o Login do SO no nível da organização. Consulte Como gerenciar o Login do SO em uma organização.

Etapa 3: ativar ou desativar o Login do SO

É possível ativar ou desativar o Login do SO definindo valores de metadados no nível da instância ou do projeto. Para definir esses valores, use o Console do Google Cloud ou a ferramenta de linha de comando gcloud.

Console

É possível aplicar os valores dos metadados nos projetos ou VMs usando uma destas opções:

  • Opção 1: defina enable-oslogin nos metadados de todo o projeto para que isso se aplique a todas as instâncias nele.

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

      Acessar a página "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.

  • Opção 2: defina enable-oslogin nos metadados de uma instância atual.

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

      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.

  • Opção 3: defina enable-oslogin nos metadados da instância ao criar uma instância.

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

      Acessar a página Instâncias de VM (em inglês)

    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

É possível aplicar os valores dos metadados nos projetos ou VMs usando uma destas opções:

  • Opção 1: defina enable-oslogin nos metadados de todo o projeto para que isso se aplique a todas as instâncias nele.

    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.

  • Opção 2: defina enable-oslogin nos metadados de uma instância atual.

    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.

  • Opção 3: defina enable-oslogin nos metadados da instância ao criar uma instância.

    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.

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

Etapa 4: configurar 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, as VMs em questão aceitarão conexões apenas de contas de usuário que têm os papéis de IAM necessários no projeto ou na organização.

Para permitir o acesso do Login do SO a essas VMs, você precisa conceder os papéis necessários ao usuário. Para permitir o acesso do Login do SO, siga estas etapas:

  1. Conceda um dos seguintes papéis de acesso à instância.

    É possível conceder esses papéis de acesso à instância no nível da instância usando o comando gcloud compute instances add-iam-policy-binding.

  2. Se a instância da VM usar uma conta de serviço, cada usuário precisará ser configurado para ter o papel roles/iam.serviceAccountUser na conta de serviço. Se você quer saber como conceder acesso a um usuário para uma conta de serviço, consulte Como configurar a propriedade e o acesso a uma conta de serviço.

  3. Para que os usuários que estão fora de sua organização possam acessar as VMs, além de conceder um papel de acesso à instância, conceda o papel roles/compute.osLoginExternalUser. Esse papel precisa ser concedido no nível da organização por um administrador da organização. Para mais informações, consulte Como conceder acesso à instância para usuários de fora da organização.

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 por meio do 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, acesse Como atribuir papéis a contas de serviço.
  3. Insira as Application Default Credentials na sua conta de serviço para que ela possa 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.

Etapa 5: (opcional) adicionar chaves SSH a uma conta de usuário

Se você quiser se conectar às suas VMs usando ferramentas de terceiros, será necessário adicionar as chaves SSH à sua conta de usuário. Se você se conectar às instâncias usando outras opções, como a ferramenta de linha de comando gcloud ou o SSH no navegador, pule esta etapa, porque o Compute Engine gera essas chaves automaticamente.

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 mudar esse nome de usuário.

Para encontrar o nome de usuário atual da sua conta, execute o comando gcloud compute os-login describe-profile:

Por exemplo, a saída pode ser semelhante a esta:

name: '314159265358979323846'
posixAccounts:
- gid: '27182818'
  homeDirectory: /home/user_example_com
  ⋮
  uid: '27182818'
  username: user_example_com
⋮

Etapa 6: conectar-se a instâncias

Ao se conectar a uma VM, você tem três opções principais:

Se você se conectar a uma VM usando a ferramenta de linha de comando gcloud ou o SSH no navegador, o Compute Engine gerará automaticamente as chaves SSH e as associará à sua conta de usuário.

Se você se conectar a uma instância usando uma ferramenta de terceiros, será necessário adicionar as chaves públicas à sua conta de usuário. A VM recebe a chave pública da sua conta de usuário e permite a conexão quando você fornece o nome de usuário correto e a chave SSH privada correspondente.

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

Etapa 7: analisar os 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.

    As organizações do G Suite podem alterar o padrão para remover o sufixo de domínio dos nomes de usuário gerados recentemente. 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. Para mais informações, consulte Como gerenciar a API Login do SO.

    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 mensagem de login terá 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 do Login do SO.

A seguir