Hayat
Script di Audit e Hardening per Google Cloud Platform ~
Cosa significa "Hayat"?
Beh, ho fatto fatica a trovare un nome unico, onestamente. "Hayat" è una parola turca che significa "Vita" in inglese ed è anche il nome di mia nipote. Pronti a incontrarla?
😍 😍 😍
Hayat è uno script di audit e hardening per i servizi di Google Cloud Platform come:
- Identity & Access Management
- Logging and monitoring
- Networking
- Virtual Machines
- Storage
- Cloud SQL Instances
- Kubernetes Clusters
per ora.
Identity & Access Management
- Assicurarsi che vengano utilizzate credenziali di login aziendali invece di account Gmail.
- Assicurarsi che per ogni account di servizio siano presenti solo chiavi gestite da GCP.
- Assicurarsi che ServiceAccount non abbia privilegi di amministratore.
- Assicurarsi che gli utenti IAM non abbiano il ruolo di Service Account User a livello di progetto.
- Assicurarsi che le chiavi user-managed/external per gli account di servizio vengano ruotate ogni 90 giorni o meno.
- Assicurarsi che la separazione dei compiti sia applicata nell'assegnazione dei ruoli relativi agli account di servizio agli utenti.
Logging and Monitoring
- Assicurarsi che siano configurati sink per tutte le voci di log.
- Assicurarsi che il versionamento degli oggetti sia abilitato sui bucket di log.
Networking
- Assicurarsi che la rete predefinita non esista in un progetto.
- Assicurarsi che le reti legacy non esistano per un progetto.
- Assicurarsi che DNSSEC sia abilitato per Cloud DNS.
- Assicurarsi che RSASHA1 non venga utilizzato per il key-signing key in Cloud DNS DNSSEC.
- Assicurarsi che RSASHA1 non venga utilizzato per il zone-signing key in Cloud DNS DNSSEC.
- Assicurarsi che l'accesso RDP sia limitato da Internet.
- Assicurarsi che l'accesso SSH sia limitato da Internet.
- Assicurarsi che Private Google Access sia abilitato per tutte le subnet nella rete VPC.
- Assicurarsi che i VPC Flow logs siano abilitati per ogni subnet nella rete VPC.
Virtual Machines
- Assicurarsi che le istanze non siano configurate per utilizzare l'account di servizio predefinito con accesso completo a tutte le API Cloud.
- Assicurarsi che "Block Project-wide SSH keys" sia abilitato per le istanze VM.
- Assicurarsi che oslogin sia abilitato per un progetto.
- Assicurarsi che 'Enable connecting to serial ports' non sia abilitato per l'istanza VM.
- Assicurarsi che il forwarding IP non sia abilitato sulle istanze.
- Assicurarsi che i dischi VM per VM critiche siano crittografati con CustomerSupplied Encryption Keys (CSEK)
Storage
- Assicurarsi che il bucket Cloud Storage non sia accessibile in modo anonimo o pubblico.
- Assicurarsi che la registrazione (logging) sia abilitata per il bucket Cloud Storage.
Cloud SQL Database Services
- Assicurarsi che l'istanza del database Cloud SQL richieda a tutte le connessioni in entrata l'uso di SSL.
- Assicurarsi che le istanze del database Cloud SQL non siano aperte al mondo.
- Assicurarsi che l'istanza del database MySQL non permetta a nessuno di connettersi con privilegi amministrativi.
- Assicurarsi che l'istanza del database MySQL non permetta l'accesso root da qualsiasi host.
Kubernetes Engine
- Assicurarsi che Stackdriver Logging sia impostato su Enabled sui cluster Kubernetes Engine.
- Assicurarsi che Stackdriver Monitoring sia impostato su Enabled sui cluster Kubernetes Engine.
- Assicurarsi che Legacy Authorization sia impostato su Disabled sui cluster Kubernetes Engine.
- Assicurarsi che Master authorized networks sia impostato su Enabled sui cluster Kubernetes Engine.
- Assicurarsi che i cluster Kubernetes siano configurati con Labels.
- Assicurarsi che la Kubernetes web UI / Dashboard sia disabilitata.
- Assicurarsi che
Automatic node repair sia abilitato per i cluster Kubernetes.
- Assicurarsi che Automatic node upgrades sia abilitato sui nodi dei cluster Kubernetes Engine.
- Assicurarsi che Container-Optimized OS (cos) sia utilizzato per l'immagine dei nodi dei cluster Kubernetes Engine.
- Assicurarsi che Basic Authentication sia disabilitata sui cluster Kubernetes Engine.
- Assicurarsi che Network policy sia abilitata sui cluster Kubernetes Engine.
- Assicurarsi che il cluster Kubernetes sia creato con Client Certificate abilitato.
- Assicurarsi che il cluster Kubernetes sia creato con Alias IP ranges abilitati.
- Assicurarsi che il controller PodSecurityPolicy sia abilitato sui cluster Kubernetes Engine.
- Assicurarsi che il cluster Kubernetes sia creato con Private cluster abilitato.
- Assicurarsi che Private Google Access sia impostato sulle subnet dei cluster Kubernetes Engine.
- Assicurarsi che l'account di servizio predefinito non sia utilizzato per l'accesso al progetto nei cluster Kubernetes.
- Assicurarsi che i cluster Kubernetes siano creati con service account Access scopes limitati per l'accesso al progetto.
Requisiti
Hayat è stato scritto in script bash utilizzando gcloud ed è compatibile con Linux e OSX.
Utilizzo
git clone https://github.com/DenizParlak/Hayat.git && cd Hayat && chmod +x hayat.sh && ./hayat.sh
È possibile utilizzarlo con funzioni specifiche, ad esempio per scansionare solo il cluster Kubernetes:
./hayat.sh --only-k8s
Screenshot

