Share via


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

Este artigo descreve como configurar as chaves SSH (versão prévia) nos seus clusters ou pools de nós do AKS, durante a implantação inicial ou em um momento posterior.

O AKS oferece suporte às seguintes opções de configuração para gerenciar as chaves SSH nos nós do cluster:

  • Criar um cluster com as chaves SSH
  • Atualizar as chave SSH em um cluster do AKS existente
  • Desabilitar e habilitar o serviço SSH

Importante

As versões prévias do recurso AKS estão disponíveis em uma base de autoatendimento e aceitação. As versõ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 versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

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 Desabilitar.
  • Os recursos Criar e Atualizar SSH oferecem suporte aos pools de nós Linux, Windows e Linux do Azure nos clusters existentes.
  • O recurso Desabilitar SSH não tem suporte nesta versão prévia nos pools de nós que executam o sistema operacional Windows Server.

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

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

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

    az extension update --name aks-preview
    

Registrar o sinalizador de recurso DisableSSHPreview

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

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

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

    Demora alguns minutos para o status exibir Registrado.

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

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

    az provider register --namespace Microsoft.ContainerService
    

Criar um cluster do AKS com as chaves SSH

Use o comando az aks create para implantar um cluster do AKS com uma chave pública SSH. É possível especificar a chave ou um arquivo de chave usando o argumento --ssh-key-value.

Parâmetro SSH Descrição Valor padrão
--generate-ssh-key Se você não tiver suas chaves SSH, especifique --generate-ssh-key. A CLI do Azure gera automaticamente um conjunto de chaves SSH e as salva no diretório padrão ~/.ssh/.
--ssh-key-value Caminho de chave pública ou conteúdo de chave a ser instalado em VMs de nó para acesso por SSH. Por exemplo, ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm. ~/.ssh/id_rsa.pub
--no-ssh-key Se você não precisar de uma chave SSH, especifique esse argumento. Porém, o AKS gera automaticamente um conjunto de chaves SSH pois a dependência de recursos da Máquina Virtual do Azure não dá suporte a um arquivo 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.

Observação

Se não forem especificados parâmetros, o padrão da CLI do Azure é fazer referência às chaves SSH armazenadas no arquivo ~/.ssh/id_rsa.pub. 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.

A seguir estão exemplos desse comando:

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

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

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

Atualizar a chave SSH pública em um cluster do AKS existente

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

Observação

Há suporte para a atualização das chaves SSH nos conjuntos de dimensionamento de máquinas virtuais do Azure com os clusters do AKS.

A seguir estão exemplos desse comando:

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

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

    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 atualizará automaticamente o pool de nós. A qualquer momento, você pode optar por executar uma operação de atualização de nodepool. A operação de atualização de chaves SSH entrará em vigor assim que a atualização da imagem do nó for concluída.

Desabilitar visão geral do SSH

Para melhorar a segurança e dar suporte aos requisitos ou à estratégia de segurança corporativa, o AKS oferece suporte à desativação do SSH (versão prévia) no cluster e no nível do pool de nós. Desabilitar o SSH introduz uma abordagem simplificada em comparação com a única solução com suporte, que requer a configuração regras de grupo de segurança de rede na placa de interface de rede (NIC) de sub-rede/nó do AKS.

Quando você desabilitar o SSH no momento da criação do cluster, ele entrará em vigor após a criação do cluster. Entretanto, quando você desabilitar o SSH em um cluster ou pool de nós existente, o AKS não desabilitará o SSH automaticamente. Você pode optar por executar uma operação de atualização do nodepool a qualquer momento. A operação de desabilitar/habilitar as chaves SSH entrará em vigor assim que a atualização da imagem do nó for concluída.

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

Observação

O nó de depuração kubectl continua a funcionar depois que você desabilitar o SSH pois ele não depende do serviço SSH.

Desabilitar o SSH em uma nova implantação do cluster

Por padrão, o serviço SSH nos nós do cluster do AKS está aberto para 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 comando az aks create para criar um novo cluster e inclua o argumento --ssh-access disabled para desabilitar o SSH (versão prévia) em todos os pools de nós durante a criação do cluster.

Importante

Depois de desabilitar o serviço SSH, você não poderá entrar no cluster para executar tarefas administrativas ou solucionar problemas.

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

Após alguns minutos, o comando será concluído e retornará informações no formato JSON sobre o cluster. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desabilitação do SSH:

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

Desabilitar o SSH em um cluster existente

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

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

Após alguns minutos, o comando será concluído e retornará informações no formato JSON sobre o cluster. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desabilitação do SSH:

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

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

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áquinas virtuais serão atualizadas e recriadas para usarem a nova chave SSH.

Desabilitar o SSH para um novo pool de nós

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

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

Depois de alguns minutos, o comando é concluído e retorna as informações formatadas pelo JSON a respeito do cluster, indicando que o mynodepool foi criado com sucesso. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desabilitação do SSH:

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

Desabilitar o 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 (versão prévia) em um pool de nós existente.

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

Depois de alguns minutos, o comando é concluído e retorna as informações formatadas pelo JSON a respeito do cluster, indicando que o mynodepool foi criado com sucesso. O exemplo a seguir se assemelha à saída e aos resultados relacionados à desabilitação do SSH:

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

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

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

Reabilitar o SSH em um cluster existente

Use o comando az aks update para atualizar um cluster existente e inclua o argumento --ssh-access localuser para reabilitar o SSH (versão prévia) em todos os pools de nós no 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 reabilitar o SSH, os nós não serão reimaginados automaticamente. Você pode optar por executar uma operação de reimagem a qualquer momento.

Importante

Durante essa operação, todas as instâncias do conjunto de dimensionamento de máquinas virtuais são atualizadas e criam uma nova imagem para usar a nova chave pública SSH.

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

Use o comando az aks update para atualizar um pool de nós específico e incluir o argumento --ssh-access localuser para reabilitar o SSH (versão prévia) 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áquinas virtuais são atualizadas e criam uma nova imagem para usar a nova chave pública SSH.

Status do serviço SSH

Execute as etapas a seguir para usar o shell do nó em um nó e inspecionar o status do serviço SSH usando systemctl.

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

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

    systemctl status ssh
    

Se o SSH estiver desabilitado, a seguinte saída de exemplo mostrará 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 mostrará 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óximas etapas

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