Configurar o Login do SO para exigir certificados SSH para conexões SSH

As VMs que aceitam certificados do Login do SO também aceitam conexões de chaves e certificados SSH. Os certificados SSH são chaves SSH assinadas por outra chave confiável, neste caso, uma autoridade certificadora gerenciada pelo Login do SO. Este documento descreve como configurar VMs de Login do SO para exigir certificados SSH em conexões SSH e bloquear conexões de chaves SSH não assinadas.

Quando você configura o Login do SO para exigir certificados SSH para conexões com VMs, somente os certificados SSH assinados pela autoridade certificadora podem se conectar às VMs. As conexões de chaves SSH não assinadas são rejeitadas. Os certificados SSH expiram em cinco minutos. Depois disso, eles não podem mais ser usados para se conectar a VMs, e um novo certificado precisa ser gerado.

Recomendamos configurar o Login do SO para exigir certificados SSH para conexões SSH como uma camada extra de segurança contra usuários maliciosos. Os certificados SSH são de curta duração e válidos apenas para uma VM específica. Isso significa que, se eles forem comprometidos, a superfície e a janela de ataque serão significativamente menores do que as das chaves SSH de longa duração.

Se a sua organização usa a federação de identidade de colaboradores, consulte Usar a federação de identidade de colaboradores com o Login do SO para saber como ativar os certificados SSH na sua organização.

Antes de começar

  • Configure o Login do SO e atribua papéis do IAM do Login do SO.
  • Configure a autenticação, caso ainda não tenha feito isso. Com isso, você confirma sua identidade para acesso a serviços e APIs do Google Cloud . Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    Selecione a guia para como planeja usar as amostras nesta página:

    Console

    Quando você usa o console Google Cloud para acessar serviços Google Cloud e APIs, não é necessário configurar a autenticação.

    gcloud

    1. Instale a CLI do Google Cloud. Após a instalação, inicialize a Google Cloud CLI executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  • Defina uma região e uma zona padrão.

Limitações

  • A VM a que você está se conectando precisa ter o OpenSSH versão 7.4 ou mais recente para usar certificados SSH.

Exigir certificados SSH

É possível configurar o Login do SO para exigir certificados SSH em todas as conexões SSH com VMs de Login do SO no seu projeto ou em VMs únicas. Depois de configurar o Login do SO para exigir certificados SSH, as conexões SSH do console Google Cloud e da CLI gcloud usam certificados SSH por padrão. Se você não quiser configurar o Login do SO para exigir certificados, mas quiser usar certificados para se conectar a VMs, use ferramentas de terceiros, conforme descrito na seção Conectar-se a uma VM usando um certificado SSH.

Exigir certificados SSH para todas as VMs ativadas para o Login do SO em um projeto

Para exigir certificados SSH em todas as conexões com todas as VMs que usam o Login do SO no projeto, use o console do Google Cloud ou a CLI gcloud.

Console

Para exigir certificados SSH em todas as conexões com VMs ativadas para Login do SO, use o console Google Cloud para definir enable-oslogin e enable-oslogin-certificates como TRUE nos metadados do projeto:

  1. Acesse a página Metadados.

    Acessar a página "Metadados"

  2. Clique em Editar.

  3. Clique em Adicionar item.

    1. No campo Chave, digite enable-oslogin.
    2. No campo Valor, insira TRUE.
  4. Clique em Adicionar item.

    1. No campo Chave, digite enable-oslogin-certificates.
    2. No campo Valor, insira TRUE.
  5. Clique em Salvar.

gcloud

Para exigir certificados SSH em todas as conexões com VMs ativadas para Login do SO, use o comando gcloud compute project-info add-metadata para definir enable-oslogin=TRUE e enable-oslogin-certificates=TRUE nos metadados do projeto:

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

Exigir certificados SSH em uma única VM ativada para Login do SO

Para exigir certificados para todas as conexões SSH com uma única VM que usa o Login do SO, use o console Google Cloud ou a CLI gcloud.

Console

Para exigir certificados SSH em todas as conexões com uma única VM, use o consoleGoogle Cloud para definir enable-oslogin e enable-oslogin-certificates como TRUE nos metadados da instância:

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

    Acessar instâncias de VM

  2. Clique no nome da VM em que você quer exigir certificados SSH.

  3. Clique em Editar.

  4. Na seção Metadados, clique em Adicionar item.

    1. No campo Chave, digite enable-oslogin.
    2. No campo Valor, insira TRUE.
  5. Clique em Adicionar item.

    1. No campo Chave, digite enable-oslogin-certificates.
    2. No campo Valor, insira TRUE.
  6. Clique em Salvar.

gcloud

Para exigir certificados SSH em todas as conexões com uma única VM, use o comando gcloud compute instances add-metadata para definir enable-oslogin=TRUE e enable-oslogin-certificates=TRUE nos metadados da instância:

gcloud compute instances add-metadata VM_NAME \
    --metadata enable-oslogin=TRUE,enable-oslogin-certificates=TRUE

Substitua VM_NAME pelo nome da VM.

Conectar-se a uma VM usando um certificado SSH

Depois de configurar o Login do SO para exigir certificados SSH, as conexões SSH do console Google Cloud e da CLI gcloud usam certificados SSH por padrão. Se você não quiser configurar o Login do SO para exigir certificados, mas quiser usar certificados para se conectar a VMs, use ferramentas de terceiros.

Console

Para se conectar a VMs usando o SSH no navegador no console doGoogle Cloud , faça o seguinte:

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

    Acessar instâncias de VM

  2. Na lista de instâncias de máquina virtual, clique em SSH na linha da instância à qual você quer se conectar.

    Botão "SSH" ao lado do nome da instância.

gcloud

Use o comando gcloud beta compute ssh para se conectar a uma VM usando um certificado:

gcloud beta compute ssh VM_NAME

Substitua VM_NAME pelo nome da VM a que você quer se conectar.

Ferramentas de terceiros

Para usar um certificado SSH com um cliente SSH de terceiros, faça o seguinte:

  1. Crie uma chave SSH caso ainda não tenha uma.

  2. Assine sua chave SSH pública usando o método projects.locations.signSshPublicKey:

    POST https://oslogin.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION:signSshPublicKey
    
    {
     "ssh_public_key": "PUBLIC_KEY"
     "compute_instance": "COMPUTE_INSTANCE",
     "service_account": "SERVICE_ACCOUNT"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto que contém a VM a que você quer se conectar.
    • LOCATION: a região em que a VM a que você quer se conectar está localizada
    • PUBLIC_KEY: o conteúdo do arquivo da sua chave pública SSH.
    • COMPUTE_INSTANCE: a instância do Compute Engine a ser conectada, no formato projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID.
    • SERVICE_ACCOUNT: a conta de serviço anexada à instância. Exclua esse campo se a instância não tiver uma conta de serviço anexada.
  3. Copie o certificado SSH da saída do método projects.locations.signSshPublicKey e salve o conteúdo em um novo arquivo.

  4. Execute o comando a seguir para definir permissões no arquivo do certificado SSH:

    sudo chmod 600 FILE_NAME
    

    Substitua FILE_NAME pelo nome do arquivo.

  5. Conecte-se à VM usando o seguinte comando:

    ssh -i PATH_TO_PRIVATE_KEY -o CertificateFile=PATH_TO_SSH_CERTIFICATE USERNAME@EXTERNAL_IP
    

    Substitua:

    • PATH_TO_PRIVATE_KEY: o caminho para o arquivo da sua chave SSH particular.
    • PATH_TO_SSH_CERTIFICATE: o caminho para o arquivo do seu certificado SSH.
    • USERNAME: seu nome de usuário do Login do SO
    • EXTERNAL_IP: o endereço IP externo da VM.

Solução de problemas

Se não for possível se conectar às VMs configuradas para exigir certificados SSH, talvez seja devido a um dos seguintes motivos:

A seguir