Restrinja as chaves SSH das VMs

Este documento descreve como impedir que os utilizadores acedam a instâncias de máquinas virtuais (VMs) removendo e bloqueando chaves SSH de VMs.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

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

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Remova chaves SSH

Pode remover chaves SSH de VMs que usam o Início de sessão do SO e VMs que usam chaves SSH baseadas em metadados.

Remova chaves SSH de VMs que usam o Início de sessão do SO

As VMs que usam o Início de sessão do SO aceitam chaves SSH associadas à sua conta Google. Pode remover uma chave SSH pública da sua conta de utilizador através da CLI do Google Cloud ou da API OS Login. Se for administrador da sua organização, pode remover chaves SSH das contas de utilizador através da API Directory. O Compute Engine remove automaticamente as chaves expiradas da sua Conta Google.

gcloud

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

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

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

  3. Remova a chave da sua conta através do comando gcloud compute os-login ssh-keys remove:

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

    Substitua KEY pela chave pública de SSH que quer remover ou pela impressão digital do Início de sessão do SO da chave que quer remover.

REST

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

  1. Se não souber que 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 email associado à sua conta.

  2. Copie o valor fingerprint da chave que quer eliminar.

  3. Remova a chave da sua conta através do método users.sshPublicKeys.delete:

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

    Substitua o seguinte:

    • ACCOUNT_EMAIL: o endereço de email associado à sua conta
    • FINGERPRINT: a impressão digital SHA-256 da chave a remover

Remova chaves SSH de VMs que usam chaves baseadas em metadados

Pode remover uma chave SSH pública dos metadados do projeto ou da instância através da Google Cloud consola, da CLI gcloud ou da API Compute Engine.

Depois de remover a última chave dos metadados de um determinado utilizador ou quando a última chave nos metadados de um determinado utilizador expira, o Compute Engine elimina o ficheiro ~/.ssh/authorized_keys do utilizador na VM.

Aviso: se gerir chaves SSH nos metadados, pode interromper a capacidade dos membros do seu projeto de estabelecer ligação a VMs. Além disso, corre o risco de conceder aos utilizadores, incluindo utilizadores externos ao seu projeto, acesso não intencional a VMs. Para mais informações, consulte os riscos da gestão manual de chaves.

Remova uma chave pública dos metadados do projeto

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

Quando remove uma chave dos metadados através da CLI gcloud e da API Compute Engine, tem de obter a lista de chaves existentes, editar a lista de chaves para remover as chaves indesejadas e substituir as chaves antigas pela lista de chaves que quer manter, conforme explicado na secção seguinte.

Consola

Para remover uma chave pública de SSH dos metadados do projeto através da consola Google Cloud , faça o seguinte:

  1. Na Google Cloud consola, aceda à página Metadados.

    Aceda aos metadados

  2. Clique no separador Chaves SSH.

  3. Clique em Editar na parte superior da página.

  4. Navegue para a chave SSH que quer remover e clique no botão de eliminação junto à chave SSH.

    Repita este passo para cada chave SSH que quer remover.

  5. Clique em Guardar.

gcloud

Para remover uma chave pública de SSH dos metadados do projeto através da CLI gcloud, faça o seguinte:

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

    gcloud compute project-info describe
    

    O resultado é semelhante ao seguinte:

    ...
    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 ficheiro de texto na sua estação de trabalho.

  4. No ficheiro, cole a lista de chaves SSH que acabou de copiar e, em seguida, elimine todas as chaves que quer remover dos metadados do projeto.

  5. Guarde e feche o ficheiro.

  6. Execute o comando gcloud compute project-info add-metadata para definir o valor ssh-keys ao nível do projeto:

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

    Substitua KEY_FILE por uma das seguintes opções:

    • O caminho para o ficheiro que criou no passo anterior, se o projeto tiver chaves SSH existentes
    • O caminho para o novo ficheiro 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 através da 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 pelo ID do seu projeto.

    A resposta é semelhante à seguinte:

    ...
    "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 chaves SSH e elimine as chaves que quer remover.

  3. Use o comando 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • EXISTING_SSH_KEYS: a lista das chaves SSH que quer manter
    • FINGERPRINT: o valor de fingerprint da resposta do pedido projects.get

Remova 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.

Quando remove uma chave dos metadados através da CLI gcloud e da API Compute Engine, tem de obter a lista de chaves existentes, editar a lista de chaves para remover as chaves indesejadas e substituir as chaves antigas pela lista de chaves que quer manter, conforme explicado na secção seguinte.

Consola

Para remover uma chave SSH pública dos metadados da instância através da Google Cloud consola, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

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

  3. Clique em Edit.

  4. Na secção Chaves SSH, clique em Mostrar e editar. A secção expande-se para mostrar todas as chaves SSH públicas ao nível da instância.

  5. Clique no botão de eliminação junto à chave SSH que quer remover.

    Repita este passo para cada chave SSH que quer remover.

  6. Clique em Guardar.

gcloud

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

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

    gcloud compute instances describe VM_NAME
    

    Substitua VM_NAME pelo nome da VM para a qual tem de adicionar ou remover chaves SSH públicas.

    O resultado é semelhante ao seguinte:

    ...
    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 ficheiro de texto na sua estação de trabalho local.

  4. No ficheiro, cole a lista de chaves SSH que acabou de copiar e, em seguida, remova todas as chaves que quer eliminar.

  5. Guarde e feche o ficheiro.

  6. Execute o comando gcloud compute project-info add-metadata para definir o valor ssh-keys ao nível do projeto:

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

    Substitua o seguinte:

    • VM_NAME: a VM para a qual quer remover a chave SSH
    • KEY_FILE: o caminho para o ficheiro 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 através da API Compute Engine, faça o seguinte:

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

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • ZONE: a zona da VM para a qual está a adicionar uma chave SSH
    • VM_NAME: a VM para a qual está a adicionar uma chave SSH

    A resposta é semelhante à seguinte:

    ...
    "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 chaves SSH e elimine as chaves que quer remover.

  3. Use o comando 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • EXISTING_SSH_KEYS: o valor da chave ssh-keys da resposta do pedido projects.get
    • FINGERPRINT: o valor de fingerprint da resposta do pedido instances.get

Bloqueie as chaves SSH do projeto em VMs que usam chaves SSH baseadas em metadados

Pode impedir que as VMs aceitem chaves SSH armazenadas nos metadados do projeto bloqueando as chaves SSH do projeto nas VMs. Pode bloquear chaves SSH do projeto em VMs quando cria uma VM ou depois de criar uma VM.

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

Pode bloquear as chaves SSH do projeto nas VMs durante a criação das VMs através da Google Cloud consola, da CLI gcloud ou da API Compute Engine.

Consola

Para criar uma instância e impedir que aceite chaves SSH armazenadas nos metadados do projeto através da consola Google Cloud , faça o seguinte:

  1. Na Google Cloud consola, aceda à página Criar uma instância.

    Aceda a Criar uma instância

  2. Para bloquear chaves SSH do projeto, faça o seguinte:

    1. No menu de navegação, clique em Segurança.

    2. Expanda a secção Gerir acesso.

    3. Para desativar o Início de sessão do SO, desmarque a caixa de verificação Controlar o acesso à VM através de autorizações da IAM.

    4. Selecione a caixa de verificação Bloquear chaves SSH ao nível do projeto.

  3. Opcional: especifique outras opções de configuração. Para mais informações, consulte o artigo Opções de configuração durante a criação da instância.

  4. Para criar e iniciar a instância, clique em Criar.

gcloud

Para criar uma VM e impedir que aceite chaves SSH armazenadas nos metadados do projeto através da 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 aceite chaves SSH armazenadas nos metadados do projeto através do Compute Engine, crie um pedido POST para o método instances.insert:

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

Substitua o seguinte:

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

No corpo do pedido, indique os nomes de utilizador e as chaves SSH públicas na propriedade items:

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

Bloqueie chaves SSH do projeto numa VM após a criação da VM

Pode bloquear as chaves SSH do projeto nas VMs após a criação da VM através da Google Cloud consola, da CLI gcloud ou da API Compute Engine.

Consola

Para impedir que as VMs aceitem ligações de chaves SSH armazenadas nos metadados do projeto através da Google Cloud consola, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

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

  3. Clique em Edit.

  4. Em Chaves SSH, selecione a caixa de verificação Bloquear chaves SSH ao nível do projeto.

  5. Quando terminar de editar a definição de ligação para chaves SSH, clique em Guardar.

gcloud

Para impedir que as VMs aceitem ligações de chaves SSH armazenadas nos metadados do projeto através da CLI gcloud, faça o seguinte:

Execute o comando gcloud compute instances add-metadata:

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

Substitua VM_NAME pelo nome da VM para a qual quer bloquear chaves SSH públicas ao nível do projeto.

REST

Para impedir que as VMs aceitem ligações de chaves SSH armazenadas nos metadados do projeto através da API Compute Engine, faça o seguinte:

  1. Use o método instances.get para obter o fingerprint a partir dos metadados.

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • ZONE: a zona da VM para a qual está a adicionar uma chave SSH
    • VM_NAME: a VM para a qual está a adicionar uma chave SSH

    A resposta é semelhante à seguinte:

    ...
    "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 o seguinte:

    • PROJECT_ID é o ID do seu projeto
    • ZONE é a zona onde a sua instância está localizada
    • INSTANCE_NAME é a instância na qual quer bloquear chaves ao nível do projeto.
    • FINGERPRINT: o valor de fingerprint da resposta do pedido instances.get.

O que se segue?