O Google Distributed Cloud (GDC) air-gapped usa a autenticação SSH baseada em chaves para estabelecer ligações a instâncias de máquinas virtuais (VMs) do Linux. Por predefinição, as palavras-passe não estão configuradas para utilizadores locais em VMs Linux.
Antes de começar
Antes de estabelecer ligação a uma VM, tem de cumprir os seguintes pré-requisitos:
- Ative a gestão de acesso. Não pode continuar sem a gestão de acesso ativada no ambiente de convidado. Por predefinição, a gestão de acesso está ativada em novas VMs.
- Ative o acesso externo da VM
para qualquer par na porta 22 do Protocolo de controlo de transmissão (TCP).
- Para VMs do Windows, ative o acesso externo da VM na porta 3389.
- Configure um recurso personalizado
ProjectNetworkPolicy(PNP) no projeto onde a VM reside.- Ao configurar um PNP no projeto, pode aceder à VM fora do projeto ou da organização.
- Para diagnosticar se não tem um PNP, pergunte ao seu operador de infraestrutura (IO).
- Acesso de início de sessão ao cluster. Siga os passos da CLI em Iniciar sessão para iniciar sessão no cluster.
gdcloud, certifique-se de que transferiu, instalou e configurou a CLI gdcloud.
Todos os comandos para a nuvem distribuída usam a CLI gdcloud ou kubectl e requerem um ambiente Linux.
Obtenha o caminho do ficheiro kubeconfig
Para executar comandos no servidor da API Management, certifique-se de que tem os seguintes recursos:
Inicie sessão e gere o ficheiro kubeconfig para o servidor da API Management, se não tiver um.
Use o caminho para o ficheiro kubeconfig do servidor da API de gestão para substituir
MANAGEMENT_API_SERVERnestas instruções.
Peça autorizações e acesso
Para realizar as tarefas indicadas nesta página, tem de ter a função de administrador da máquina virtual do projeto. Siga os passos para
validar
que tem a função de administrador de máquinas virtuais do projeto (project-vm-admin) no espaço de nomes
do projeto onde a VM reside.
Para operações de VM que usam a consola do GDC ou a CLI gdcloud,
peça ao administrador de IAM do projeto para lhe atribuir a função de administrador de máquinas virtuais do projeto e a função de visualizador do projeto (project-viewer).
Estabeleça uma ligação de VM
Esta secção descreve como estabelecer uma ligação a VMs do Linux e Windows.
Estabeleça ligação a uma VM do Linux
Para estabelecer uma ligação a uma VM do Linux, use a consola do GDC, a CLI gdcloud ou a API Virtual Machine Manager.
Consola
No menu de navegação, clique em Máquinas virtuais > Instâncias.
Na lista de VMs, encontre a linha da VM em execução à qual quer estabelecer ligação. Na coluna Ligar, clique em SSH.
É aberto um terminal do navegador SSH. Introduza qualquer comando na shell ou clique em FTP para navegar na estrutura de ficheiros e carregar ficheiros.
gdcloud
Estabeleça ligação a uma VM através de SSH executando o comando gdcloud compute ssh
gdcloud compute ssh VM_NAME \
--project=PROJECT_ID
Substitua as seguintes variáveis:
- VM_NAME: o nome da VM.
- PROJECT_ID: o ID do projeto que contém a VM.
Se tiver
definido propriedades predefinidas
para a CLI, pode omitir a flag --project deste comando. Por exemplo:
gdcloud compute ssh VM_NAME
API
Ligue-se a uma VM:
- Abra um terminal.
- Crie um par de chaves SSH.
- Carregue a chave pública e o nome de utilizador com um valor de tempo de vida (TTL).
O GDC obtém a chave SSH e o nome de utilizador e cria uma conta de utilizador com o nome de utilizador. Nas VMs Linux, o GDC armazena a chave pública no ficheiro ~/.ssh/authorized_keys do utilizador na VM.
Conclua os passos seguintes para estabelecer ligação a uma VM a partir da linha de comandos:
Crie um par de chaves SSH e um nome de utilizador.
Em estações de trabalho Linux e macOS, use o utilitário
ssh-keygenpara criar um novo par de chaves SSH. O exemplo de código seguinte cria um par de chaves RSA (Rivest–Shamir–Adleman):ssh-keygen -t rsa \ -f ~/.ssh/KEY_FILENAME \ -C USERNAME \ -b 2048Substitua as variáveis usando as seguintes definições.
Variável Definição KEY_FILENAMEO nome do ficheiro da chave SSH. Por exemplo, o nome do ficheiro my-ssh-keygera um ficheiro de chave privada denominadomy-ssh-keye um ficheiro de chave pública denominadomy-ssh-key.pub.USERNAMEO seu nome de utilizador na VM, como testuseroutestuser_gmail_com.O utilitário
ssh-keygenguarda o ficheiro de chave privada no caminho~/.ssh/KEY_FILENAMEe o ficheiro de chave pública no caminho~/.ssh/KEY_FILENAME.pub.Uma chave pública para o utilizador,
testuser, é semelhante ao seguinte exemplo:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuserCarregue a chave para a VM e crie um recurso do Kubernetes com a chave pública, o nome de utilizador e o valor de tempo de vida (TTL) da chave.
O exemplo seguinte usa um ficheiro
access_request.yamlpara conceder acesso à instância de VM com a chave privadaKEY_FILENAMEe um valor de TTL de dez minutos:apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineAccessRequest metadata: namespace: VM_NAMESPACE name: AR_NAME spec: ssh: key: | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco ttl: 10m user: USERNAME vm: VM_NAMESubstitua as variáveis com as seguintes definições:
Variável Definição VM_NAMESPACEO espaço de nomes da VM. AR_NAMEO nome do pedido de acesso. USERNAMEO seu nome de utilizador na VM, como testuseroutestuser_gmail_com.VM_NAMEO nome da instância de VM. Crie a chave:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ create -f access_request.yamlVerifique o estado do seu pedido de acesso:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachineaccessrequests.virtualmachine.gdc.googSubstitua
VM_NAMESPACEpelo espaço de nomes da VM.Um estado
configuredindica que pode estabelecer ligação à VM.Estabeleça ligação à VM:
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IPSubstitua os seguintes valores:
PATH_TO_PRIVATE_KEYcom o caminho para o ficheiro de chave SSH privada que corresponde à chave pública que adicionou à VM.USERNAMEcom o nome de utilizador que especificou quando criou a chave SSH. Por exemplo,cloudysanfrancisco_example_comoucloudysanfrancisco.EXTERNAL_IPcom o endereço IP de entrada externo da VM.
Resolução de problemas
Esta secção descreve como resolver problemas que podem ocorrer ao estabelecer ligação a uma instância de VM após a criação do pedido de acesso.
Siga os passos seguintes para identificar possíveis problemas:
Verifique se a VM está em execução. Substitua as variáveis editáveis pelos seus valores no seguinte comando:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachines.virtualmachine.gdc.goog VM_NAMESe a VM não estiver em execução, não pode estabelecer ligação nem configurar novos pedidos.
Verifique se a VM está em execução há alguns minutos. Se a VM tiver sido iniciada recentemente, os serviços necessários para o acesso SSH podem ainda não estar em execução. Normalmente, são executados no prazo de cinco minutos após o arranque.
Verifique se não excedeu o valor de TTL no pedido de acesso. A chave é removida quando o tempo atinge o valor TTL.
Se o ícone
VirtualMachineAccessRequestapresentar o estadoconfigured, verifique os seguintes requisitos:- Ativou a transferência de dados para a sua VM na porta 22.
- A sua máquina encaminha para a MV. Por exemplo, pode usar o comando
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22para verificar o encaminhamento.
Se o seu
VirtualMachineAccessRequestapresentar o estadofailed, veja o estado completo e reveja a mensagem de erro que indica o que causou a falha do pedido:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAMESubstitua as variáveis editáveis no comando anterior pelos seus próprios valores.
Se o estado do
VirtualMachineAccessRequestestiver em branco, o ambiente de convidado pode não estar em execução.
Estabeleça ligação a uma VM do Windows
A ligação a uma VM do Windows requer a utilização do protocolo de ambiente de trabalho remoto (RDP) através de uma aplicação de ambiente de trabalho remoto. Para aceder à VM através do RDP, precisa de uma palavra-passe que pode obter na consola do GDC ou no recurso personalizado VirtualMachinePasswordResetRequest da API Virtual Machine Manager.
Antes de continuar, tem de instalar primeiro o cliente de Ambiente de Trabalho Remoto. Use o seguinte link para concluir os passos com base no seu SO específico. Para aceder ao link, precisa de uma ligação à Internet.
https://remmina.org/how-to-install-remmina/
Para estabelecer uma ligação de VM do Windows, siga estes passos:
Consola
- No menu de navegação, clique em Máquinas virtuais > Instâncias.
- Na lista de VMs, pesquise a VM do Windows em execução à qual quer estabelecer ligação.
- Na coluna Ações, clique em Repor palavra-passe. É apresentada a caixa de diálogo Definir nova palavra-passe do Windows.
- No campo Nome de utilizador, introduza o seu nome de utilizador.
- Clique em Definir. É apresentada a caixa de diálogo Nova palavra-passe do Windows com uma palavra-passe gerada aleatoriamente. Esta palavra-passe contém carateres alfanuméricos e não alfanuméricos.
- Clique em Copiar.
- Navegue para o cliente de ambiente de trabalho remoto e selecione o seu nome de utilizador.
- No campo de introdução Palavra-passe, introduza a sua palavra-passe.
- Prima ENTER ou RETURN.
API
Gere uma chave RSA. Precisa desta chave para obter a palavra-passe do recurso
VirtualMachinePasswordResetRequest.openssl genrsa -out private-key.pem 2048 # Get the RSA public key openssl rsa -in private-key.pem -outform PEM -puboutCrie um ficheiro YAML.
Carregue a chave RSA que gerou, o nome da VM e um nome de utilizador que atribui para aceder ao cliente de ambiente de trabalho remoto:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachinePasswordResetRequest metadata: namespace: VM_NAMESPACE name: PRR_NAME spec: vmName: VM_NAME user: USERNAME publicKey: PUBLIC_KEYSubstitua as variáveis com as seguintes definições:
Variável Definição VM_NAMESPACE O nome do espaço de nomes onde reside a VM. PRR_NAME O nome que atribui ao pedido de reposição de palavra-passe. Por exemplo, vmprr2.VM_NAME O nome da VM. Por exemplo, vm-test.USERNAME O nome de utilizador que indica para iniciar sessão na VM com o cliente de ambiente de trabalho remoto. Por exemplo, test-user.PUBLIC_KEY A chave RSA que gerou no passo 2. Tem de formatar PUBLIC_KEY em várias linhas. O exemplo seguinte mostra um ficheiro YAML com os valores e a formatação necessários para fazer um pedido de reposição da palavra-passe:
apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachinePasswordResetRequest metadata: namespace: test-namespace name: vmprr2 spec: vmName: vm2 user: test-user publicKey: |- -----BEGIN PUBLIC KEY----- # Input the RSA key data in multi-line format. -----END PUBLIC KEY-----Aplique o conteúdo do ficheiro:
kubectl --kubeconfig=MANAGEMENT_API_SERVER \ apply -f FILENAMESubstitua FILENAME pelo nome do ficheiro para o pedido de reposição da palavra-passe.
Veja o estado do recurso
VirtualMachinePasswordResetRequest. Desde que a VM esteja no estadoRunning, o recurso gera a palavra-passe em menos de um minuto.kubectl --kubeconfig=MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachinepasswordresetrequest.virtualmachine.gdc.goog PRR_NAMELocalize o campo
status.encryptedPasswordque contém a palavra-passe gerada.Copie o valor em
status.encryptedPassworde descifre a palavra-passe gerada:echo ENCRYPTED_PASSWORD | base64 -d > PASSWORD_FILENAME openssl pkeyutl -decrypt -in PASSWORD_FILENAME -inkey private-key.pem \ -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha512 -pkeyopt rsa_mgf1_md:sha512Substitua o seguinte:
- ENCRYPTED_PASSWORD: a palavra-passe gerada
a partir do campo
status.encryptedPassword. - PASSWORD_FILENAME: um ficheiro temporário para armazenar a palavra-passe descodificada em base64.
Posteriormente, vê a palavra-passe descifrada como resultado para estabelecer ligação à VM através do RDP.
- ENCRYPTED_PASSWORD: a palavra-passe gerada
a partir do campo
Abra o cliente do Ambiente de Trabalho Remoto e clique em Perfil de ligação remota. É apresentada uma caixa de diálogo de associação.
No separador Básico, introduza os seus valores nos seguintes campos:
- Servidor: o endereço IP de entrada do estado de acesso externo da VM com o número da porta de acesso externo da VM anexado. Para obter o endereço IP de entrada, consulte Entrada.
- Nome de utilizador: o nome de utilizador que especificou no pedido de reposição da palavra-passe.
Por exemplo,
test-user. - Palavra-passe: a palavra-passe gerada que descifrou a partir do estado do pedido de reposição de palavra-passe.
Clique em Guardar e associar.