Rotación de certificados en Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) usa certificados para la autenticación con muchos de sus componentes. Periódicamente, puede que necesite rotar esos certificados por motivos de seguridad o de directivas. Por ejemplo, puede establecer una directiva para girar todos los certificados cada 90 días.

En este artículo se muestra cómo rotar los certificados en el clúster de AKS.

Antes de empezar

Para este artículo, es preciso usar la versión 2.0.77 de la CLI de Azure o cualquier versión posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Certificados de AKS, entidades de certificación y cuentas de servicio

AKS genera y usa los siguientes certificados, entidades de certificación y cuentas de servicio:

  • El servidor de API de AKS crea una entidad de certificación (CA) denominada CA del clúster.
  • El servidor de API tiene una CA del clúster que firma los certificados para la comunicación unidireccional desde el servidor de API a kubelets.
  • Cada kubelet también crea una solicitud de firma de certificado (CSR), que está firmada por la CA del clúster, para la comunicación desde el kubelet al servidor de la API.
  • El agregador de API usa la CA del clúster para emitir certificados para la comunicación con otras API. El agregador de API también puede tener su propia CA para emitir esos certificados, pero actualmente usa la CA del clúster.
  • Cada nodo usa un token de cuenta de servicio (SA), que está firmado por la CA del clúster.
  • El cliente kubectl tiene un certificado para comunicarse con el clúster de AKS.

Nota

Los clústeres de AKS creados antes de mayo de 2019 tienen certificados que expiran después de dos años. Los clústeres creados después de mayo del 2019 o cualquier clúster que tenga rotados sus certificados tienen certificados de CA del clúster que expiran a los 30 años. Todos los demás certificados de AKS, que usan la CA del clúster a para firmar, expirarán después de dos años y se rotarán automáticamente durante la actualización de la versión de AKS. Para comprobar cuándo se creó el clúster, use kubectl get nodes para ver la Antigüedad de los grupos de nodos.

Además, puede comprobar la fecha de expiración del certificado del clúster. Por ejemplo, el comando de bash siguiente muestra los detalles del certificado de cliente para el clúster myAKSCluster en el grupo de recursos rg.

kubectl config view --raw -o jsonpath="{.users[?(@.name == 'clusterUser_rg_myAKSCluster')].user.client-certificate-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
  • Comprobación de la fecha de expiración del certificado apiserver
curl https://{apiserver-fqdn} -k -v 2>&1 |grep expire
  • Comprobación de la fecha de expiración del certificado en el nodo del agente de VMAS
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"
  • Comprobación de la fecha de expiración del certificado en el nodo del agente de Microsoft Azure Virtual Machine Scale Sets
az vmss run-command invoke -g MC_rg_myAKSCluster_region -n vmss-name --instance-id 0 --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"

Rotación automática de certificados

Azure Kubernetes Service rotará automáticamente los certificados que no sean una entidad de certificación en el plano de control y en los nodos de agente antes de que expiren sin tiempo de inactividad para el clúster.

Para que AKS rote automáticamente los certificados que no son de CA, el clúster debe tener un Arranque de TLS. El arranque de TLS está disponible actualmente en las siguientes regiones:

  • eastus2euap
  • centraluseuap
  • westcentralus
  • uksouth
  • estado
  • australiacentral
  • australiaest

¿Cómo comprobar si el grupo de nodos de agente actual está habilitado para el arranque TLS?

Para comprobar si el arranque TLS está habilitado en el clúster, vaya a las rutas de acceso siguientes. En un nodo de Linux: /var/lib/kubelet/bootstrap-kubeconfig En un nodo de Windows: c:\k\bootstrap-config

[Nota] La ruta de acceso del archivo puede cambiar a medida que la versión de k8s evolucione en el futuro.

Importante

Una vez configurada una región, cree un nuevo clúster o actualice un clúster existente "az aks upgrade -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME" para establecer ese clúster en la rotación de certificados automáticos.

Limitación

La rotación automática de certificados no se habilitará en un clúster que no sea de tipo rbac.

Rotar los certificados de clúster

Advertencia

La rotación de los certificados con az aks rotate-certs recreará todos los nodos y sus discos de SO y puede producir un tiempo de inactividad de hasta 30 minutos para el clúster de AKS.

Use az aks get-credentials para iniciar sesión en el clúster de AKS. Este comando también descarga y configura el certificado de cliente kubectl en el equipo local.

az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME

Use az aks rotate-certs para rotar todos los certificados, entidades de certificación (CA) y cuentas de servicio (SA) del clúster.

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

Importante

Este proceso puede tardar hasta 30 minutos para que az aks rotate-certs se complete. Si se produce un error en el comando antes de finalizar, use az aks show para comprobar que el estado del clúster es Certificate Rotating (Rotación de certificados). Si el clúster se encuentra en un estado de error, vuelva a ejecutar az aks rotate-certs para rotar los certificados otra vez.

Para comprobar que los certificados antiguos ya no son válidos, ejecute un comando kubectl. Como no ha actualizado los certificados usados por kubectl, verá que aparece un error. Por ejemplo:

$ kubectl get no
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")

Actualice el certificado usado por kubectl ejecutando az aks get-credentials.

az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing

Compruebe que los certificados se han actualizado mediante la ejecución de un comando kubectl, que ahora se realizará correctamente. Por ejemplo:

kubectl get no

Nota

Si tiene algún servicio que se ejecute sobre AKS, es posible que también tenga que actualizar los certificados relacionados con esos servicios.

Pasos siguientes

En este artículo se ha mostrado cómo rotar automáticamente los certificados, las entidades de certificación (CA) y las cuentas de servicio (SA) del clúster. Para obtener más información sobre los procedimientos recomendados de seguridad de AKS, puede consultar las Prácticas recomendadas para la seguridad de los clústeres y las actualizaciones en Azure Kubernetes Service (AKS).