| name | performing-gcp-security-assessment-with-forseti |
| description | 使用 Forseti Security、Security Command Center(安全指挥中心)和 gcloud CLI 对 Google Cloud Platform 环境进行全面安全评估,审计 IAM 策略、防火墙规则、存储权限,并对照 CIS GCP Foundations Benchmark 进行合规检查。
|
| domain | cybersecurity |
| subdomain | cloud-security |
| tags | ["cloud-security","gcp","forseti","security-command-center","iam-audit","cis-benchmark"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 Forseti 执行 GCP 安全评估
适用场景
- 对 GCP 组织和项目进行定期安全评估时
- 接入新 GCP 项目并建立安全基线时
- 合规要求评估 CIS GCP Foundations Benchmark 时
- 跨多个 GCP 项目审计 IAM 绑定、防火墙规则和存储 ACL 时
- 为 GCP 基础设施构建持续安全监控时
不适用于:替代 GCP Security Command Center Premium 进行实时威胁检测、应用层漏洞扫描(应使用 Web Security Scanner),或 GKE 专项安全评估(应使用 GKE Security Posture)。
前置条件
- GCP 组织(Organization)具有 Organization Admin 或 Security Admin IAM 角色
- gcloud CLI 已使用足够权限进行认证(
roles/securitycenter.admin、roles/iam.securityReviewer)
- 在组织级别启用 Security Command Center(SCC)
- 已安装 ScoutSuite 用于多云对比(
pip install scoutsuite)
- Python 3.8+ 及 google-cloud-asset 和 google-cloud-securitycenter 库,用于自定义审计脚本
工作流程
步骤 1:启用 Security Command Center 和资产清单
启用 SCC 并设置 Cloud Asset Inventory(云资产清单),以实现全面的资源可见性。
gcloud services enable securitycenter.googleapis.com \
--project=PROJECT_ID
gcloud services enable cloudasset.googleapis.com \
--project=PROJECT_ID
gcloud asset search-all-resources \
--scope=organizations/ORG_ID \
--asset-types="compute.googleapis.com/Instance,storage.googleapis.com/Bucket,iam.googleapis.com/ServiceAccount" \
--format="table(name, assetType, location, project)"
gcloud asset export \
--organization=ORG_ID \
--output-bigquery-force \
--output-bigquery-dataset=projects/PROJECT_ID/datasets/asset_inventory \
--output-bigquery-table=resources \
--content-type=resource
步骤 2:审计 IAM 策略和绑定
审查整个组织的 IAM 策略,查找过度宽松的绑定、原始角色(Primitive Role)和服务账号滥用情况。
gcloud organizations get-iam-policy ORG_ID \
--format=json > org-iam-policy.json
gcloud asset search-all-iam-policies \
--scope=organizations/ORG_ID \
--query="policy:roles/owner OR policy:roles/editor" \
--format="table(resource, policy.bindings.role, policy.bindings.members)"
gcloud asset search-all-iam-policies \
--scope=organizations/ORG_ID \
--query="policy.bindings.members:serviceAccount AND policy:roles/owner" \
--format=json
gcloud asset search-all-iam-policies \
--scope=organizations/ORG_ID \
--query="policy:allUsers OR policy:allAuthenticatedUsers" \
--format="table(resource, policy.bindings.role, policy.bindings.members)"
gcloud iam service-accounts keys list \
--iam-account=SA_EMAIL \
--managed-by=user \
--format="table(name,validAfterTime,validBeforeTime)"
步骤 3:评估防火墙规则和网络配置
审计 VPC 防火墙规则,检查过度宽松的入站规则、缺失日志记录和网络暴露情况。
gcloud compute firewall-rules list \
--filter="direction=INGRESS AND sourceRanges=0.0.0.0/0" \
--format="table(name, network, allowed, sourceRanges, targetTags)"
gcloud compute firewall-rules list \
--filter="direction=INGRESS AND allowed[].IPProtocol=all" \
--format="table(name, network, sourceRanges, targetTags)"
gcloud compute firewall-rules list \
--filter="direction=INGRESS AND sourceRanges=0.0.0.0/0 AND (allowed[].ports=22 OR allowed[].ports=3389)" \
--format="table(name, network, allowed, sourceRanges)"
gcloud compute networks subnets list \
--format="table(name, region, enableFlowLogs, logConfig.aggregationInterval)"
步骤 4:审计 Cloud Storage 存储桶权限
检查公开可访问的存储桶和缺失的加密配置。
gsutil ls -p PROJECT_ID
for bucket in $(gsutil ls -p PROJECT_ID); do
echo "=== $bucket ==="
gsutil iam get "$bucket" | grep -E "allUsers|allAuthenticatedUsers" && \
echo " 警告:检测到公开访问" || \
echo " 正常:无公开访问"
done
for bucket in $(gsutil ls -p PROJECT_ID); do
echo "=== $bucket ==="
gsutil kms encryption "$bucket" 2>/dev/null || echo " 使用 Google 管理的加密"
done
for bucket in $(gsutil ls -p PROJECT_ID); do
gsutil uniformbucketlevelaccess get "$bucket"
done
步骤 5:运行 ScoutSuite 进行全面评估
执行 ScoutSuite 对 GCP 环境进行自动化多项安全检查。
python3 -m ScoutSuite gcp \
--user-account \
--all-projects \
--report-dir ./scoutsuite-gcp-report
python3 -m ScoutSuite gcp \
--service-account /path/to/service-account-key.json \
--all-projects \
--report-dir ./scoutsuite-gcp-report
open ./scoutsuite-gcp-report/gcp-report.html
步骤 6:查询 Security Command Center 发现
检索并分析 SCC 发现,包括漏洞、配置错误和威胁。
gcloud scc findings list ORG_ID \
--filter="state=\"ACTIVE\" AND severity=\"CRITICAL\"" \
--format="table(finding.category, finding.severity, finding.resourceName, finding.eventTime)"
gcloud scc findings list ORG_ID \
--filter="state=\"ACTIVE\" AND category=\"PUBLIC_BUCKET_ACL\"" \
--format=json
gcloud scc findings group ORG_ID \
--group-by="category" \
--filter="state=\"ACTIVE\""
gcloud scc findings list ORG_ID \
--filter="state=\"ACTIVE\" AND sourceProperties.compliance_standard=\"CIS\"" \
--format="table(finding.category, finding.severity, finding.resourceName)"
核心概念
| 术语 | 定义 |
|---|
| Security Command Center | GCP 原生安全和风险管理平台,提供资产清单、漏洞检测和威胁监控功能 |
| Forseti Security | 开源 GCP 安全工具集(现已弃用,由 SCC 取代),提供清单、扫描、执行和通知功能 |
| Cloud Asset Inventory | GCP 服务,提供包含元数据、IAM 策略和组织策略配置的完整云资源清单 |
| CIS GCP Foundations Benchmark | 互联网安全中心(Center for Internet Security)针对 Google Cloud Platform 配置发布的安全最佳实践指南 |
| 统一存储桶级访问(Uniform Bucket-Level Access) | GCP 存储设置,禁用旧版 ACL,通过 IAM 策略统一控制访问权限 |
| 组织策略(Organization Policy) | GCP 基于约束的治理机制,在整个组织层级中限制资源配置 |
工具与系统
- Security Command Center:GCP 原生 CSPM(云安全态势管理),提供资产清单、漏洞发现和合规评分
- ScoutSuite:多云安全审计工具,对 GCP IAM、计算、存储和网络进行全面检查
- gcloud CLI:查询 GCP 资源配置和安全设置的主要命令行界面
- Cloud Asset Inventory:跨 GCP 项目搜索和导出资源元数据与 IAM 策略的 API
- Forseti Security:旧版开源 GCP 安全工具集,已由 SCC 取代,但在合规框架中仍被引用
常见场景
场景:评估新收购的 GCP 组织
场景背景:公司收购后,安全团队需要评估被收购公司拥有 30+ 个项目的 GCP 组织的安全态势。
方法:
- 启用 Cloud Asset API,将完整资源清单导出到 BigQuery 进行分析
- 运行
gcloud asset search-all-iam-policies 查找所有 Owner/Editor 绑定和公开访问授权
- 审计所有项目中来自
0.0.0.0/0 的过度宽松入站防火墙规则
- 使用
gsutil iam get 检查所有存储桶的公开访问情况
- 运行 ScoutSuite 进行全面自动化评估并生成 HTML 报告
- 启用 SCC 并审查所有严重(CRITICAL)和高危(HIGH)发现
- 为整合团队生成按风险优先级排序的修复路线图
常见陷阱:GCP IAM 绑定从组织继承到文件夹再到项目。组织级别的宽松绑定会影响所有下游项目。务必在层级的每个级别审计 IAM,而不仅仅是项目级别。
输出格式
GCP 安全评估报告
=================================
组织: acme-acquired-org(ORG_ID: 123456789)
评估项目数: 34
评估日期: 2026-02-23
标准: CIS GCP Foundations 2.0
IAM 发现:
组织级别具有 Owner 角色的用户数: 3
具有 Editor 角色的服务账号数: 12
具有 allUsers 绑定的资源数: 5
超过 90 天的服务账号密钥数: 18
网络发现:
允许 0.0.0.0/0 的防火墙规则数: 14
向互联网开放 SSH 的规则数: 7
向互联网开放 RDP 的规则数: 2
未启用 VPC 流日志的子网数: 22
存储发现:
公开可访问的存储桶数: 5
未使用 CMEK 加密的存储桶数: 28
未启用统一访问的存储桶数: 15
严重发现: 12
高危发现: 34
中危发现: 78
低危发现: 145
优先修复事项:
1. 从 5 个存储桶移除 allUsers 绑定(严重)
2. 将 0.0.0.0/0 防火墙规则限制为特定 CIDR(高危)
3. 轮换 18 个超过 90 天的服务账号密钥(高危)
4. 在 22 个子网上启用 VPC 流日志(中危)