本项目并非 Google 官方项目。Google 不对其提供支持,且明确声明不对其质量、可销售性或特定用途的适用性承担任何保证责任。

这是一个 GCP 资源扫描器,可以帮助确定特定凭据在 GCP 上的访问级别。该扫描器旨在帮助安全工程师评估特定 VM/容器被入侵、GCP 服务帐户或 OAuth2 令牌密钥泄露的影响。
目前,该扫描器支持以下 GCP 资源:
该扫描器支持提取和使用以下类型的凭据:
该扫描器不依赖任何第三方工具(例如 gcloud)。因此,它可以编译为独立工具,并在未安装 GCP SDK 的机器上使用(例如 Kubernetes Pod)。但请注意,目前仅支持 Linux 操作系统。
请注意,GCP 提供了策略分析器来了解哪些主体(用户、服务帐户、群组和域)拥有哪些 Google Cloud 资源的何种访问权限。但这需要 GCP 项目具有特定权限,并且需要启用 Cloud Assets API。如果您只有 GCP SA 密钥、入侵过的 VM 的访问权限或 OAuth2 刷新令牌,gcp_scanner 是最佳选择。
要安装该包,请使用 pip(您还必须安装 git):
pip install gcp_scanner
python3 -m gcp_scanner --help
或者:
git clone https://github.com/google/gcp_scanner
cd gcp_scanner
pip install .
gcp-scanner --help
如果您想从容器运行扫描器,还有一个 Docker 构建文件:
docker build -f Dockerfile -t sa_scanner .
usage: python3 scanner.py -o folder_to_save_results -g -
GCP Scanner
options:
-h, --help show this help message and exit
-ls, --light-scan Return only the most important GCP resource fields in the output.
-k KEY_PATH, --sa-key-path KEY_PATH
Path to directory with SA keys in json format
-g GCLOUD_PROFILE_PATH, --gcloud-profile-path GCLOUD_PROFILE_PATH
Path to directory with gcloud profile. Specify - to search for credentials in default gcloud config path
-m, --use-metadata Extract credentials from GCE instance metadata
-at ACCESS_TOKEN_FILES, --access-token-files ACCESS_TOKEN_FILES
A list of comma separated files with access token and OAuth scopes.TTL limited. A token and scopes should be stored in JSON format.
-rt REFRESH_TOKEN_FILES, --refresh-token-files REFRESH_TOKEN_FILES
A list of comma separated files with refresh_token, client_id,token_uri and client_secret stored in JSON format.
-s KEY_NAME, --service-account KEY_NAME
Name of individual SA to scan
-p TARGET_PROJECT, --project TARGET_PROJECT
Name of individual project to scan
-f FORCE_PROJECTS, --force-projects FORCE_PROJECTS
Comma separated list of project names to include in the scan
-c CONFIG_PATH, --config CONFIG_PATH
A path to config file with a set of specific resources to scan.
-l {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --logging {DEBUG,INFO,WARNING,ERROR,CRITICAL}
Set logging level (INFO, WARNING, ERROR)
-lf LOG_FILE, --log-file LOG_FILE
Save logs to the path specified rather than displaying in console
-pwc PROJECT_WORKER_COUNT, --project-worker-count PROJECT_WORKER_COUNT
Set limit for project crawlers run in parallel.
-rwc RESOURCE_WORKER_COUNT, --resource-worker-count RESOURCE_WORKER_COUNT
Set limit for resource crawlers run in parallel.
Required parameters:
-o OUTPUT, --output-dir OUTPUT
Path to output directory
选项 -f 需要额外说明。在某些情况下,服务帐户没有显式列出项目名称的权限。但如果我们提供正确的项目名称,它可能仍能访问底层资源。此选项专门用于处理这种情况。
请将 pyproject.toml 中的 google-api-python-client==2.80.0 替换为 google-api-python-client==1.8.0。之后,导航到扫描器源代码目录,使用 pyinstaller 编译独立二进制文件:
pyinstaller -F --add-data 'roots.pem:grpc/_cython/_credentials/' scanner.py
GCP Scanner 会生成标准的 JSON 文件,可由任何 JSON 查看器或数据库处理。我们提供了一个基于 Web 的工具,可帮助您可视化结果。要运行该工具,请使用以下命令:
usage: gcp-scanner-visualizer -p 8080
GCP Scanner Visualizer
options:
-h, --help show this help message and exit
-p PORT, --port PORT Port to listen on default 8080
要了解如何使用该工具的更多信息,请访问 GCP Scanner 可视化工具使用指南 页面。
如果您只需一种便捷的方式来 grep JSON 结果,我们推荐使用 gron。
详见 CONTRIBUTING.md。
Apache 2.0;详见 LICENSE。