Hayat
Google Cloud Platform 审计与加固脚本 ~
"Hayat" 是什么意思?
嗯,老实说,我很难找到一个独特的名字。"Hayat" 是一个土耳其语单词,在英语中意为"生命",同时也是我侄女的名字。准备好见她了吗?
😍 😍 😍
Hayat 是一个用于 Google Cloud Platform 服务的审计与加固脚本,涵盖的服务包括:
- 身份与访问管理
- 日志记录与监控
- 网络
- 虚拟机
- 存储
- Cloud SQL 实例
- Kubernetes 集群
目前仅支持以上服务。
身份与访问管理
- 确保使用企业登录凭据而非 Gmail 账户。
- 确保每个服务账户仅使用 GCP 管理的服务账户密钥。
- 确保服务账户没有管理员权限。
- 确保 IAM 用户未在项目级别分配服务账户用户角色。
- 确保服务账户的用户管理/外部密钥每 90 天或更短时间轮换一次。
- 确保在为用户分配与服务账户相关的角色时执行职责分离。
日志记录与监控
- 确保为所有日志条目配置了接收器。
- 确保在日志存储桶上启用了对象版本控制。
网络
- 确保项目中没有默认网络。
- 确保项目中不存在传统网络。
- 确保 Cloud DNS 启用了 DNSSEC。
- 确保 Cloud DNS DNSSEC 中未使用 RSASHA1 作为密钥签名密钥。
- 确保 Cloud DNS DNSSEC 中未使用 RSASHA1 作为区域签名密钥。
- 确保限制从 Internet 访问 RDP。
- 确保限制从 Internet 访问 SSH。
- 确保 VPC 网络中的每个子网都启用了 Private Google Access。
- 确保 VPC 网络中的每个子网都启用了 VPC Flow logs。
虚拟机
- 确保实例未配置为使用默认服务账户并拥有对所有 Cloud API 的完全访问权限。
- 确保 VM 实例启用了"阻止项目范围的 SSH 密钥"。
- 确保项目启用了 oslogin。
- 确保 VM 实例未启用"允许连接到串行端口"。
- 确保实例未启用 IP 转发。
- 确保关键 VM 的磁盘使用客户提供的加密密钥 (CSEK) 加密。
存储
- 确保 Cloud Storage 存储桶不可匿名或公开访问。
- 确保 Cloud Storage 存储桶启用了日志记录。
Cloud SQL 数据库服务
- 确保 Cloud SQL 数据库实例要求所有传入连接使用 SSL。
- 确保 Cloud SQL 数据库实例未对全世界开放。
- 确保 MySQL 数据库实例不允许任何人以管理员权限连接。
- 确保 MySQL 数据库实例不允许从任意主机进行 root 登录。
Kubernetes 引擎
- 确保 Kubernetes 引擎集群已启用 Stackdriver 日志记录。
- 确保 Kubernetes 引擎集群已启用 Stackdriver 监控。
- 确保 Kubernetes 引擎集群已禁用传统授权。
- 确保 Kubernetes 引擎集群已启用 Master 授权网络。
- 确保 Kubernetes 集群配置了标签。
- 确保 Kubernetes Web UI / 仪表板已禁用。
- 确保 Kubernetes 集群启用了"自动节点修复"。
- 确保 Kubernetes 引擎集群节点启用了自动节点升级。
- 确保 Kubernetes 引擎集群节点镜像使用 Container-Optimized OS (cos)。
- 确保 Kubernetes 引擎集群禁用了基本身份验证。
- 确保 Kubernetes 引擎集群启用了网络策略。
- 确保 Kubernetes 集群创建时启用了客户端证书。
- 确保 Kubernetes 集群创建时启用了别名 IP 范围。
- 确保 Kubernetes 引擎集群启用了 PodSecurityPolicy 控制器。
- 确保 Kubernetes 集群创建时启用了私有集群。
- 确保 Kubernetes 引擎集群子网启用了 Private Google Access。
- 确保 Kubernetes 集群中未使用默认服务账户进行项目访问。
- 确保 Kubernetes 集群创建时使用了受限的服务账户访问范围进行项目访问。
要求
Hayat 使用 bash 脚本编写,基于 gcloud,兼容 Linux 和 OSX。
使用方法
git clone https://github.com/DenizParlak/Hayat.git && cd Hayat && chmod +x hayat.sh && ./hayat.sh
可以使用特定功能进行扫描,例如仅扫描 Kubernetes 集群:
./hayat.sh --only-k8s
截图

