Gerenciar SSH para acesso seguro aos nós do Serviço Kubernetes do Azure (AKS)

Este artigo descreve como configurar as chaves SSH (visualização) em seus clusters AKS ou pools de nós, durante a implantação inicial ou posteriormente.

O AKS suporta as seguintes opções de configuração para gerenciar chaves SSH em nós de cluster:

  • Criar um cluster com chaves SSH
  • Atualizar as chaves SSH em um cluster AKS existente
  • Desativar e ativar o serviço SSH

Importante

Os recursos de visualização do AKS estão disponíveis em uma base de autosserviço e opt-in. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As visualizações do AKS são parcialmente cobertas pelo suporte ao cliente com base no melhor esforço. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Antes de começar

  • Você precisa da aks-preview versão 0.5.116 ou posterior para usar a atualização.
  • Você precisa da aks-preview versão 1.0.0b6 ou posterior para usar Disable.
  • O recurso Criar e Atualizar SSH dá suporte a pools de nós Linux, Windows e Azure Linux em clusters existentes.
  • O recurso Desabilitar SSH não é suportado nesta versão de visualização em pools de nós que executam o sistema operacional Windows Server.

Instalar a extensão da CLI do aks-preview Azure

  1. Instale a extensão aks-preview usando o az extension add comando.

    az extension add --name aks-preview
    
  2. Atualize para a versão mais recente da extensão usando o az extension update comando.

    az extension update --name aks-preview
    

Registrar o sinalizador de DisableSSHPreview recurso

Para usar o recurso Desativar SSH, execute as etapas a seguir para registrá-lo e habilitá-lo em sua assinatura.

  1. Registre o DisableSSHPreview sinalizador de recurso usando o az feature register comando.

    az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    

    Leva alguns minutos para que o status mostre Registrado.

  2. Verifique o status do registro usando o az feature show comando.

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  3. Quando o status refletir Registrado, atualize o registro do provedor de recursos Microsoft.ContainerService usando o az provider register comando.

    az provider register --namespace Microsoft.ContainerService
    

Criar um cluster AKS com chaves SSH

Use o comando az aks create para implantar um cluster AKS com uma chave pública SSH. Você pode especificar a chave ou um arquivo de chave usando o --ssh-key-value argumento.

Parâmetro SSH Description Default value
--generate-ssh-key Se você não tiver suas próprias chaves SSH, especifique --generate-ssh-key. A CLI do Azure gera automaticamente um conjunto de chaves SSH e as salva no diretório ~/.ssh/padrão.
--ssh-chave-valor Caminho de chave pública ou conteúdo de chave para instalar em VMs de nó para acesso SSH. Por exemplo, ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Se você não precisar de chaves SSH, especifique esse argumento. No entanto, o AKS gera automaticamente um conjunto de chaves SSH porque a dependência de recursos da Máquina Virtual do Azure não suporta um ficheiro de chaves SSH vazio. Como resultado, as chaves não são retornadas e não podem ser usadas para SSH nas VMs do nó. A chave privada é descartada e não salva.

Nota

Se nenhum parâmetro for especificado, o padrão da CLI do Azure fará referência às chaves SSH armazenadas no ~/.ssh/id_rsa.pub arquivo. Se as chaves não forem encontradas, o comando retornará a mensagem An RSA key file or key value must be supplied to SSH Key Value.

Seguem-se exemplos deste comando:

  • Para criar um cluster e usar as chaves SSH geradas por padrão:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key
    
  • Para especificar um arquivo de chave pública SSH, inclua o --ssh-key-value argumento:

    az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Atualizar chave pública SSH em um cluster AKS existente

Use o az aks update comando para atualizar a chave pública SSH (visualização) no cluster. Esta operação atualiza a chave em todos os pools de nós. Você pode especificar uma chave ou um arquivo de chave usando o --ssh-key-value argumento.

Nota

A atualização das chaves SSH é suportada em conjuntos de escala de máquina virtual do Azure com clusters AKS.

Seguem-se exemplos deste comando:

  • Para especificar um novo valor de chave pública SSH, inclua o --ssh-key-value argumento:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Para especificar um arquivo de chave pública SSH, especifique-o com o --ssh-key-value argumento:

    az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
    

Importante

Depois de atualizar a chave SSH, o AKS não atualiza automaticamente o pool de nós. A qualquer momento, você pode optar por executar uma operação de atualização do pool de nós. A operação de atualização de chaves SSH entra em vigor após a conclusão de uma atualização de imagem de nó.

Desativar visão geral do SSH

Para melhorar a segurança e dar suporte aos seus requisitos ou estratégia de segurança corporativa, o AKS suporta a desativação do SSH (visualização) tanto no cluster quanto no nível do pool de nós. Desativar SSH introduz uma abordagem simplificada em comparação com a única solução suportada, que requer a configuração de regras de grupo de segurança de rede na placa de interface de rede (NIC) de sub-rede/nó AKS. Desabilitar SSH suporta apenas pools de nós de Conjuntos de Escala de Máquina Virtual.

Quando você desabilita o SSH no momento da criação do cluster, ele entra em vigor depois que o cluster é criado. No entanto, quando você desabilita o SSH em um cluster ou pool de nós existente, o AKS não desabilita automaticamente o SSH. A qualquer momento, você pode optar por executar uma operação de atualização do pool de nós. A operação desativar/ativar chaves SSH entra em vigor após a conclusão da atualização da imagem do nó.

Nota

Quando você desabilita o SSH no nível do cluster, ele se aplica a todos os pools de nós existentes. Todos os pools de nós criados após essa operação terão o SSH habilitado por padrão, e você precisará executar esses comandos novamente para desativá-lo.

Parâmetro SSH Description
disabled O serviço SSH está desativado.
localuser O serviço SSH está habilitado e os usuários com chaves SSH podem acessar o nó com segurança.

Nota

kubectl debug node continua a funcionar depois de desativar SSH porque não depende do serviço SSH.

Desabilitar SSH em uma nova implantação de cluster

Por padrão, o serviço SSH nos nós do cluster AKS está aberto a todos os usuários e pods em execução no cluster. Você pode impedir o acesso SSH direto de qualquer rede aos nós do cluster para ajudar a limitar o vetor de ataque se um contêiner em um pod ficar comprometido. Use o az aks create comando para criar um novo cluster e inclua o argumento para desabilitar o --ssh-access disabled SSH (visualização) em todos os pools de nós durante a criação do cluster.

Importante

Depois de desativar o serviço SSH, você não pode SSH no cluster para executar tarefas administrativas ou solucionar problemas.

Nota

Em um cluster recém-criado, desabilitar o ssh configurará apenas o 1º nodepool do sistema. Todos os outros nodepools precisam ser configurados no nível do nodepool.

az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desativação do SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Desabilitar SSH em um cluster existente

Use o az aks update comando para atualizar um cluster existente e inclua o argumento para desabilitar o --ssh-access disabled SSH (visualização) em todos os pools de nós do cluster.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled

Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desativação do SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Para que a alteração entre em vigor, você precisa criar uma nova imagem de todos os pools de nós usando o az aks nodepool upgrade comando.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Importante

Durante essa operação, todas as instâncias do Conjunto de Dimensionamento de Máquina Virtual são atualizadas e recriadas para usar a nova configuração SSH.

Desabilitar SSH para um novo pool de nós

Use o az aks nodepool add comando para adicionar um pool de nós e inclua o argumento para desabilitar o SSH durante a --ssh-access disabled criação do pool de nós.

az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled  

Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster indicando que mynodepool foi criado com êxito. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desativação do SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Desabilitar SSH para um pool de nós existente

Use o argumento [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled' para desabilitar o SSH (visualização) em um pool de nós existente.

az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled

Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster indicando que mynodepool foi criado com êxito. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desativação do SSH:

"securityProfile": {
"sshAccess": "Disabled"
},

Para que a alteração entre em vigor, você precisa criar uma nova imagem do pool de nós usando o az aks nodepool upgrade comando.

az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only

Reativar SSH em um cluster existente

Use o az aks update comando para atualizar um cluster existente e inclua o --ssh-access localuser argumento para reativar o SSH (visualização) em todos os pools de nós do cluster.

az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser

A seguinte mensagem é retornada enquanto o processo é executado:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."

Depois de reativar o SSH, os nós não serão recriados automaticamente. A qualquer momento, você pode optar por executar uma operação de reimagem.

Importante

Durante essa operação, todas as instâncias do Conjunto de Dimensionamento de Máquina Virtual são atualizadas e recriadas para usar a nova chave pública SSH.

Reativar o SSH para um pool de nós específico

Use o az aks update comando para atualizar um pool de nós específico e inclua o argumento para reativar o --ssh-access localuser SSH (visualização) nesse pool de nós no cluster. No exemplo a seguir, nodepool1 é o pool de nós de destino.

az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser 

A seguinte mensagem é retornada quando o processo é executado:

Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.

Importante

Durante essa operação, todas as instâncias do Conjunto de Dimensionamento de Máquina Virtual são atualizadas e recriadas para usar a nova chave pública SSH.

Status do serviço SSH

Execute as seguintes etapas para usar o shell de nó em um nó e inspecione o status do serviço SSH usando systemctl.

  1. Obtenha o shell bash padrão executando o comando command kubectl node-shell <node> .

    kubectl node-shell aks-nodepool1-20785627-vmss000001
    
  2. Execute o systemctl comando para verificar o status do serviço SSH.

    systemctl status ssh
    

Se o SSH estiver desativado, a saída de exemplo a seguir mostra os resultados:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago

Se o SSH estiver habilitado, a saída de exemplo a seguir mostra os resultados:

ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago

Próximos passos

Para ajudar a solucionar problemas com a conectividade SSH para os nós de clusters, você pode visualizar os logs do kubelet ou os logs do nó mestre do Kubernetes.