Restringir chaves SSH de VMs


Este documento descreve como impedir que os usuários acessem instâncias de máquina virtual (VM, na sigla em inglês) removendo e bloqueando chaves SSH das VMs.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da 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 da seguinte maneira.

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

    Console

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

    gcloud

    1. Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init
    2. Defina uma região e uma zona padrão.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.

      Instale a Google Cloud CLI e inicialize-a executando o seguinte comando:

      gcloud init

Remover chaves SSH

É possível remover chaves SSH de VMs que usam o Login do SO e VMs que usam chaves SSH baseadas em metadados.

Remover chaves SSH de VMs que usam o login do SO

As VMs que usam o login do SO aceitam chaves SSH associadas à sua Conta do Google. É possível remover uma chave SSH pública da sua conta de usuário usando a Google Cloud CLI ou a API OS Login. Se você for administrador da sua organização, poderá remover as chaves SSH das contas de usuário usando a API Directory. O Compute Engine remove automaticamente as chaves expiradas da sua Conta do Google.

gcloud

Para remover uma chave SSH pública da sua conta, faça o seguinte:

  1. Se você não souber qual chave quer remover, execute o comando gcloud compute os-login describe-profile para visualizar todas as chaves associadas à sua conta:

    gcloud compute os-login describe-profile
    
  2. Copie o valor fingerprint da chave que você quer excluir.

  3. Remova a chave da sua conta usando o comando gcloud compute os-login ssh-keys remove:

    gcloud compute os-login ssh-keys remove --key=KEY
    

    Substitua KEY pela chave SSH pública que você quer remover ou a impressão digital do Login do SO da chave que você quer remover.

REST

Para remover uma chave SSH pública da sua conta, faça o seguinte:

  1. Se você não souber qual chave quer remover, use o método users.getLoginProfile para ver todas as chaves associadas à sua conta:

    GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
    

    Substitua ACCOUNT_EMAIL pelo endereço de e-mail associado à sua conta.

  2. Copie o valor fingerprint da chave que você quer excluir.

  3. Remova a chave da sua conta usando o método users.sshPublicKeys.delete:

    DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
    

    Substitua:

    • ACCOUNT_EMAIL: o endereço de e-mail associado à conta.
    • FINGERPRINT: a impressão digital SHA-256 da chave a ser removida

Remover chaves SSH das VMs que usam chaves baseadas em metadados

É possível remover uma chave SSH pública dos metadados do projeto ou da instância usando o Console do Google Cloud, a CLI gcloud ou a API do Compute Engine.

Depois que você remover a última chave dos metadados de um usuário específico ou se ela expirar, o Compute Engine excluirá o arquivo ~/.ssh/authorized_keys do usuário na VM.

Cuidado: se você gerenciar chaves SSH nos metadados, talvez impeça a conexão dos membros do projeto às VMs. Além disso, você corre o risco de conceder aos usuários, fora do projeto, acesso não intencional às VMs. Para mais informações, consulte riscos do gerenciamento manual de chaves.

Remover uma chave pública dos metadados do projeto

Remova uma chave SSH pública dos metadados do projeto para remover o acesso a todas as VMs de um projeto.

Ao remover uma chave dos metadados usando a CLI gcloud e a API Compute Engine, é preciso recuperar a lista de chaves, editar a lista de chaves para remover as chaves indesejadas e substituir as chaves antigas com a lista de chaves que você quer manter, conforme explicado na seção a seguir.

Console

Para remover uma chave SSH pública dos metadados do projeto usando o Console do Google Cloud, faça o seguinte:

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

    Acessar a página "Metadados"

  2. Em Chaves SSH, clique em Editar.

  3. Clique no botão de remoção ao lado da chave SSH.

    Chave pública do PuTTYgen.

  4. Clique em Salvar.

gcloud

Para remover uma chave SSH pública dos metadados do projeto usando a CLI gcloud, faça o seguinte:

  1. Execute o comando gcloud compute project-info describe para receber os metadados do projeto:

    gcloud compute project-info describe
    

    A resposta será semelhante a:

    ...
    metadata:
      ...
      - key: ssh-keys
        value: |-
          cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
          baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Copie o valor de metadados ssh-keys.

  3. Crie e abra um novo arquivo de texto na estação de trabalho.

  4. No arquivo, cole a lista de chaves SSH que você acabou de copiar e exclua as chaves que quer remover dos metadados do projeto.

  5. Salve e feche o arquivo.

  6. Execute o comando gcloud compute project-info add-metadata para definir o valor ssh-keys de todo o projeto:

    gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
    

    Substitua KEY_FILE por um dos seguintes:

    • O caminho para o arquivo criado na etapa anterior, se o projeto tiver chaves SSH atuais;
    • O caminho para o novo arquivo de chave SSH pública, se o projeto não tiver chaves SSH existentes.

REST

Para remover uma chave SSH pública dos metadados do projeto usando a API Compute Engine, faça o seguinte:

  1. Use o método projects.get para obter os valores fingerprint e ssh-keys dos metadados.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    Substitua PROJECT_ID pela ID do seu projeto.

    A resposta é semelhante a:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
     {
      "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
     }
    ]
    ...
    
  2. Copie a lista de valores de chave SSH e exclua as chaves que você quer remover.

  3. Use projects.setCommonInstanceMetadata para remover as chaves SSH.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto
    • EXISTING_SSH_KEYS: a lista de chaves SSH que você quer manter
    • FINGERPRINT: o valor do fingerprint da resposta da solicitação projects.get

Remover uma chave SSH pública dos metadados da instância

Remova uma chave SSH pública dos metadados da instância para remover o acesso a uma única VM.

Ao remover uma chave dos metadados usando a CLI gcloud e a API Compute Engine, é preciso recuperar a lista de chaves, editar a lista de chaves para remover as chaves indesejadas e substituir as chaves antigas com a lista de chaves que você quer manter, conforme explicado na seção a seguir.

Console

Para remover uma chave SSH pública dos metadados da instância usando o Console do Google Cloud, faça o seguinte:

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

    Acessar a página "Metadados"

  2. Clique no nome da VM para a qual você quer remover uma chave.

  3. Clique em Editar.

  4. No painel central, em Chaves SSH, clique em Mostrar e editar. A seção é expandida e mostra todas as chaves SSH públicas no nível da instância.

  5. Clique no botão de remoção ao lado da chave que você quer remover:

    Chave pública do PuTTYgen.

  6. Clique em Salvar.

gcloud

Para remover uma chave SSH pública dos metadados da instância usando a CLI gcloud, faça o seguinte:

  1. Execute o comando gcloud compute instances describe para receber os metadados da VM:

    gcloud compute instances describe VM_NAME
    

    Substitua VM_NAME pelo nome da VM na qual você precisa adicionar ou remover chaves SSH públicas.

    A resposta será semelhante a:

    ...
    metadata:
    ...
    - key: ssh-keys
     value: |-
       cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
       baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Copie o valor de metadados ssh-keys.

  3. Crie e abra um novo arquivo de texto na estação de trabalho local.

  4. No arquivo, cole a lista de chaves SSH que você acabou de copiar e remova as chaves que quiser excluir.

  5. Salve e feche o arquivo.

  6. Execute o comando gcloud compute project-info add-metadata para definir o valor ssh-keys de todo o projeto:

    gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
    

    Substitua:

    • VM_NAME: a VM para onde você quer remover a chave SSH;
    • KEY_FILE: o caminho para o arquivo que contém a lista de todas as chaves SSH do projeto

REST

Para remover uma chave SSH pública dos metadados da instância usando a API Compute Engine, faça o seguinte:

  1. Use o método instances.get para receber os valores fingerprint e ssh-keys dos metadados.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Substitua:

    • PROJECT_ID: o ID do projeto
    • ZONE: a zona da VM à qual você está adicionando uma chave SSH;
    • VM_NAME: a VM a que você está adicionando uma chave SSH.

    A resposta é semelhante a:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. Copie a lista de valores de chave SSH e exclua as chaves que você quer remover.

  3. Use instances.setMetadata para remover as chaves SSH.

    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Substitua:

    • PROJECT_ID: o ID do projeto
    • EXISTING_SSH_KEYS: o valor da chave ssh-keys da resposta da solicitação projects.get;
    • FINGERPRINT: o valor do fingerprint da resposta da solicitação instances.get

Bloquear chaves SSH do projeto de VMs que usam chaves SSH baseadas em metadados

Para impedir que as VMs aceitem chaves SSH armazenadas nos metadados do projeto, bloqueie as chaves SSH do projeto das VMs. É possível bloquear chaves SSH de VMs ao criar uma VM ou depois de criar uma VM.

Bloquear chaves SSH do projeto de uma VM durante a criação da VM

É possível bloquear as chaves SSH do projeto nas VMs durante a criação da VM, por meio do Console do Google Cloud, da CLI gcloud ou da API Compute Engine.

Console

Para criar uma VM e impedir que ela aceite chaves SSH armazenadas em metadados do projeto usando o Console do Google Cloud, faça o seguinte:

  1. No console do Google Cloud, acesse a página Criar uma instância.

    Acesse "Criar uma instância"

  2. Especifique os detalhes da VM.

  3. Expanda a seção Opções avançadas e faça o seguinte:

    1. Expanda a seção Segurança.

    2. Marque Bloquear chaves SSH do projeto inteiro.

  4. Para criar e iniciar a VM, clique em Criar.

gcloud

Para criar uma VM e impedir que ela aceite chaves SSH armazenadas em metadados do projeto usando a CLI gcloud, use o comando gcloud compute instances create:

gcloud compute instances create VM_NAME \
    --metadata block-project-ssh-keys=TRUE

Substitua VM_NAME pelo nome da nova VM.

REST

Para criar uma VM e impedir que ela aceite chaves SSH armazenadas em metadados do projeto usando o Compute Engine, crie uma solicitação POST para o método instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Substitua:

  • PROJECT_ID: o ID do projeto;
  • ZONE: a zona da VM;

No corpo da solicitação, forneça nomes de usuário e chaves SSH públicas na propriedade items:

...
{
 "items": [
    {
     "key": "block-project-ssh-keys",
     "value": TRUE
    }
   ]
}
...

Bloquear chaves SSH do projeto de uma VM após a criação da VM

É possível bloquear as chaves SSH do projeto nas VMs após a criação das VMs usando o console do Google Cloud, a gcloud CLI ou a API Compute Engine.

Console

Para impedir que as VMs aceitem conexões de chaves SSH armazenadas em metadados do projeto usando o Console do Google Cloud, faça o seguinte:

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

    Acessar a página "Metadados"

  2. Clique no nome da VM para bloquear as chaves SSH do projeto.

  3. Clique em Editar.

  4. Em Chaves SSH, marque a caixa de seleção Bloquear chaves SSH em todo o projeto.

  5. Quando terminar de editar a configuração de conexão para chaves SSH, clique em Salvar.

gcloud

Para impedir que as VMs aceitem conexões de chaves SSH armazenadas em metadados do projeto usando a gcloud CLI, faça isto:

Execute o gcloud compute instances add-metadatacomando:

gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE

Substitua VM_NAME pelo nome da VM para a qual você quer bloquear chaves SSH públicas em todo o projeto.

REST

Para impedir que as VMs aceitem conexões de chaves SSH armazenadas em metadados do projeto usando a API Compute Engine, faça o seguinte:

  1. Use o método instances.get para receber o fingerprint dos metadados.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Substitua:

    • PROJECT_ID: o ID do projeto
    • ZONE: a zona da VM à qual você está adicionando uma chave SSH;
    • VM_NAME: a VM a que você está adicionando uma chave SSH.

    A resposta é semelhante a:

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Use o método instances.setMetadata para definir block-project-ssh-keys como TRUE:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "block-project-ssh-keys",
      "value": TRUE
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Substitua:

    • PROJECT_ID é o código do projeto;
    • ZONE é a zona em que a instância está localizada;
    • INSTANCE_NAME é a instância em que você quer bloquear as chaves em todo o projeto;
    • FINGERPRINT: o valor de fingerprint da resposta da solicitação instances.get.

A seguir