Seguridad

En esta página, se describen las funciones de seguridad que se incluyen en GKE en AWS, además de cada capa de su infraestructura y cómo puedes configurarlas según tus necesidades.

Descripción general

GKE en AWS ofrece varias funciones para ayudar a proteger las cargas de trabajo, incluido el contenido de la imagen de contenedor, el entorno de ejecución del contenedor, la red del clúster y el acceso al servidor de la API del clúster.

Es mejor adoptar un enfoque por capas para proteger los clústeres y las cargas de trabajo. Puedes aplicar el principio de privilegio mínimo al nivel de acceso que proporcionas a los usuarios y las cargas de trabajo. Es posible que debas realizar compensaciones para permitir el nivel adecuado de flexibilidad y seguridad.

Responsabilidades compartidas

Cuando usas GKE en AWS, aceptas asumir ciertas responsabilidades en tus clústeres. Para obtener más información, consulta Responsabilidades compartidas de los clústeres de GKE.

Autenticación y autorización

Debes autenticarte en un clúster de usuario de GKE en AWS por medio de uno de los siguientes métodos:

Para configurar un acceso más detallado a los recursos de Kubernetes a nivel del clúster o en los espacios de nombres de Kubernetes, usa el Control de acceso basado en funciones (RBAC) de Kubernetes. El RBAC te permite crear políticas detalladas para definir a qué operaciones y recursos pueden acceder los usuarios y las cuentas de servicio. Con el RBAC, puedes controlar el acceso para cualquier identidad proporcionada que se validó.

A fin de simplificar y optimizar aún más la estrategia de autenticación y autorización para Kubernetes Engine, GKE en AWS inhabilita el control de acceso basado en atributos heredados (ABAC).

Encriptación

De forma predeterminada, GKE en AWS encripta los datos en etcd en reposo, los volúmenes de EBS, los secrets de Kubernetes y los componentes del plano de control con el Servicio de administración de claves de AWS (KMS).

Para encriptar datos sensibles en los clústeres de usuario, puedes usar una de las siguientes opciones:

Secrets de Kubernetes

Los recursos de los secrets de Kubernetes almacenan datos sensibles, como contraseñas, tokens de OAuth y claves SSH en los clústeres. El almacenamiento de datos sensibles en secrets es más seguro que el almacenamiento en ConfigMaps de texto simple o en especificaciones de Pod. El uso de secrets te permite controlar la manera en que se usan los datos sensibles y reduce el riesgo de exposición de datos a usuarios no autorizados.

HashiCorp Vault

GKE en AWS puede usar Hashicorp Vault para proteger los secretos en tus clústeres de usuario. Para obtener más información, consulta Usa HashiCorp Vault en GKE en AWS.

Seguridad del plano de control

Los componentes del plano de control incluyen el servicio de administración y el servidor de la API de Kubernetes, el programador, los controladores y la base de datos de etcd del clúster de usuario. En GKE on AWS, los administradores locales gestionan los componentes del plano de control.

En GKE on AWS, los componentes del plano de control se ejecutan en AWS. Puedes proteger el servidor de la API de GKE on AWS mediante los grupos de seguridad de AWS y las LCA de red.

Todas las comunicaciones en GKE on AWS son a través de los canales de seguridad de la capa de transporte (TLS) regidos por las siguientes autoridades certificadoras (CA):

  • La CA de etcd protege la comunicación del servidor de la API a las réplicas de etcd y también el tráfico entre réplicas de etcd. Esta CA está autofirmada.
  • La CA del clúster de usuario protege la comunicación entre el servidor de la API y todos los clientes internos de la API de Kubernetes (kubelets, controladores, programadores). Esta CA está encriptada con KMS.
  • La CA del servicio de administración está encriptada con KMS. Se crea cuando ejecutas anthos-gke init y se almacena en el lugar de trabajo de Terraform. Cuando usas terraform apply para crear el servicio de administración, la clave de CA se pasa como datos del usuario de AWS EC2 y se desencriptan mediante el KMS de AWS cuando se inicia el clúster.

Para el servicio de administración, las claves del plano de control se almacenan en el plano de control [nodes]{:.external}. Para los clústeres de usuario, las claves se almacenan como secrets de Kubernetes en el plano de control del servicio de administración.

La autenticación del clúster en GKE on AWS se maneja mediante certificados y tokens del portador de la cuenta de servicio. Como administrador, debes autenticarte en el plano de control mediante el certificado administrativo del servicio de administración (que usas para la creación de vínculos de funciones iniciales o con fines de emergencia).

La rotación de certificados se controla de las siguientes maneras:

  • Para el servidor de la API, los planos de control y los nodos, GKE en AWS rota los certificados TLS en cada actualización.
  • También puedes Rotar las credenciales de seguridad de forma manual.

Seguridad de nodos

GKE on AWS implementa tus cargas de trabajo en grupos de nodos de instancias de AWS EC2. En las siguientes secciones, se explica cómo usar las funciones de seguridad a nivel de nodo en GKE on AWS.

Ubuntu

GKE en AWS usa una versión optimizada de Ubuntu como el sistema operativo en el que se ejecutan el plano de control y los nodos de Kubernetes. Ubuntu incluye un amplio conjunto de funciones de seguridad modernas, y GKE en AWS implementa varias funciones para mejorar la seguridad de los clústeres, incluidas las siguientes:

  • Conjunto de paquetes optimizado.
  • Kernel de Linux adaptado a Google Cloud.
  • Cuentas de usuario restringido y acceso raíz inhabilitado.

Las guías de seguridad adicionales están disponibles para Ubuntu, como las que se mencionan a continuación:

Actualizaciones de nodos

Debes actualizar los nodos de forma periódica. Es posible que, cada tanto, los problemas de seguridad en el entorno de ejecución del contenedor, Kubernetes, o el sistema operativo del nodo requieran que actualices los nodos con mayor urgencia. Cuando actualizas el clúster de usuario, el software de cada nodo se actualiza a la última versión. Además, la actualización de los nodos rota las credenciales de encriptación.

Cómo asegurar las cargas de trabajo

Kubernetes permite a los usuarios aprovisionar, escalar y actualizar con rapidez las cargas de trabajo basadas en contenedores. En esta sección, se describen tácticas que puedes usar para limitar los efectos secundarios de ejecutar contenedores en el clúster y los servicios de Google Cloud.

Limita los privilegios del proceso de contenedor del Pod

Limitar los privilegios de los procesos alojados en contenedores es importante para la seguridad del clúster. Puedes configurar opciones relacionadas con la seguridad con el contexto de seguridad de los Pods y los contenedores. Esta configuración te permite cambiar la configuración de seguridad de los procesos. Por ejemplo:

  • Usuario y grupo que ejecuta el proceso.
  • Funciones de Linux disponibles
  • Elevación de privilegios.

El sistema operativo de nodos predeterminado de GKE en AWS, Ubuntu, aplica las políticas de seguridad de Docker AppArmor a todos los contenedores que inicia Kubernetes. Puedes ver la plantilla del perfil en GitHub. Entre otros aspectos, el perfil les niega las siguientes capacidades a los contenedores:

  • Escribir en archivos directamente en un directorio de ID de proceso (/proc/)
  • Escribir en archivos que no están en /proc/.
  • Escribir en archivos de /proc/sys que no sean /proc/sys/kernel/shm*
  • Activar sistemas de archivos.

¿Qué sigue?