Restringir chaves SSH de VMs


Este documento descreve como impedir que os usuários acessem instâncias de máquinas virtuais (VMs) removendo e bloqueando chaves SSH das VMs.

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

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

Remover chaves SSH

Você pode remover chaves SSH de VMs que usam login do sistema operacional e de VMs que usam chaves SSH baseadas em metadados .

Remover chaves SSH de VMs que usam login do sistema operacional

As VMs que usam o Login do SO aceitam chaves SSH associadas à sua conta do Google. Você pode remover uma chave SSH pública da sua conta de usuário usando a CLI do Google Cloud ou a API OS Login. Se você for administrador da sua organização, poderá remover chaves SSH de 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 deseja 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ê deseja 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ê deseja remover ou pela impressão digital de login do sistema operacional da chave que você deseja remover.

DESCANSAR

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

  1. Se você não sabe qual chave deseja remover, use o método users.getLoginProfile para visualizar 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ê deseja 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 o seguinte:

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

Remover chaves SSH de 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 Compute Engine.

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

Cuidado: Se você gerenciar chaves SSH em metadados, poderá interromper a capacidade dos membros do seu projeto de se conectarem às VMs. Além disso, você corre o risco de conceder aos usuários, incluindo usuários fora do seu projeto, acesso não intencional às VMs. Para obter 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, você deve recuperar 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 deseja 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 .

    Vá para Metadados

  2. Clique na guia Chaves SSH .

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

  4. Navegue até a chave SSH que deseja remover e clique no botão ao lado da chave SSH.

    Repita esta etapa para cada chave SSH que você deseja remover.

  5. 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 obter os metadados do projeto:

    gcloud compute project-info describe
    

    A saída é semelhante à 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 dos metadados ssh-keys .

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

  4. No arquivo, cole a lista de chaves SSH que você acabou de copiar e exclua as chaves que deseja 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 de ssh-keys para 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 que você criou na etapa anterior, se o projeto tivesse chaves SSH existentes
    • o caminho para seu novo arquivo de chave SSH pública, se o projeto não tiver chaves SSH existentes

DESCANSAR

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 de 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 chave SSH e exclua as chaves que deseja remover.

  3. Use o 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 você deseja manter
    • FINGERPRINT : o valor da 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, você deve recuperar 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 deseja 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 de instâncias de VM .

    Acesse as instâncias de VM

  2. Clique no nome da VM cuja chave você deseja remover.

  3. Clique em Editar .

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

  5. Clique no botão ao lado da chave SSH que você deseja remover.

    Repita esta etapa para cada chave SSH que você deseja remover.

  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 obter os metadados da VM:

    gcloud compute instances describe VM_NAME
    

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

    A saída é semelhante à 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 dos metadados ssh-keys .

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

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

  5. Salve e feche o arquivo.

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

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

    Substitua o seguinte:

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

DESCANSAR

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 obter os valores de 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 você está adicionando uma chave SSH
    • VM_NAME : a VM para a qual você está adicionando 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 chave SSH e exclua as chaves que deseja 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 o seguinte:

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

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

Você pode impedir que as VMs aceitem chaves SSH armazenadas nos metadados do projeto bloqueando as chaves SSH do projeto das VMs. Você pode bloquear chaves SSH do projeto 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 chaves SSH do projeto de VMs durante a criação da VM usando o console do Google Cloud, a CLI gcloud ou a API Compute Engine.

Console

Para criar uma instância e impedir que ela aceite chaves SSH armazenadas nos 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 .

    Vá para 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 seção Gerenciar acesso .

    3. Para desabilitar o login do sistema operacional, desmarque a caixa de seleção Controlar o acesso à VM por meio de permissões do IAM .

    4. Marque a caixa de seleção Bloquear chaves SSH em todo o projeto .

  3. Opcional: Especifique outras opções de configuração. Para obter mais informações, consulte 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 ela aceite chaves SSH armazenadas nos 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.

DESCANSAR

Para criar uma VM e impedir que ela aceite chaves SSH armazenadas nos 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 o seguinte:

  • 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 chaves SSH do projeto de VMs após a criação da VM usando o console do Google Cloud, a CLI gcloud ou a API Compute Engine.

Console

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

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

    Acesse as instâncias de VM

  2. Clique no nome da VM para a qual você deseja 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 nos metadados do projeto usando a 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 você deseja bloquear chaves SSH públicas em todo o projeto.

DESCANSAR

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

  1. Use o método instances.get para obter a fingerprint 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 você está adicionando uma chave SSH
    • VM_NAME : a VM para a qual você está adicionando 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 sua instância está localizada
    • INSTANCE_NAME é a instância em que você deseja bloquear as chaves de todo o projeto.
    • FINGERPRINT : o valor da fingerprint da resposta da solicitação instances.get .

O que vem a seguir?