Hayat
Google Cloud Platform Script de auditoría y endurecimiento ~
¿Qué significa "Hayat"?
Bueno, la verdad es que me costó encontrar un nombre único. "Hayat" es una palabra turca que significa "Vida" en inglés y también es el nombre de mi sobrina. ¿Listo para conocerla?
😍 😍 😍
Hayat es un script de auditoría y endurecimiento para servicios de Google Cloud Platform como:
- Gestión de Identidades y Accesos
- Registro y supervisión
- Redes
- Máquinas virtuales
- Almacenamiento
- Instancias de Cloud SQL
- Clústeres de Kubernetes
por ahora.
Identity & Access Management
- Asegurarse de que se utilicen credenciales de inicio de sesión corporativas en lugar de cuentas de Gmail.
- Asegurarse de que solo existan claves de cuenta de servicio administradas por GCP para cada cuenta de servicio.
- Asegurarse de que la cuenta de servicio no tenga privilegios de administrador.
- Asegurarse de que a los usuarios de IAM no se les asigne el rol de Service Account User a nivel de proyecto.
- Asegurarse de que las claves gestionadas por el usuario/externas para las cuentas de servicio se roten cada 90 días o menos.
- Asegurarse de que se aplique la separación de funciones al asignar roles relacionados con cuentas de servicio a los usuarios.
Logging and Monitoring
- Asegurarse de que los sumideros (sinks) estén configurados para todas las entradas de registro.
- Asegurarse de que el versionado de objetos esté habilitado en los buckets de registro.
Networking
- Asegurarse de que la red predeterminada no exista en un proyecto.
- Asegurarse de que no existan redes heredadas para un proyecto.
- Asegurarse de que DNSSEC esté habilitado para Cloud DNS.
- Asegurarse de que RSASHA1 no se utilice para la clave de firma de claves en Cloud DNS DNSSEC.
- Asegurarse de que RSASHA1 no se utilice para la clave de firma de zona en Cloud DNS DNSSEC.
- Asegurarse de que el acceso RDP esté restringido desde Internet.
- Asegurarse de que el acceso SSH esté restringido desde Internet.
- Asegurarse de que Private Google Access esté habilitado para todas las subredes en la VPC.
- Asegurarse de que los registros de flujo de VPC estén habilitados para cada subred en la VPC.
Virtual Machines
- Asegurarse de que las instancias no estén configuradas para usar la cuenta de servicio predeterminada con acceso completo a todas las API de Cloud.
- Asegurarse de que "Bloquear claves SSH de todo el proyecto" esté habilitado para las instancias de VM.
- Asegurarse de que oslogin esté habilitado para un proyecto.
- Asegurarse de que 'Habilitar conexión a puertos serie' no esté habilitado para la instancia de VM.
- Asegurarse de que el reenvío de IP no esté habilitado en las instancias.
- Asegurarse de que los discos de VM para máquinas virtuales críticas estén cifrados con claves de cifrado proporcionadas por el cliente (CSEK).
Storage
- Asegurarse de que el bucket de Cloud Storage no sea accesible de forma anónima o pública.
- Asegurarse de que el registro esté habilitado para el bucket de Cloud Storage.
Cloud SQL Database Services
- Asegurarse de que la instancia de base de datos Cloud SQL requiera que todas las conexiones entrantes usen SSL.
- Asegurarse de que las instancias de base de datos Cloud SQL no estén abiertas al público.
- Asegurarse de que la instancia de base de datos MySQL no permita que nadie se conecte con privilegios administrativos.
- Asegurarse de que la instancia de base de datos MySQL no permita el inicio de sesión de root desde cualquier host.
Kubernetes Engine
- Asegurarse de que Stackdriver Logging esté configurado como Habilitado en los clústeres de Kubernetes Engine.
- Asegurarse de que Stackdriver Monitoring esté configurado como Habilitado en los clústeres de Kubernetes Engine.
- Asegurarse de que la autorización heredada esté configurada como Deshabilitada en los clústeres de Kubernetes Engine.
- Asegurarse de que las redes autorizadas del maestro estén configuradas como Habilitadas en los clústeres de Kubernetes Engine.
- Asegurarse de que los clústeres de Kubernetes estén configurados con etiquetas.
- Asegurarse de que la interfaz web / Dashboard de Kubernetes esté deshabilitada.
- Asegurarse de que la
reparación automática de nodos esté habilitada para los clústeres de Kubernetes.
- Asegurarse de que las actualizaciones automáticas de nodos estén habilitadas en los nodos de los clústeres de Kubernetes Engine.
- Asegurarse de que se use Container-Optimized OS (cos) como imagen de nodo para los clústeres de Kubernetes Engine.
- Asegurarse de que la autenticación básica esté deshabilitada en los clústeres de Kubernetes Engine.
- Asegurarse de que la política de red esté habilitada en los clústeres de Kubernetes Engine.
- Asegurarse de que el clúster de Kubernetes se cree con el certificado de cliente habilitado.
- Asegurarse de que el clúster de Kubernetes se cree con rangos de IP alias habilitados.
- Asegurarse de que el controlador PodSecurityPolicy esté habilitado en los clústeres de Kubernetes Engine.
- Asegurarse de que el clúster de Kubernetes se cree con clúster privado habilitado.
- Asegurarse de que Private Google Access esté configurado en las subredes del clúster de Kubernetes Engine.
- Asegurarse de que no se use la cuenta de servicio predeterminada para el acceso al proyecto en los clústeres de Kubernetes.
- Asegurarse de que los clústeres de Kubernetes se creen con alcances de acceso de cuenta de servicio limitados para el acceso al proyecto.
Requirements
Hayat ha sido escrito en script bash usando gcloud y es compatible con Linux y OSX.
Usage
git clone https://github.com/DenizParlak/Hayat.git && cd Hayat && chmod +x hayat.sh && ./hayat.sh
Puedes usarlo con funciones específicas, por ejemplo, si deseas escanear solo el clúster de Kubernetes:
./hayat.sh --only-k8s
Screenshots

