Como gerenciar o acesso à instância com o login do SO

O login do SO permite que você use os papéis do IAM do Compute Engine para gerenciar o acesso SSH às instâncias do Linux e é uma alternativa para gerenciar manualmente o acesso à instância por meio da adição e remoção de chaves SSH nos metadados.

Para configurar o login do SO e conectar-se às instâncias, use o seguinte processo:

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

Limitações

  • Atualmente, o login do SO não é compatível com o Google Kubernetes Engine. Os nós de cluster do Google Kubernetes Engine continuam usando 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, é preciso ativar o recurso de login do SO por meio da definição de 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, é possível ativar o recurso em todo o projeto usando enable-oslogin=TRUE para envolvidos no projeto, mas definir enable-oslogin=FALSE em instâncias específicas que ainda não podem usá-lo.

É possível aplicar o valor de metadados enable-oslogin aos seus projetos ou instâncias com uma das seguintes opções:

Console

Defina enable-oslogin nos metadados de todo o projeto para que isso seja aplicado a todas as instâncias do projeto:

  1. Acesse a página Metadados.
  2. Clique em Editar.
  3. Inclua uma entrada de metadados com a chave enable-oslogin 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 estão executando 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, execute uma operação de interrupção e, em seguida, de inicialização nas instâncias.

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

  1. Acesse a página Instâncias de VMs.
  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. Outra opção é definir 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 sua instância. Para distribuições do CoreOS, reinicialize ou reinicie a instância para que a alteração entre em vigor. Para reiniciar, execute uma operação de interrupção e, em seguida, de inicialização nas instâncias.

Defina enable-oslogin nos metadados de instância quando criar uma instância:

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

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

  2. Clique em Criar instância.
  3. Na página Criar uma nova instância, preencha as propriedades desejadas da instância.
  4. Na seção Metadados, adicione uma entrada de metadados com a chave enable-oslogin e o valor TRUE. Outra opção é definir 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 de todo o projeto para que isso seja aplicado a todas as instâncias do projeto:

Use o comando project-info add-metadata 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

Como alternativa, defina enable-oslogin como FALSE para desativar o login do SO.

Para VMs que não estão executando 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.

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:

gcloud compute instances add-metadata [INSTANCE_NAME] --metadata enable-oslogin=TRUE

Como alternativa, 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 sua instância. Para distribuições do CoreOS, reinicialize ou reinicie a instância para que a alteração entre em vigor.

Defina enable-oslogin nos metadados de instância quando 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:

gcloud compute instances create [INSTANCE_NAME] --metadata enable-oslogin=TRUE

Como alternativa, defina enable-oslogin como FALSE para impedir que a instância use o login do SO.

Além dos valores de metadados obrigatórios, sua instância precisa ter a versão mais recente do Linux Guest Environment instalada. Para as instâncias que executam imagens personalizadas importadas, instale o Linux Guest Environment 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 essas instâncias.

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 do projeto, essas instâncias aceitarão apenas conexões provenientes de contas de usuário que tenham os papéis do IAM necessários no projeto ou na organização.

Por exemplo, é possível conceder acesso à instância para seus usuários com o seguinte processo:

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

  2. Se você é o administrador de uma organização e quer permitir que os membros externos a ela acessem as instâncias, conceda roles/compute.osLoginExternalUser a 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 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 visualizem todos os recursos no projeto, incluindo os detalhes de 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:

É possível conceder acesso SSH às suas contas de serviço usando o seguinte processo:

  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. Leia Como atribuir papéis a contas de serviço para aprender a configurar papéis e permissões para 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 o SSH para ver um exemplo de aplicativo para o 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. O usuário ainda terá chaves SSH públicas associadas à conta, mas elas não funcionarão mais nas suas instâncias.

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 chaves SSH e as associa à sua conta de usuário.

Como alternativa, para criar suas próprias chaves SSH e adicionar as 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 se fornecer o nome de usuário correto e a chave SSH particular.

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

Como conceder acesso à instância a usuários fora da organização

Por padrão, os usuários fora da organização não podem definir chaves SSH nem ter acesso a instâncias na organização. Em algumas situações, pode ser necessário conceder acesso à instância para usuários que fazem parte de uma organização diferente ou que tenham uma conta de consumidor do Google do gmail.com.

O papel roles/compute.osLoginExternalUser do IAM possibilita que contas do Google externas interajam com outros papéis de login do SO, possibilitando que elas configurem informações da conta POSIX.

Conceda o papel roles/compute.osLoginExternalUser e outros papéis de acesso a instâncias de login do SO necessários a usuários externos à organização.

  1. Acesse a página de seleção do projeto e da organização.

    Acessar a página de seleção do projeto e da organização

  2. No menu suspenso "Organização", selecione sua organização.
  3. Clique em Tudo para ver todas as organizações.
  4. Clique no nome da organização.
  5. Clique em Adicionar para acrescentar um novo papel a um usuário.
  6. Especifique o nome de usuário para quem você quer configurar o acesso à instância.
  7. Clique em Selecionar um papel para especificar quais papéis você quer conceder aos usuários.
  8. Selecione o papel Usuário externo do login do SO do Compute, que faz parte da lista de papéis do Compute Engine.
  9. Clique em Adicionar para confirmar a concessão do papel selecionado ao usuário.
  10. Conceda os outros papéis de acesso à instância do login do SO ao usuário no nível do projeto ou da organização, se ainda não tiver feito isso.

Agora o usuário pode se conectar a instâncias do projeto que tenham o login do SO ativado.

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 à sua própria conta. Como alternativa, se você for administrador de domínio, use a API Directory para adicionar chaves SSH à conta de usuário na organização.

gcloud

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

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

gcloud compute os-login ssh-keys add \
    --key-file [KEY_FILE_PATH] \
    --ttl [EXPIRE_TIME]

em que:

  • [KEY_FILE_PATH] é o caminho para a chave SSH pública em sua estação de trabalho local. Verifique se a chave SSH pública está formatada corretamente. Se você usar PuTTYgen em sistemas Linux para gerar suas chaves públicas, use o formato public-openssh;
  • [EXPIRE_TIME] é uma sinalização opcional para configurar um prazo de validade para a chave SSH pública. Por exemplo, especifique 30m e a chave SSH expira em 30 minutos. As unidades válidas para essa sinalização são s para segundos, m para minutos, h para horas ou d para dias. Configure o valor como 0 para não indicar um 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]"
}

em que:

  • [ACCOUNT_EMAIL] é o endereço de e-mail que representa sua conta de usuário gerenciada;
  • [SSH_KEY] é a chave pública que você quer aplicar à conta. Verifique se a chave SSH pública está formatada corretamente. Se você usar PuTTYgen em sistemas Linux para gerar suas chaves públicas, use o formato public-openssh;
  • [EXPIRATION_TIMESTAMP] é o prazo de validade da chave em microssegundos desde a época.

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]"
  }
 ]
}

em que:

  • [USER_ID_KEY] é um código imutável para o usuário;
  • [SSH_KEY] é uma chave pública que você quer aplicar à conta. Verifique se a chave SSH pública está formatada corretamente. Se você usar PuTTYgen em sistemas Linux para gerar suas chaves públicas, use o formato public-openssh;
  • [EXPIRATION_TIMESTAMP] é o prazo de validade de uma chave em microssegundos desde a época.

Para remover todas as chaves de uma conta, especifique "sshPublicKeys": null como o corpo:

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
  "sshPublicKeys": null
}

em que [USER_ID_KEY] é um código imutável para o usuário.

Após adicionar as chaves à sua 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 sua conta, execute o comando gcloud compute os-login describe-profile:

gcloud compute os-login describe-profile

name: [ACCOUNT_EMAIL]
posixAccounts:
⋮
  username: [USER_NAME]
⋮

em que:

  • [ACCOUNT_EMAIL] é o endereço de e-mail que representa sua conta de usuário gerenciada;
  • [USER_NAME] é o nome de usuário para estabelecer conexões SSH. Por padrão, ele é gerado a partir de [ACCOUNT_EMAIL].

Como modificar contas de usuário usando a API Directory

Se você é um administrador da organização, pode modificar as configurações de login da instância para as contas de usuário, bem como muitas outras propriedades do usuário. Para saber como tornar um usuário um administrador, leia o guia da API Directory. Você pode usar essa API para adicionar e remover as chaves SSH de um usuário, modificar as informações da conta do POSIX e alterar o nome de usuário que os usuários utilizam para se conectar à instância.

Por exemplo, crie uma solicitação PUT para o método directory.users.update e especifique uma ou mais propriedades a serem alteradas na conta de usuário:

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
 "posixAccounts": [
   {
    "username": "[USER_NAME]",
    "uid": "[UID]",
    "gid": "[GID]",
    "homeDirectory": "[USER_HOME_PATH]",
    "shell": "[SHELL_PATH]"
   }
  ],
}

em que:

  • [USER_ID_KEY] é um código imutável para o usuário;
  • [USER_NAME] é o nome de usuário que o Compute Engine adiciona à instância para o usuário. Esse valor precisa ser exclusivo na sua organização;
  • [UID] é o código do usuário na instância para este usuário. Essa propriedade precisa ser um valor entre 1001 e 65000 ou um valor entre 65535 e 2147483647. O UID precisa ser exclusivo na sua organização;
  • [GID] é o código do grupo na instância a que este usuário pertence;
  • [USER_HOME_PATH] é o diretório inicial na instância para este usuário. Por exemplo, /home/example_username;
  • [SHELL_PATH] é o caminho para o shell padrão para o usuário depois que ele se conecta à instância. Por exemplo, /bin/bash ou /bin/sh.

Para saber mais sobre todas as propriedades que podem ser editadas na conta, leia a Referência da API Directory.

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 exclusividade. Por exemplo, se o e-mail do usuário associado ao perfil do Google for user@example.com, o nome de usuário gerado será user_example_com.

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

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

A seguir

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

Enviar comentários sobre…

Documentação do Compute Engine