Como gerenciar chaves SSH em metadados

Neste guia, mostramos como controlar o acesso a instâncias do Linux por meio da criação de chaves SSH e da edição de metadados de chave SSH pública.

Para saber como se conectar a instâncias, consulte Como se conectar a instâncias.

Antes de começar

Permissões necessárias para a tarefa

Para executar esta tarefa, é preciso ter as permissões abaixo.

  • compute.instances.setMetadata na instância, para configurar metadados na instância;
  • compute.projects.setCommonInstanceMetadata no projeto, para configurar metadados do projeto todo.
  • iam.serviceAccounts.actAs no projeto, para configurar metadados do projeto todo.

Riscos do gerenciamento manual de chaves

Se você criar e gerenciar chaves SSH públicas por meio do Console do GCP, da ferramenta de linha de comando gcloud ou da API, é preciso monitorar as chaves usadas e excluir as chaves SSH públicas para usuários sem permissão de acesso. Por exemplo, se um membro da equipe deixar o projeto, remova as chaves SSH públicas dos metadados para que ele não possa continuar a acessar as instâncias.

Além disso, especificar incorretamente a ferramenta gcloud ou as chamadas de API pode limpar todas as chaves SSH públicas do projeto ou das instâncias, o que interrompe as conexões dos membros do projeto.

Se você não tem certeza se quer gerenciar as próprias chaves, use as ferramentas do Compute Engine para se conectar às instâncias.

Visão geral

Ao criar e gerenciar chaves SSH, você permite que os usuários acessem uma instância do Linux por meio de ferramentas de terceiros.

Uma chave SSH consiste nos seguintes arquivos:

  • um arquivo de chave SSH pública aplicado a metadados da instância ou a metadados de todo o projeto
  • um arquivo de chave SSH particular armazenado pelo usuário nos dispositivos locais

Se um usuário apresentar uma chave SSH particular, ele poderá usar uma ferramenta de terceiros para se conectar a qualquer instância configurada com o arquivo de chave SSH público correspondente, mesmo que não seja membro do projeto no Cloud Platform. Portanto, controle as instâncias acessadas por um usuário, alterando os metadados da chave SSH pública para uma ou mais instâncias.

Para editar metadados da chave SSH pública:

  1. Decida qual ferramenta você usará para editar metadados:

  2. Se for necessário adicionar usuários a uma instância do Linux, prepare as chaves SSH públicas do usuário com os seguintes processos:

  3. Edite metadados de chave SSH pública para adicionar usuários a uma instância do Linux ou removê-los.

  4. Conecte-se à sua instância Linux por meio de uma ferramenta de terceiros para garantir que cada chave SSH pública seja adicionada ou removida corretamente. Um usuário só pode se conectar a uma instância se a chave SSH pública estiver disponível para a instância no servidor de metadados e se ele tiver a chave SSH particular correspondente.

Como criar uma nova chave SSH

Caso você não tenha um arquivo de chave SSH particular existente e um arquivo de chave SSH pública correspondente, gere uma nova chave SSH. Para usar uma chave SSH existente, localize o arquivo de chave SSH pública.

Linux e macOS

Nas estações de trabalho Linux ou macOS, gere uma chave com a ferramenta ssh-keygen.

  1. Abra um terminal em sua estação de trabalho e use o comando ssh-keygen para gerar uma nova chave. Especifique a sinalização -C para adicionar um comentário com seu nome de usuário.

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
    

    em que:

    • [KEY_FILENAME] é o nome que você quer usar para os arquivos de chave SSH. Por exemplo, um nome de arquivo de my-ssh-key gera um arquivo de chave particular denominado my-ssh-key e um arquivo de chave pública denominado my-ssh-key.pub.
    • [USERNAME] é o usuário a quem você aplicará esta chave SSH.

    Esse comando gera um arquivo de chave SSH particular e uma chave SSH pública correspondente com a seguinte estrutura:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    em que:

    • [KEY_VALUE] é o valor da chave que você gerou.
    • [USERNAME] é o usuário a quem essa chave se aplica.
  2. Restrinja o acesso à chave particular para que somente você possa ler a chave e para que ninguém possa gravar dados nela.

    chmod 400 ~/.ssh/[KEY_FILENAME]
    

    em que [KEY_FILENAME] é o nome que você usou para seus arquivos de chave SSH.

Repita este processo para cada usuário que precisar de uma nova chave. Em seguida, localize as chaves SSH públicas criadas, bem como todas as chaves SSH públicas existentes que você pretende adicionar a um projeto ou instância.

Windows

O Windows não tem uma ferramenta integrada para gerar chaves SSH. Por isso, use uma ferramenta de terceiros para gerar chaves SSH, caso você esteja em uma estação de trabalho do Windows. Aqui, você aprende a gerar chaves SSH com a ferramenta PuTTYgen.

  1. Faça o download do puttygen.exe.

  2. Execute o PuTTYgen. Neste exemplo, basta executar o arquivo puttygen.exe do download que você fez. Uma janela é aberta para que você defina as configurações da geração de chaves.

  3. Clique em Gerar e siga as instruções na tela para gerar uma nova chave. Na maioria dos casos, os parâmetros padrão estão corretos, mas as chaves precisam ser de, pelo menos, 2.048 bits. Quando você terminar de gerar a chave, o valor da chave pública será exibido na ferramenta.

  4. Na seção de Comentários sobre a chave, substitua o texto existente pelo nome do usuário a quem você aplicará a chave.

  5. Opcionalmente, insira uma senha longa de chave para proteger essa chave.

  6. Clique em Salvar chave privada para gravar sua chave em um arquivo com uma extensão .ppk.

  7. Clique em Salvar chave pública para gravar sua chave pública em um arquivo para uso posterior. Mantenha a janela PuTTYgen aberta por enquanto.

    A chave pública formatada corretamente está disponível na parte superior da tela do PuTTYgen:

    Captura de tela da chave pública PuTTYgen

    Essa chave pública tem a seguinte estrutura:

    ssh-rsa [KEY_VALUE] [USERNAME]
    

    em que:

    • [KEY_VALUE] é o valor da chave que você gerou.
    • [USERNAME] é o usuário a quem essa chave se aplica.

Repita esse processo para cada usuário para quem é preciso criar uma chave. Em seguida, caso você tenha outras chaves SSH públicas para usuários a quem você pretende adicionar um projeto ou instância, localize agora as chaves públicas deles. Caso contrário, formate as chaves SSH públicas que você criou.

Como localizar uma chave SSH

Há diversas razões pelas quais você precisa localizar uma chave SSH. Por exemplo, para adicionar a chave SSH pública de um usuário a um projeto ou instância, é preciso acessar o arquivo de chave pública da chave dele. Como alternativa, localize seu arquivo de chave SSH particular para se conectar a uma instância do Linux.

Quando uma chave SSH é criada, ela é salva em um local padrão. Os locais e nomes padrão dos seus arquivos de chaves SSH públicas e particulares dependem das ferramentas usadas para criar essa chave.

Linux e macOS

Quando uma chave é criada em uma estação de trabalho Linux ou macOS com a ferramenta ssh-keygen, sua chave é salva nos seguintes locais:

  • Arquivo de chave pública: ~/.ssh/[KEY_FILENAME].pub
  • Arquivo de chave particular: ~/.ssh/[KEY_FILENAME]

em que [KEY_FILENAME] é o nome do arquivo da chave SSH, configurada no momento da criação da chave.

Para adicionar ou remover a chave SSH pública dos metadados do projeto ou da instância, formate o arquivo de chave SSH pública.

Windows

Se você criou uma chave na estação de trabalho do Windows usando a ferramenta PuTTYgen, seu arquivo de chave pública e o arquivo de chave particular foram salvos nos locais designados nos seguintes formatos:

  • chave pública: [PUBLIC_KEY_FILENAME]
  • chave particular: [PRIVATE_KEY_FILENAME].ppk

em que [PUBLIC_KEY_FILENAME] e [PRIVATE_KEY_FILENAME] são os nomes dos arquivos de chaves SSH públicas e particulares, configuradas quando a chave foi salva pela primeira vez.

Uma chave SSH pública padrão criada com PuTTYgen deve ter o seguinte formato:

ssh-rsa [KEY_VALUE] [USERNAME]

em que:

  • [KEY_VALUE] é o valor da chave SSH pública.
  • [USERNAME] é o usuário na instância a quem você aplicou a chave.

Para ver sua chave SSH pública PuTTYgen com a formatação correta:

  1. Execute o PuTTYgen. Se você não tiver o PuTTYgen, faça o download e execute o puttygen.exe.

  2. Clique em Carregar para selecionar e abrir o arquivo de chave SSH pública.

  3. Após carregar o arquivo de chave pública, o valor da chave SSH pública formatado corretamente fica disponível na parte superior da tela do PuTTYgen:

    Captura de tela da chave pública PuTTYgen

Para adicionar ou remover a chave SSH pública dos metadados do projeto ou da instância, formate o arquivo de chave SSH pública.

gcloud

Como você já está conectado a uma instância pela ferramenta gcloud, suas chaves já foram geradas e aplicadas no seu projeto ou instância. Os arquivos de chaves estão disponíveis nos seguintes locais:

  • Linux e macOS:
    • chave pública: $HOME/.ssh/google_compute_engine.pub
    • chave particular: $HOME/.ssh/google_compute_engine
  • Windows:
    • chave pública: C:\Users\[USERNAME]\.ssh\google_compute_engine.pub
    • chave particular: C:\Users\[USERNAME]\.ssh\google_compute_engine

em que [USERNAME] é seu nome de usuário na estação de trabalho local.

Para ver o local em que suas chaves SSH públicas foram aplicadas, procure a chave pública em metadados do projeto e metadados da instância. Para adicionar ou remover a chave SSH pública dos metadados do projeto ou da instância, primeiro formate o arquivo da chave SSH pública.

Como formatar arquivos de chave SSH pública

Para fazer o upload das chaves SSH públicas para os metadados do projeto ou da instância, verifique o formato de cada arquivo de chave SSH pública que você pretende adicionar.

Dependendo da ferramenta usada para editar metadados, formate suas chaves para que funcionem com o Console do GCP, a ferramenta de linha de comando gcloud ou os métodos de API. Se você quiser, as chaves SSH públicas também poderão ser alteradas para adicionar, editar ou remover um prazo de validade.

Console

Para verificar o formato de uma chave SSH pública:

  1. Localize e abra o arquivo da chave SSH pública.

  2. Verifique o formato de arquivo da chave SSH pública.

    • Se uma chave SSH pública tem um tempo de expiração, deve ter o seguinte formato:

      ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      em que:

      • [KEY_VALUE] é o valor da chave SSH pública.
      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
      • [EXPIRE_TIME] é um valor no formato ISO 8601. Por exemplo: 2018-12-04T20:12:00+0000.
    • Caso contrário, a chave SSH pública deve ter o seguinte formato:

      ssh-rsa [KEY_VALUE] [USERNAME]

      em que:

      • [KEY_VALUE] é o valor da chave SSH pública.
      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
  3. Se a chave não corresponde a um dos formatos acima ou se você quer adicionar, editar ou remover um prazo de validade, siga as instruções abaixo para formatar a chave SSH pública. Caso contrário, deixe o arquivo aberto e adicione a chave pública SSH aos metadados do projeto ou da instância.

Para formatar uma chave SSH pública para o console:

  1. Faça uma cópia do arquivo da chave pública. Use essa cópia no Compute Engine e mantenha o arquivo original para as outras configurações do SSH.

  2. Abra a cópia do seu arquivo de chave pública.

  3. Modifique o arquivo da chave pública para que ele tenha o seguinte formato:

    ssh-rsa [KEY_VALUE] [USERNAME]

    em que:

    • [KEY_VALUE] é o valor da chave SSH pública.
    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.

    Alternativamente, para que a chave SSH pública tenha um prazo de validade, modifique o arquivo para corresponder ao seguinte formato:

    ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    em que:

    • [KEY_VALUE] é o valor da chave SSH pública.
    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
    • [EXPIRE_TIME] é um valor no formato ISO 8601. Por exemplo: 2018-12-04T20:12:00+0000.
  4. Salve as alterações feitas e deixe o arquivo aberto.

Agora você está pronto para adicionar a chave SSH pública aos metadados do projeto ou da instância .

gcloud ou API

Para verificar o formato de uma chave SSH pública:

  1. Localize e abra o arquivo da chave SSH pública.

  2. Verifique o formato de arquivo da chave SSH pública.

    • Se uma chave SSH pública tem um tempo de expiração, deve ter o seguinte formato:

      [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

      em que:

      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
      • [KEY_VALUE] é o valor da chave SSH pública.
      • [EXPIRE_TIME] é um valor no formato ISO 8601. Por exemplo: 2018-12-04T20:12:00+0000.
    • Caso contrário, a chave SSH pública deve ter o seguinte formato:

      [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

      em que:

      • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
      • [KEY_VALUE] é o valor da chave SSH pública.
  3. Se sua chave não corresponde a um dos formatos acima ou se você quer adicionar, editar ou remover um tempo de expiração, siga as instruções abaixo para formatar a chave SSH pública. Caso contrário, deixe o arquivo aberto e adicione a chave SSH pública aos metadados do projeto ou da instância.

Para formatar uma chave SSH pública para a ferramenta gcloud ou a API:

  1. Faça uma cópia do seu arquivo de chave pública. Use essa cópia no Compute Engine e mantenha o arquivo original para as outras configurações do SSH.

  2. Abra a cópia do seu arquivo de chave pública. Por padrão, esse arquivo deve ter o seguinte formato:

    ssh-rsa [KEY_VALUE] [USERNAME]

    em que:

    • [KEY_VALUE] é o valor da chave SSH pública.
    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
  3. Copie o nome de usuário, encontrado no final do arquivo e cole-o no início do arquivo seguido de dois-pontos. Esse arquivo de chave SSH pública agora deve ter o seguinte formato:

    [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]

    em que:

    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
    • [KEY_VALUE] é o valor da chave SSH pública.
  4. Opcionalmente, defina o tempo de expiração da chave excluindo o segundo [USERNAME] e anexando google-ssh ao final do arquivo da chave seguido pelos campos userName e expireOn no JSON.

    [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}

    em que:

    • [USERNAME] é o usuário da chave SSH, especificado quando ela foi criada.
    • [KEY_VALUE] é o valor da chave SSH pública.
    • [EXPIRE_TIME] é um valor no formato ISO 8601. Por exemplo: 2018-12-04T20:12:00+0000.
  5. Salve as alterações feitas e deixe o arquivo aberto.

Agora você está pronto para adicionar a chave SSH pública aos metadados do projeto ou da instância.

Como editar metadados de chave SSH pública

O acesso do usuário a uma instância do Linux por meio de ferramentas de terceiros é determinado pelas chaves SSH públicas disponíveis para a instância. Controle chaves SSH públicas disponíveis para uma instância do Linux editando os metadados, onde são armazenadas suas chaves SSH públicas e informações relacionadas. Há três tipos de metadados para suas chaves SSH públicas:

  • Chaves públicas SSH em todo o projeto: use esses metadados para oferecer acesso geral aos usuários: a capacidade de se conectar à maioria das instâncias no projeto.
  • Permitir ou bloquear chaves SSH públicas em todo o projeto: use esse valor de metadados para bloquear ou permitir chaves SSH públicas em todo o projeto em uma instância específica. Por padrão, uma instância aceita todas as chaves SSH públicas de todo o projeto. Bloqueie as chaves SSH públicas em todo o projeto para restringir a instância a apenas usuários com chaves SSH públicas de instância.
  • Chaves SSH públicas de instância: use esses metadados para oferecer acesso especial aos usuários: a capacidade de se conectar a uma instância específica no projeto, mesmo que bloqueiem as chaves SSH públicas em todo o projeto.

Como adicionar ou remover chaves SSH públicas em todo o projeto

Use chaves SSH públicas em todo o projeto para oferecer aos usuários acesso geral a uma instância do Linux. Chaves SSH públicas em todo o projeto proporcionam aos usuários acesso a todas as instâncias do Linux em um projeto que permite chaves SSH públicas em todo o projeto. Quando uma instância bloqueia chaves SSH públicas em todo o projeto, o usuário não consegue usar a própria chave para se conectar à instância, a menos que essa chave também seja adicionada aos metadados da instância.

Console

Para adicionar ou remover chaves SSH públicas em todo o projeto a partir do Console do GCP:

  1. No Console do Google Cloud Platform, acesse a página de metadados do projeto.

    Ir para a página de metadados

  2. Em Chaves SSH, clique em Editar.

  3. Modifique as chaves SSH públicas em todo o projeto:

    • Para adicionar uma chave SSH pública, clique em Adicionar item na parte inferior da página. Isso produz uma caixa de texto. Copie o conteúdo do arquivo de chave SSH pública e cole-o na caixa de texto. Repita esse processo para cada chave SSH pública que você quer adicionar.
    • Para remover uma chave SSH pública, clique no botão de remoção ao lado dela:

      Captura de tela da chave pública PuTTYgen

      Repita esse processo para cada chave SSH pública que você quer remover.

  4. Quando terminar, clique em Salvar na parte inferior da página.

gcloud

Veja como adicionar ou remover chaves SSH públicas em todo o projeto com a ferramenta gcloud:

  1. Se já existem chaves SSH públicas em todo o projeto, consiga essas chaves SSH públicas dos metadados:

    1. Consiga os metadados existentes para o projeto:

      gcloud compute project-info describe

    2. Na saída, procure o valor de metadados ssh-keys:

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...

      em que:

      • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves existentes;
      • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chave pública já aplicados ao projeto.
    3. Copie as chaves SSH públicas.

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

  3. No arquivo, crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados do projeto. Se já existem chaves no projeto, todas as chaves não incluídas na sua lista são removidas.

    Por exemplo, a lista de amostras abaixo remove a chave de [USERNAME_1] porque a chave SSH foi omitida. Também mantém a chave SSH para [USERNAME_2] e adiciona a chave SSH para [USERNAME_3] porque as chaves SSH estão incluídas na lista.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves SSH públicas;
    • [EXISTING_KEY_VALUE_1] é um valor de chave pública para uma chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é um valor de chave pública para uma chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é um valor de chave pública para uma chave SSH que você quer adicionar.
  4. Salve e feche o arquivo.

  5. No prompt de comando, use o comando compute project-info add-metadata para configurar o valor de ssh-keys em todo o projeto. Inclua a sinalização --metadata-from-file e especifique o caminho do arquivo da lista.

    gcloud compute project-info add-metadata --metadata-from-file ssh-keys=[LIST_PATH]
    

    em que [LIST_PATH] é o caminho para sua lista de chaves SSH públicas.

API

Adicione ou remova chaves públicas em todo projeto usando o método instances.setMetadata.

  1. Use o método projects.get para receber o valor de metadados fingerprint. Para manter as chaves existentes em todo o projeto, receba os valores ssh-keys existentes.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    em que:

    • [PROJECT_ID] é o código exclusivo do projeto;
    • [FINGERPRINT] é o código exclusivo dessa configuração de metadados, que impede você de substituir alterações simultâneas acidentalmente;
    • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves existentes;
    • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chave pública já aplicados ao projeto.
  2. Crie uma lista de todas as chaves SSH públicas que você pretende adicionar ou manter nos metadados em todo projeto. Se você tem atualmente chaves SSH públicas nos metadados de todo o projeto, todas as chaves que você não inclui na lista são removidas.

    Para este exemplo, o arquivo contém um novo valor [KEY_VALUE] seguido por um dos valores de chave existentes encontrados na etapa anterior. O [EXISTING_KEY_VALUE_1] é deixado de fora e é removido da instância na próxima etapa. Use caracteres \n para separar cada valor de chave.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    em que:

    • [USERNAME_1] , [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é um valor de chave pública para uma chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é um valor de chave pública para uma chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é um valor de chave pública para uma chave SSH que você quer adicionar.
  3. Use o método projects.setcommoninstancemetadata para definir o valor ssh-keys em todo o projeto. Inclua o valor fingerprint para não modificar as alterações simultâneas feitas nesse valor de metadados.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/setCommonInstanceMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    em que:

    • [PROJECT_ID] é o código exclusivo do projeto;
    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é um valor de chave pública para uma chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é um valor de chave pública para uma chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é um valor de chave pública para uma chave SSH que você quer adicionar;
    • [FINGERPRINT] é a impressão digital adquirida anteriormente com o método projects.get.

Quando terminar, teste suas alterações tentando se conectar à instância do Linux por meio de ferramentas de terceiros.

Se encontrar problemas, verifique os metadados da instância a qual você está tentando se conectar. Se os metadados da instância estão configurados para bloquear chaves SSH em todo o projeto ou têm um valor obsoleto sshKeys exclusivo da instância, a instância ignora todas as chaves SSH do projeto. Para aplicar chaves do projeto inteiro em uma instância, verifique se a instância permite chaves SSH públicas em todo projeto e, quando presente, remova o valor obsoleto sshKeys exclusivo da instância dos metadados da instância.

Como permitir ou bloquear chaves SSH públicas em todo o projeto de uma instância do Linux

Bloqueie as chaves SSH públicas em todo o projeto na instância para que ela ignore essas chaves e use somente as chaves no nível da instância. Isso permitirá que somente usuários cuja chave pública SSH é armazenada em metadados no nível da instância acessem a instância. Para que sua instância use chaves SSH públicas do projeto e da instância, defina os metadados da instância para permitir chaves SSH em todo o projeto. Isso possibilita que qualquer usuário, que tenha uma chave SSH pública armazenada em metadados em todo o projeto ou na instância, acesse a instância.

Console

Para permitir ou bloquear chaves SSH públicas em todo o projeto no console do GCP:

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

    Acessar a página "Instâncias"

  2. Clique no nome da instância que você quer modificar.

  3. Clique em Editar na barra de ferramentas.

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

    • Para impedir que usuários com chaves SSH em todo o projeto se conectem a essa instância, selecione Bloquear chaves SSH em todo o projeto.
    • Para permitir que usuários com chaves SSH em todo o projeto se conectem a essa instância, desmarque Bloquear chaves SSH em todo o projeto.
  5. Quando terminar, clique em Salvar na parte inferior da página.

gcloud

Para permitir ou bloquear chaves SSH públicas em todo o projeto de uma instância do Linux, adicione o valor de metadados block-project-ssh-keys à instância:

  • Para bloquear chaves SSH públicas em todo o projeto, defina o valor de metadados como TRUE:

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=TRUE
    

    em que [INSTANCE_NAME] é o nome da instância em que você quer bloquear chaves públicas SSH em todo o projeto.

  • Para permitir chaves SSH públicas em todo o projeto, defina o valor dos metadados como FALSE:

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata block-project-ssh-keys=FALSE
    

    em que [INSTANCE_NAME] é o nome da instância em que você quer permitir chaves SSH públicas em todo o projeto.

API

Para bloquear ou permitir chaves SSH públicas em todo o projeto de uma instância do Linux:

  • Para bloquear as chaves SSH públicas em todo o projeto, adicione o valor de metadados block-project-ssh-keys à instância e defina-o como TRUE. Esse valor de metadados bloqueia todas as chaves de todo o projeto e impede que funcionem nessa instância para que apenas chaves de nível da instância funcionem.

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

    em que:

    • [PROJECT_ID] é o código exclusivo do projeto;
    • [ZONE] é a zona em que o disco está;
    • [INSTANCE_NAME] é a instância em que você quer bloquear as chaves do projeto;
    • [FINGERPRINT] é o código exclusivo dessa configuração específica de metadados. Ele impede que você substitua alterações simultâneas acidentalmente.
  • Para permitir chaves SSH públicas em todo o projeto, adicione o valor de metadados de block-project-ssh-keys à instância e defina-o como FALSE. Esse valor de metadados permite que as chaves de todo o projeto (bem como as chaves no nível da instância) funcionem nessa instância.

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

    em que:

    • [PROJECT_ID] é o código exclusivo do projeto;
    • [ZONE] é a zona em que o disco está;
    • [INSTANCE_NAME] é a instância na qual você quer permitir chaves de todo o projeto;
    • [FINGERPRINT] é o código exclusivo dessa configuração específica de metadados. Ele impede que você substitua alterações simultâneas acidentalmente.

Quando terminar, teste suas alterações tentando se conectar à instância do Linux por meio de ferramentas de terceiros.

Como adicionar ou remover chaves SSH públicas no nível da instância

Chaves SSH públicas no nível da instância fornecem aos usuários acesso a uma instância específica do Linux. Usuários com chaves SSH públicas no nível da instância podem acessar uma instância específica do Linux mesmo que ela bloqueie as chaves SSH públicas de todo o projeto.

Console

Para adicionar ou remover chaves SSH públicas no nível da instância no console do GCP:

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

    Acessar a página "Instâncias"

  2. Clique no nome da instância que você quer modificar.

  3. Clique em Editar na barra de ferramentas.

  4. 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. Modifique as chaves públicas SSH no nível da instância:

    • Para adicionar uma chave SSH pública, clique em Adicionar item. Isso produz uma caixa de texto. Copie o conteúdo do arquivo de chave SSH pública e cole-o na caixa de texto. Repita esse processo para cada chave SSH pública que você quer adicionar.
    • Para remover uma chave SSH pública, clique no botão de remoção ao lado dela:

      Captura de tela da chave pública PuTTYgen

      Repita esse processo para cada chave SSH pública que você quer remover.

  6. Quando terminar, clique em Salvar na parte inferior da página.

gcloud

Veja como adicionar ou remover chaves SSH públicas no nível da instância com a ferramenta gcloud:

  1. Se a instância já tiver chaves SSH públicas no nível da instância, solicite essas chaves SSH públicas dos metadados:

    1. Solicite os metadados existentes para a instância:

      gcloud compute instances describe [INSTANCE_NAME]

      em que [INSTANCE_NAME] é o nome da instância em que você precisa adicionar ou remover chaves SSH públicas.

    2. Na saída, procure o valor de metadados ssh-keys:

      ...
      metadata:
        fingerprint: QCofVTHlggs=
        items:
        ...
        - key: ssh-keys
          value: |-
            [USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]
            [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
      ...

      em que:

      • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves existentes;
      • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chaves públicas já aplicados à sua instância.
    3. Copie as chaves SSH públicas no valor de metadados ssh-keys.

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

  3. No arquivo, crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados da instância. Se você tem atualmente chaves SSH públicas nos metadados da instância, todas as chaves que você não inclui na lista são removidas.

    Por exemplo, a lista de amostras abaixo remove a chave de [USERNAME_1] porque a chave SSH foi omitida. Também mantém a chave SSH para [USERNAME_2] e adiciona a chave SSH para [USERNAME_3] porque as chaves SSH estão incluídas na lista.

    [USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves SSH públicas;
    • [EXISTING_KEY_VALUE_1] é um valor de chave pública para uma chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é um valor de chave pública para uma chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é um valor de chave pública para uma chave SSH que você quer adicionar.
  4. Salve e feche o arquivo.

  5. No prompt de comando, use o comando compute instances add-metadata para definir o valor ssh-key exclusivo da instância. Inclua a sinalização --metadata-from-file e especifique o caminho para a lista de arquivos de chave pública que você criou.

    gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=[LIST_PATH]
    

    em que:

    • [INSTANCE_NAME] é o nome da instância onde você quer aplicar o arquivo de chave SSH pública;
    • [LIST_PATH] é o caminho para a lista de chaves SSH públicas.

API

Adicione um valor ssh-keys exclusivo da instância usando o método instances.setMetadata.

  1. Use o método instances.get para receber o valor de metadados fingerprint a ser usado para a solicitação. Para manter as chaves no nível da instância existentes, busque os valores de ssh-keys existentes.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]
    
    ...
    "fingerprint": "[FINGERPRINT]",
    "items": [
     {
      "key": "ssh-keys",
      "value": "[USERNAME_1]:ssh-rsa [EXISTING_KEY_VALUE_1] [USERNAME_1]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
     }
    ]
    ...

    em que:

    • [PROJECT_ID] é o código exclusivo do projeto;
    • [ZONE] é a zona em que o disco está;
    • [INSTANCE_NAME] é a instância em que você quer editar as chaves SSH públicas no nível da instância;
    • [FINGERPRINT] é o código exclusivo dessa configuração de metadados, que impede você de substituir alterações simultâneas acidentalmente;
    • [USERNAME_1] e [USERNAME_2] são os nomes de usuário das chaves existentes;
    • [EXISTING_KEY_VALUE_1] e [EXISTING_KEY_VALUE_2] são valores de chaves públicas já aplicados à sua instância.
  2. Crie uma lista de todas as chaves SSH públicas que você quer adicionar ou manter nos metadados no nível da instância. Se você tem atualmente chaves SSH públicas nos metadados da instância, todas as chaves que você não inclui na lista são removidas.

    Para este exemplo, o arquivo contém um novo valor [KEY_VALUE] seguido por um dos valores de chave existentes encontrados na etapa anterior. O [EXISTING_KEY_VALUE_1] é deixado de fora e é removido da instância na próxima etapa. Use caracteres \n para separar cada valor de chave.

    [USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]
    

    em que:

    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é um valor de chave pública para uma chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é um valor de chave pública para uma chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é um valor de chave pública para uma chave SSH que você quer adicionar.
  3. Use o método instances.setMetadata para configurar o valor ssh-keys exclusivo da instância. Inclua o valor fingerprint para não modificar as alterações simultâneas feitas nesse valor de metadados.

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMetadata
    
    {
     "items": [
      {
       "key": "ssh-keys",
       "value": "[USERNAME_3]:ssh-rsa [NEW_KEY_VALUE] [USERNAME_3]\n[USERNAME_2]:ssh-rsa [EXISTING_KEY_VALUE_2] [USERNAME_2]"
      }
     ]
     "fingerprint": "[FINGERPRINT]"
    }
    

    em que:

    • [PROJECT_ID] é o código exclusivo do projeto;
    • [ZONE] é a zona em que o disco está;
    • [INSTANCE_NAME] é a instância em que você quer editar as chaves SSH públicas no nível da instância;
    • [USERNAME_1], [USERNAME_2] e [USERNAME_3] são os nomes de usuário das chaves;
    • [EXISTING_KEY_VALUE_1] é um valor de chave pública para uma chave SSH que você quer remover;
    • [EXISTING_KEY_VALUE_2] é um valor de chave pública para uma chave SSH que você quer manter;
    • [NEW_KEY_VALUE] é um valor de chave pública para uma chave SSH que você quer adicionar;
    • [FINGERPRINT] é o código exclusivo dessa configuração de metadados, que impede você de substituir alterações simultâneas acidentalmente.

Quando terminar, teste suas alterações tentando se conectar à instância do Linux por meio de ferramentas de terceiros.

Próximas etapas

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

Enviar comentários sobre…

Documentação do Compute Engine