GSP698

概览
CFT Scorecard 是 Forseti Config Validator 的开源命令行客户端,也是更广泛的 Cloud Foundation Toolkit 的一部分。它可让您了解 Google Cloud 资源、项目、文件夹乃至组织中存在的错误配置和违反既定标准的情况。
Google Cloud 资源类型超过 86 种,而且还在不断增加。随着向公有云的迁移,将云运营和资源部署工作分配给众多人员协同进行,比以往任何时候都更加容易。但随着基础设施、资源和政策部署方面的联合化和敏捷性不断提升,保持政策和标准规范有序的难度也随之提高。
在本实验中,您将配置 CFT Scorecard,以便更好地了解 Google Cloud 项目并检测错误配置。
在本实验中,您将执行哪些操作?
本实验重点展示了有多个用户同时使用云环境时会遇到的挑战。您将启用 CFT Scorecard,并通过与 Cloud Asset Inventory 和开源政策库的集成来扩展其资源配置监控和违规检测功能。您将设置用于检测错误配置和过度公开资源的工具,同时仍允许团队中的其他个人以及最终的 Google Cloud 项目在既定政策范围内保持敏捷性。
涵盖的主题
- 设置 CFT Scorecard。
- 运行 CFT Scorecard 评估。
- 添加新的 CFT Scorecard 政策。

场景
假设您是 3 人团队的技术主管。您的远程团队成员 Alice 和 Bob 与您密切合作,他们和您一样,都在向同一个共享 Google Cloud 项目部署众多资源。共事几周后,您开始注意到一些危险信号。您很快发现,为了省事,Alice 和 Bob 都走了捷径,引入了您认为是错误的项目配置。其中一个错误配置导致有一个 Cloud Storage 存储桶被公开。这只是您发现的一个错误配置,但您担心可能还有更多。
在执行快速的 Google 搜索后,您找到了 Cloud Foundation Toolkit (CFT) Scorecard CLI 实用程序。您大致浏览了一下,认为它可以帮助您在 Google Cloud 环境中管理政策,并确定哪里有错误配置。您决定试一试。
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 Cloud Shell 信息窗口中的设置。
- 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。
如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud
的完整文档,请参阅 gcloud CLI 概览指南。
任务 1. 设置环境
- 一开始,需要打开 Cloud Shell 并设置几个环境变量:
export GOOGLE_PROJECT=$DEVSHELL_PROJECT_ID
export CAI_BUCKET_NAME=cai-$GOOGLE_PROJECT
- 查看文档后,可以知道 CFT Scorecard 有两个依赖项:
- Cloud Asset Inventory
- 政策库
- 继续进行,在项目中启用 Cloud Asset API:
gcloud services enable cloudasset.googleapis.com \
--project $GOOGLE_PROJECT
- 运行以下命令,创建默认的 Cloud Asset 服务账号:
gcloud beta services identity create --service=cloudasset.googleapis.com --project=$GOOGLE_PROJECT
- 将 Storage Admin 角色授予 Cloud Asset 服务账号:
gcloud projects add-iam-policy-binding ${GOOGLE_PROJECT} \
--member=serviceAccount:service-$(gcloud projects list --filter="$GOOGLE_PROJECT" --format="value(PROJECT_NUMBER)")@gcp-sa-cloudasset.iam.gserviceaccount.com \
--role=roles/storage.admin
- 克隆政策库:
git clone https://github.com/forseti-security/policy-library.git
- 您认识到,政策库会强制执行位于 policy-library/policies/constraints 文件夹中的政策,在这种情况下,您可以将示例政策从 samples 目录复制到 constraints 目录。
cp policy-library/samples/storage_denylist_public.yaml policy-library/policies/constraints/
- 创建一个存储桶,用于存储 Cloud Asset Inventory (CAI) 将要导出的数据:
gsutil mb -l {{{project_0.default_region | REGION}}} -p $GOOGLE_PROJECT gs://$CAI_BUCKET_NAME
点击检查我的进度,验证已完成以下目标:
创建 CAI 存储桶
任务 2. 使用 Cloud Asset Inventory (CAI) 收集数据
现在,您已经设置了环境,可以开始为 CFT Scorecard 收集数据了。
如前所述,CFT Scorecard 的输入是资源和 IAM 数据,以及政策库文件夹。
您需要使用 CAI 为项目生成资源和 IAM 政策信息。
- 使用以下命令创建数据:
# Export resource data
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/resource_inventory.json \
--content-type=resource \
--project=$GOOGLE_PROJECT
# Export IAM data
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/iam_inventory.json \
--content-type=iam-policy \
--project=$GOOGLE_PROJECT
# Export org policy data
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/org_policy_inventory.json \
--content-type=org-policy \
--project=$GOOGLE_PROJECT
# Export access policy data
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/access_policy_inventory.json \
--content-type=access-policy \
--project=$GOOGLE_PROJECT
输出示例:
Export in progress for root asset [projects/qwiklabs-gcp-01-68169ed6dd00].
Use [gcloud asset operations describe projects/97186664469/operations/ExportAssets/RESOURCE/2295255602305764396] to check the status of the operation.
Export in progress for root asset [projects/qwiklabs-gcp-01-68169ed6dd00].
Use [gcloud asset operations describe projects/97186664469/operations/ExportAssets/IAM_POLICY/11771734913762837428] to check the status of the operation.
- 确保 CAI 已完成数据收集。查看上一个命令的输出,并使用上述命令输出中提供的
gcloud asset operations describe
验证这些操作已经完成。您可能需要一段时间才能查看进度。
点击检查我的进度,验证已完成以下目标:
已创建 CAI 文件
任务 3. 使用 CFT Scorecard 分析 CAI 数据
- 您需要下载 CFT Scorecard 应用并使其可执行:
curl -o cft https://storage.googleapis.com/cft-cli/latest/cft-linux-amd64
# make executable
chmod +x cft
- 现在,您已完成所有配置,可以运行 CFT Scorecard 应用了:
./cft scorecard --policy-path=policy-library/ --bucket=$CAI_BUCKET_NAME
输出示例:
Generating CFT scorecard
1 total issues found
Operational Efficiency: 0 issues found
----------
Security: 1 issues found
----------
denylist_public_users: 1 issues
- //storage.googleapis.com/fun-bucket-qwiklabs-gcp-00-2d8ed2a5cc0e is publicly accessable
Reliability: 0 issues found
----------
Other: 0 issues found
----------
这是您之前确定的公共存储桶。
任务 4. 为 CFT Scorecard 添加更多限制条件
- 您忘了 IAM!添加以下限制条件,以确保您完全了解除了列入许可名单的用户之外,还有哪些人拥有
roles/owner
角色:
# Add a new policy to blacklist the IAM Owner Role
cat > policy-library/policies/constraints/iam_allowlist_owner.yaml << EOF
apiVersion: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedBindingsConstraintV3
metadata:
name: allowlist_owner
annotations:
description: List any users granted Owner
spec:
severity: high
match:
target: ["organizations/**"]
exclude: []
parameters:
mode: allowlist
assetType: cloudresourcemanager.googleapis.com/Project
role: roles/owner
members:
- "serviceAccount:admiral@qwiklabs-services-prod.iam.gserviceaccount.com"
EOF
- 重新运行 CFT Scorecard:
./cft scorecard --policy-path=policy-library/ --bucket=$CAI_BUCKET_NAME
好了,看起来一切正常,但我们也来看看 roles/editor
。
- 设置两个额外的变量,以便创建新的限制条件:
export USER_ACCOUNT="$(gcloud config get-value core/account)"
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_PROJECT --format="get(projectNumber)")
- 创建以下限制条件,将全部有效账号列入许可名单:
# Add a new policy to allowlist the IAM Editor Role
cat > policy-library/policies/constraints/iam_identify_outside_editors.yaml << EOF
apiVersion: constraints.gatekeeper.sh/v1alpha1
kind: GCPIAMAllowedBindingsConstraintV3
metadata:
name: identify_outside_editors
annotations:
description: list any users outside the organization granted Editor
spec:
severity: high
match:
target: ["organizations/**"]
exclude: []
parameters:
mode: allowlist
assetType: cloudresourcemanager.googleapis.com/Project
role: roles/editor
members:
- "user:$USER_ACCOUNT"
- "serviceAccount:**$PROJECT_NUMBER**gserviceaccount.com"
- "serviceAccount:$GOOGLE_PROJECT**gserviceaccount.com"
EOF
- 重新运行 CFT Scorecard:
./cft scorecard --policy-path=policy-library/ --bucket=$CAI_BUCKET_NAME
输出示例:
Generating CFT scorecard
3 total issues found
Reliability: 0 issues found
----------
Other: 2 issues found
----------
identify_outside_editors: 1 issues
- IAM policy for //cloudresourcemanager.googleapis.com/projects/1044418630080 grants roles/editor to user:qwiklabs.lab.user@gmail.com
Operational Efficiency: 0 issues found
----------
Security: 1 issues found
----------
denylist_public_users: 1 issues
- //storage.googleapis.com/fun-bucket-qwiklabs-gcp-00-2d8ed2a5cc0e is publicly accessable
现在,您应该会看到一位不在您组织中的 Editor。是时候与 Alice 和 Bob 沟通了。
恭喜!
您已了解如何下载、设置和使用 CFT Scorecard 来分析 Google Cloud 项目。
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2024 年 4 月 12 日
本实验的最后测试时间:2024 年 4 月 12 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。