Partilhar via


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

Este artigo descreve como configurar o acesso SSH (pré-visualização) nos seus clusters AKS ou pools de nós, durante a implementação inicial ou numa data posterior.

O AKS suporta as seguintes opções de configuração para gerir o acesso SSH nos nós do cluster:

  • SSH desativado: Desativar completamente o acesso SSH aos nós do cluster para maior segurança
  • SSH com autenticação por Entra ID: Use credenciais do Microsoft Entra ID para autenticação SSH. Benefícios de usar SSH baseado em Entra ID:
    • Gestão centralizada de identidades: Use as suas identidades Entra ID existentes para aceder aos nós do cluster
    • Sem gestão de chaves SSH: Elimina a necessidade de gerar, distribuir e rodar chaves SSH
    • Segurança reforçada: Aproveite funcionalidades de segurança do Entra ID como Acesso Condicional e MFA
    • Auditoria e conformidade: Registo centralizado dos eventos de acesso através dos registos do Entra ID
    • Acesso just-in-time: Combinar com Azure RBAC para controlo de acesso granular
  • SSH do Utilizador Local: Autenticação tradicional baseada em chaves SSH para acesso a nodos

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:

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:

Pré-requisitos

  • Este artigo requer a versão 2.61.0 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.

  • Precisas aks-preview da versão 9.0.0b1 ou posterior.

    • Se você ainda não tiver a aks-preview extensão, instale-a usando o az extension add comando:
      az extension add --name aks-preview
      
    • Se você já tiver a aks-preview extensão, atualize-a para garantir que você tenha a versão mais recente usando o az extension update comando:
      az extension update --name aks-preview
      
  • 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.

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

    az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
    
  • 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
    
  • Este artigo requer a versão 2.73.0 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.

  • Necessita da versão aks-preview 19.0.0b7 ou posterior do SSH do Entra ID.

    • Se você ainda não tiver a aks-preview extensão, instale-a usando o az extension add comando:
      az extension add --name aks-preview
      
    • Se você já tiver a aks-preview extensão, atualize-a para garantir que você tenha a versão mais recente usando o az extension update comando:
      az extension update --name aks-preview
      
  • Permissões RBAC adequadas do Azure para acesso aos nós:

    • Ação obrigatória: Microsoft.Compute/virtualMachineScaleSets/*/read - ler informações sobre conjuntos de escalas de máquinas virtuais
      • Ação de dados obrigatória:
        • Microsoft.Compute/virtualMachineScaleSets/virtualMachines/login/action - para autenticar e iniciar sessão em VMs como utilizador regular.
        • Microsoft.Compute/virtualMachines/loginAsAdmin/action - iniciar sessão com privilégios de utilizador root.
      • Função incorporada: Login de Administrador de Máquina Virtual ou Login de Utilizador de Máquina Virtual (para acesso não de administrador)
  • Registre o EntraIdSSHPreview sinalizador de recurso usando o az feature register comando.

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

    Leva alguns minutos para que o status mostre Registrado.

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

    az feature show --namespace "Microsoft.ContainerService" --name "EntraIdSSHPreview"
    
  • 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
    
  • Este artigo requer a versão 2.61.0 ou posterior da CLI do Azure. Se você estiver usando o Azure Cloud Shell, a versão mais recente já está instalada lá.
  • Precisas da versão 9.0.0b1 ou superior para atualizar o método de acesso SSH nos nodepools.
    • Se você ainda não tiver a aks-preview extensão, instale-a usando o az extension add comando:
      az extension add --name aks-preview
      
    • Se você já tiver a aks-preview extensão, atualize-a para garantir que você tenha a versão mais recente usando o az extension update comando:
      az extension update --name aks-preview
      

Definir variáveis de ambiente

Defina as seguintes variáveis de ambiente para o seu grupo de recursos, nome do cluster e localização:

export RESOURCE_GROUP="<your-resource-group-name>"
export CLUSTER_NAME="<your-cluster-name>"
export LOCATION="<your-azure-region>"

Limitações

  • Entra ID SSH para nós ainda não está disponível para o pool de nós do Windows.
  • Entra ID SSH para nodos não é suportado para a automatização do AKS devido ao bloqueio dos grupos de recursos dos nodos, o que impede as atribuições de função.

Configurar o acesso SSH

Para melhorar a segurança e apoiar os requisitos ou estratégias de segurança da sua empresa, o AKS suporta a desativação do SSH tanto no cluster como ao nível do pool de nós. Desativar o SSH introduz uma abordagem simplificada em comparação com a configuração das regras de grupo de segurança de rede na sub-rede/placa de interface de rede (NIC) do 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 de desativação/ativação do SSH só entra em vigor depois que a atualização da imagem do node está completa.

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.

Nota

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

Criar um grupo de recursos

Crie um grupo de recursos usando o comando az group create.

az group create --name $RESOURCE_GROUP --location $LOCATION

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

Num cluster recém-criado, desativar o SSH só configurará o primeiro pool de nós do sistema. Todos os outros pools de nós precisam de ser configurados ao nível do pool de nós.

az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --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 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 $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --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

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:

Utilize o comando az aks nodepool update com o argumento --ssh-access disabled para desativar o SSH (versão prévia) num pool de nós existente.

az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access disabled

Após alguns minutos, o comando é concluído e devolve informação em formato JSON sobre o cluster, indicando que mynodepool foi atualizado com sucesso. 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 $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --node-image-only

Importante

Para desabilitar o SSH em um cluster existente, você precisa desabilitar o SSH para cada pool de nós nesse cluster.

Reativar o acesso ao SSH

Para reativar o acesso SSH num pool de nós, atualize o pool de nós com ( --ssh-access localuser para acesso tradicional baseado em chaves SSH) ou --ssh-access entraid (para acesso baseado em Entra ID). Consulte as respetivas secções para instruções detalhadas.

Pode configurar o seu cluster AKS para usar o Microsoft Entra ID (anteriormente Azure AD) para autenticação SSH nos nós do cluster. Isto elimina a necessidade de gerir chaves SSH e permite-lhe usar as suas credenciais Entra ID para aceder a nós de forma segura.

Criar um grupo de recursos

Crie um grupo de recursos usando o comando az group create.

az group create --name $RESOURCE_GROUP --location $LOCATION

Ativar SSH baseado em Entra ID num novo cluster

Use o az aks create comando com o --ssh-access entraid argumento para ativar a autenticação SSH baseada em Entra ID durante a criação do cluster.

az aks create \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --ssh-access entraid

Após alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster. O exemplo seguinte assemelha-se à saída:

"securityProfile": {
  "sshAccess": "EntraID"
},

Ativar SSH baseado em Entra ID para um novo pool de nós

Use o comando az aks nodepool add com o argumento --ssh-access entraid para ativar o SSH com base no Entra ID durante a criação do pool de nós.

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access entraid

Após alguns minutos, o comando é concluído e devolve informação em formato JSON, indicando que mynodepool foi criado com sucesso com SSH baseado em Entra ID. O exemplo a seguir assemelha-se à saída:

"securityProfile": {
  "sshAccess": "EntraID"
},

Ativar SSH baseado em Entra ID para um pool de nós existente

Utilize o comando az aks nodepool update com o argumento --ssh-access entraid para ativar o SSH baseado em Entra ID num pool de nós já existente.

az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access entraid

Após alguns minutos, o comando é concluído e devolve informação em formato JSON, indicando que mynodepool foi atualizado com sucesso com SSH baseado em Entra ID. O exemplo a seguir é semelhante ao resultado:

"securityProfile": {
  "sshAccess": "EntraID"
},

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 $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --node-image-only

Importante

Para ativar o SSH baseado em Entra ID num cluster existente, é necessário ativá-lo individualmente para cada pool de nós.

O acesso SSH dos utilizadores locais utiliza autenticação tradicional baseada em chaves SSH. Este é o método de acesso SSH predefinido para clusters AKS.

Criar um grupo de recursos

Crie um grupo de recursos usando o comando az group create.

az group create --name $RESOURCE_GROUP --location $LOCATION

Criar um cluster AKS com chaves SSH

Use o comando az aks create para implantar um cluster AKS com uma chave pública SSH. Pode especificar a chave ou um ficheiro de chave usando o --ssh-key-value argumento, ou usar --ssh-access localuser para definir explicitamente o acesso local ao SSH do utilizador.

Parâmetro SSH Descrição Valor predefinido
--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-key-value 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
--ssh-access localuser Permita explicitamente o acesso local ao SSH do utilizador com autenticação baseada em chaves.
--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.

Exemplos:

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

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --generate-ssh-key
    
  • Para especificar um ficheiro de chave pública SSH:

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value ~/.ssh/id_rsa.pub
    
  • Para permitir explicitamente o acesso SSH dos utilizadores locais:

    az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-access localuser --generate-ssh-key
    

Ativar o SSH local do utilizador para um novo pool de nós

Use o comando az aks nodepool add com o argumento --ssh-access localuser para ativar o SSH do utilizador local durante a criação do pool de nós.

az aks nodepool add \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access localuser

Ativar o SSH local do utilizador para um pool de nós existente

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:

Utilize o comando az aks nodepool update com o argumento --ssh-access localuser para ativar o SSH local do utilizador num pool de nós existente.

az aks nodepool update \
    --cluster-name $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --ssh-access localuser

Importante

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 $CLUSTER_NAME \
    --name mynodepool \
    --resource-group $RESOURCE_GROUP \
    --node-image-only

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.

Exemplos:

  • Para especificar um novo valor de chave pública SSH:

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'
    
  • Para especificar um ficheiro de chave pública SSH:

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --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, pode optar por realizar uma operação de atualização do nodepool. 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ó. Para clusters com o provisionamento automático de nós habilitado , uma atualização de imagem de nó pode ser executada aplicando um novo rótulo ao recurso personalizado Kubernetes NodePool.

Verificar o estado do serviço SSH

Depois de desativar o SSH, pode verificar se o serviço SSH está inativo nos seus nós do cluster.

Use o comando Virtual Machine Scale Set az vmss run-command invoke para verificar o estado do serviço SSH.

az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"

A seguinte amostra mostra o resultado esperado quando o SSH é desativado:

{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n○ ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)\n     Active: inactive (dead) since Wed 2024-01-03 15:36:53 UTC; 25min ago\n..."
    }
  ]
}

Procure a palavra Ativo e verifique se o seu valor é Active: inactive (dead), o que confirma que o SSH está desativado no nó.

Depois de ativar o SSH baseado no EntraID, pode verificar se o serviço SSH está ativo e configurado para autenticação do Entra ID nos seus nós do cluster.

Use o comando Virtual Machine Scale Set az vmss run-command invoke para verificar o estado do serviço SSH.

az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"

A seguinte saída de exemplo mostra o resultado esperado quando o SSH está ativado:

{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n● ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago\n..."
    }
  ]
}

Procure a palavra Ativo e verifique se o seu valor é Active: active (running), o que confirma que o SSH está ativado no nó.

Depois de configurar o SSH do utilizador local, pode verificar se o serviço SSH está ativo nos seus nós do cluster.

Use o comando Virtual Machine Scale Set az vmss run-command invoke para verificar o estado do serviço SSH.

az vmss run-command invoke --resource-group <node-resource-group> --name <vmss-name> --command-id RunShellScript --instance-id 0 --scripts "systemctl status ssh"

A seguinte saída de exemplo mostra o resultado esperado quando o SSH está ativado:

{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n● ssh.service - OpenBSD Secure Shell server\n     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n     Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago\n..."
    }
  ]
}

Procure a palavra Ativo e verifique se o seu valor é Active: active (running), o que confirma que o SSH está ativado no nó.

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.