Rotação de certificados no AKS (Serviço de Kubernetes do Azure)

O Serviço de Kubernetes do Azure (AKS) usa certificados para autenticação com muitos de seus componentes. Os clusters habilitados para RBAC criados após março de 2022 são habilitados com rotação automática de certificado. Talvez seja necessário girar esses certificados periodicamente por motivos de segurança ou política. Por exemplo, você pode ter uma política para girar todos os certificados a cada 90 dias.

Observação

A rotação automática do certificado somente é habilitada por padrão para clusters AKS habilitados para RBAC.

Este artigo mostra como a rotação de certificados funciona no cluster do AKS.

Antes de começar

Este artigo exige a CLI do Azure versão 2.0.77 ou posterior. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.

Certificados AKS, Autoridades de Certificação e Contas de Serviço

O AKS gera e usa os seguintes certificados, Autoridades de Certificação (AC) e Contas de Serviço (SA):

  • O servidor de API do AKS cria uma AC chamada Cluster AC.
  • O servidor de API tem um Cluster AC, que assina certificados para uma comunicação unidirecional do servidor de API para kubelets.
  • Cada kubelet cria uma solicitação de assinatura de certificado (CSR), que é assinada pelo Cluster AC, para a comunicação do kubelet com o servidor de API.
  • O agregador de API usa o Cluster AC para emitir certificados para comunicação com outras APIs. O agregador de API também pode ter sua própria AC para emitir esses certificados, mas atualmente usa o Cluster AC.
  • Cada nó usa um token SA, que é assinado pelo Cluster AC.
  • O kubectl cliente tem um certificado para comunicação com o cluster do AKS.

A Microsoft mantém todos os certificados mencionados nesta seção, exceto o certificado do cluster.

Observação

  • Os clusters do AKS criados antes de maio de 2019 têm certificados que expiram após dois anos.
  • Os clusters do AKS criados depois de maio de 2019 têm certificados de Cluster AC que expiram após 30 anos.

Você pode verificar quando o cluster foi criado usando o comando kubectl get nodes, que mostra a Idade dos pools de nós.

Verificar datas de validade do certificado

Verifique a data de validade do certificado do cluster

  • Verifique a data de validade do certificado de cluster usando o comando kubectl config view.

    kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
    

Verificar a data de validade do certificado do servidor de API

  • Verifique a data de validade do certificado do servidor de API usando o comando curl a seguir.

    curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
    

Verificar a data de validade do certificado de nó do agente VMAS

  • Verifique a data de validade do certificado de nó do agente VMAS usando o comando az vm run-command invoke.

    az vm run-command invoke -g MC_rg_myAKSCluster_region -n vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
    

Verificar a data de validade do certificado de nó do agente do Conjunto de Dimensionamento de Máquinas Virtuais

  • Verifique a data de validade do certificado de nó do agente do conjunto de dimensionamento de máquinas virtuais usando o comando az vm run-command invoke.

    az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate" --query "value[0].message"
    

Rotação automática de certificado

Para o AKS girar automaticamente os certificados que não são de AC, o cluster precisa ter a inicialização de TLS, que é habilitada por padrão em todas as regiões do Azure.

Observação

  • Se você tiver um cluster existente, precisará atualizar esse cluster para habilitar a rotação automática de Certificado.
  • Não desabilite o Bootstrap para manter a rotação automática habilitada.
  • Se o cluster estiver em um estado parado durante a rotação automática do certificado, somente os certificados do painel de controle serão girados. Nesse caso, você deve recriar o pool de nós após a rotação do certificado para iniciar a rotação do certificado do pool de nós.

Para todos os clusters do AKS criados ou atualizados após março de 2022, o Serviço de Kubernetes do Azure rotaciona automaticamente certificados não AC nos nós do agente e plano de controle dentro de 80% do tempo válido do certificado do cliente, antes de expirarem e sem tempo de inatividade para o cluster.

Como verificar se o pool de nós do agente atual está habilitado para inicialização de TLS?

  1. Verifique se o cluster tem Inicialização TLS habilitada navegando até um dos seguintes caminhos:

    • Em um nó do Linux: /var/lib/kubelet/bootstrap-kubeconfig ou /host/var/lib/kubelet/bootstrap-kubeconfig
    • Em um nó Windows: C:\k\bootstrap-config

    Para obter mais informações, confira Conecte os nós de cluster do Azure Kubernetes Service (AKS) para manutenção ou solução de problemas.

    Observação

    O caminho do arquivo pode ser alterado conforme as versões do Kubernetes evoluem.

  2. Depois que uma região estiver configurada, crie um novo cluster ou atualize um cluster existente para definir a rotação automática do certificado de cluster. Você precisa atualizar o painel de controle e o pool de nós para habilitar esse recurso.

Rotacionar manualmente os certificados do cluster

Aviso

Girar os certificados usando az aks rotate-certs recria todos os seus nós, Conjuntos de Dimensionamento de Máquinas Virtuais e Discos e pode causar até 30 minutos de tempo de inatividade para o seu cluster do AKS.

  1. Conecte-se ao seu cluster usando o comando az aks get-credentials.

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    
  2. Gire todos os certificados, CAs e SAs em seu cluster usando o comando az aks rotate-certs.

    az aks rotate-certs -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    

    Importante

    Isso pode levar até 30 minutos para az aks rotate-certs ser concluído. Se o comando falhar antes de concluir, use az aks show para verificar se o status do cluster é Certificado em rotação. Se o cluster estiver em um estado de falha, execute az aks rotate-certs novamente para girar os certificados outra vez.

  3. Verifique se os certificados antigos não são mais válidos usando qualquer comando kubectl, como kubectl get nodes.

    kubectl get nodes
    

    Se você não atualizou os certificados usados pelo kubectl, verá um erro semelhante ao seguinte exemplo de saída:

    Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
    
  4. Atualize o certificado usado por kubectl usando o comando az aks get-credentials com o sinalizador --overwrite-existing.

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing
    
  5. Verifique se os certificados foram atualizados usando o comando kubectl get.

    kubectl get nodes
    

    Observação

    Se você tiver serviços que sejam executados com base no AKS, poderá ser necessário atualizar os certificados relacionados a eles.

Próximas etapas

Este artigo mostrou como girar automaticamente os certificados, ACs e SAs do seu cluster. Para obter mais informações, confira Melhores práticas para segurança de cluster e atualizações no Serviço de Kubernetes do Azure (AKS).