Rotação de certificados no Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) utiliza certificados para autenticação com muitos dos seus componentes. Os clusters preparados para RBAC criados após março de 2022 estão ativados com a rotação automática de certificados. Poderá ter de rodar periodicamente esses certificados por motivos de segurança ou política. Por exemplo, pode ter uma política para rodar todos os certificados a cada 90 dias.
Nota
A rotação automática de certificados só está ativada por predefinição para clusters do AKS compatíveis com RBAC.
Este artigo mostra-lhe como funciona a rotação de certificados no cluster do AKS.
Antes de começar
Este artigo requer a versão 2.0.77 ou posterior da CLI do Azure. Executar az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
Certificados do AKS, Autoridades de Certificação e Contas de Serviço
O AKS gera e utiliza os seguintes certificados, Autoridades de Certificação (AC) e Contas de Serviço (SA):
- O servidor da API do AKS cria uma AC denominada AC de Cluster.
- O servidor de API tem uma AC de Cluster, que assina certificados para comunicação unidirecional do servidor de API para kubelets.
- Cada kubelet cria um Pedido de Assinatura de Certificados (CSR), que a AC de Cluster assina, para comunicação do kubelet para o servidor de API.
- O agregador de API utiliza a AC de Cluster para emitir certificados para comunicação com outras APIs. O agregador de API também pode ter a sua própria AC para emitir esses certificados, mas atualmente utiliza a AC do Cluster.
- Cada nó utiliza um token SA, que a AC de Cluster assina.
- O
kubectl
cliente tem um certificado para comunicar com o cluster do AKS.
A Microsoft mantém todos os certificados mencionados nesta secção, exceto o certificado de cluster.
Nota
- Os clusters do AKS criados antes de maio de 2019 têm certificados que expiram após dois anos.
- Os clusters do AKS criados após maio de 2019 têm certificados de AC de Cluster que expiram após 30 anos.
Pode verificar quando o cluster foi criado com o kubectl get nodes
comando, que lhe mostra a Idade dos conjuntos de nós.
Verificar as datas de expiração do certificado
Verificar a data de expiração do certificado de cluster
Verifique a data de expiração do certificado de cluster com o
kubectl config view
comando .kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
Verificar a data de expiração do certificado do servidor de API
Verifique a data de expiração do certificado do servidor de API com o seguinte
curl
comando.curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
Verificar a data de expiração do certificado de nó do agente VMAS
Verifique a data de expiração do certificado de nó do agente VMAS com o
az vm run-command invoke
comando .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 expiração do certificado de nó do agente do Conjunto de Dimensionamento de Máquinas Virtuais
Verifique a data de expiração do certificado de nó do agente do Conjunto de Dimensionamento de Máquinas Virtuais com o
az vm run-command invoke
comando .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 do Certificado
Para o AKS rodar automaticamente certificados não CA, o cluster tem de ter o Bootstrapping TLS, que está ativado por predefinição em todas as regiões do Azure.
Nota
- Se tiver um cluster existente, terá de atualizar esse cluster para ativar a Rotação Automática de Certificados.
- Não desative o Bootstrap para manter a rotação automática ativada.
- Se o cluster estiver num estado parado durante a rotação do certificado automático, apenas os certificados do plano de controlo são rodados. Neste caso, deve recriar o conjunto de nós após a rotação do certificado para iniciar a rotação do certificado do conjunto de nós.
Para todos os clusters do AKS criados ou atualizados após março de 2022, Azure Kubernetes Service roda automaticamente certificados não CA no plano de controlo e nos nós de agente dentro de 80% do tempo válido do certificado de cliente antes de expirarem sem tempo de inatividade para o cluster.
Como verificar se o conjunto de nós do agente atual está ativado para o Bootstrapping do TLS?
Verifique se o cluster tem o Bootstrapping TLS ativado ao navegar para um para os seguintes caminhos:
- Num nó do Linux: /var/lib/kubelet/bootstrap-kubeconfig ou /host/var/lib/kubelet/bootstrap-kubeconfig
- Num nó do Windows: C:\k\bootstrap-config
Para obter mais informações, veja Ligar a Azure Kubernetes Service nós de cluster para manutenção ou resolução de problemas.
Nota
O caminho do ficheiro pode mudar à medida que as versões do Kubernetes evoluem.
Assim que uma região estiver configurada, crie um novo cluster ou atualize um cluster existente para definir a rotação automática para o certificado de cluster. Tem de atualizar o plano de controlo e o conjunto de nós para ativar esta funcionalidade.
Rodar manualmente os certificados do cluster
Aviso
Rodar os certificados com az aks rotate-certs
recria todos os nós, Conjuntos de Dimensionamento de Máquinas Virtuais e Discos e pode causar até 30 minutos de tempo de inatividade para o cluster do AKS.
Ligue-se ao cluster com o
az aks get-credentials
comando .az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
Rode todos os certificados, ACs e SAs no cluster com o
az aks rotate-certs
comando .az aks rotate-certs -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
Importante
A conclusão poderá demorar até 30 minutos
az aks rotate-certs
. Se o comando falhar antes de concluir, utilizeaz aks show
para verificar se o estado do cluster é Rotação de Certificados. Se o cluster estiver num estado de falha, volte a executaraz aks rotate-certs
para rodar os certificados novamente.Verifique se os certificados antigos já não são válidos com qualquer
kubectl
comando, comokubectl get nodes
.kubectl get nodes
Se não tiver atualizado os certificados utilizados pelo
kubectl
, verá um erro semelhante ao seguinte resultado de exemplo: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")
Atualize o certificado utilizado com
kubectl
oaz aks get-credentials
comando com o--overwrite-existing
sinalizador.az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing
Verifique se os certificados foram atualizados com o
kubectl get
comando .kubectl get nodes
Nota
Se tiver serviços que sejam executados sobre o AKS, poderá ter de atualizar os certificados.
Passos seguintes
Este artigo mostrou-lhe como rodar automaticamente os seus certificados de cluster, ACs e SAs. Para obter mais informações, veja Melhores práticas para a segurança do cluster e atualizações no Azure Kubernetes Service (AKS).