arrow_back

使用 CFT Scorecard 保护 Google Cloud

登录 加入
访问 700 多个实验和课程

使用 CFT Scorecard 保护 Google Cloud

实验 40 分钟 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP698

Google Cloud 自学实验的徽标

概览

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 控制台

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:

    • “打开 Google Cloud 控制台”按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示“登录”页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在“实验详细信息”窗格中找到“用户名”。

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在“实验详细信息”窗格中找到“密码”。

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 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 自动补全功能。

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

任务 1. 设置环境

  1. 一开始,需要打开 Cloud Shell 并设置几个环境变量:
export GOOGLE_PROJECT=$DEVSHELL_PROJECT_ID export CAI_BUCKET_NAME=cai-$GOOGLE_PROJECT
  1. 查看文档后,可以知道 CFT Scorecard 有两个依赖项:
  • Cloud Asset Inventory
  • 政策库
  1. 继续进行,在项目中启用 Cloud Asset API:
gcloud services enable cloudasset.googleapis.com \ --project $GOOGLE_PROJECT
  1. 运行以下命令,创建默认的 Cloud Asset 服务账号:
gcloud beta services identity create --service=cloudasset.googleapis.com --project=$GOOGLE_PROJECT
  1. 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
  1. 克隆政策库:
git clone https://github.com/forseti-security/policy-library.git
  1. 您认识到,政策库会强制执行位于 policy-library/policies/constraints 文件夹中的政策,在这种情况下,您可以将示例政策从 samples 目录复制到 constraints 目录。
cp policy-library/samples/storage_denylist_public.yaml policy-library/policies/constraints/
  1. 创建一个存储桶,用于存储 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 政策信息。

  1. 使用以下命令创建数据:
# 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.
  1. 确保 CAI 已完成数据收集。查看上一个命令的输出,并使用上述命令输出中提供的 gcloud asset operations describe 验证这些操作已经完成。您可能需要一段时间才能查看进度。

点击检查我的进度,验证已完成以下目标: 已创建 CAI 文件

任务 3. 使用 CFT Scorecard 分析 CAI 数据

  1. 您需要下载 CFT Scorecard 应用并使其可执行:
curl -o cft https://storage.googleapis.com/cft-cli/latest/cft-linux-amd64 # make executable chmod +x cft
  1. 现在,您已完成所有配置,可以运行 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 添加更多限制条件

  1. 您忘了 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
  1. 重新运行 CFT Scorecard:
./cft scorecard --policy-path=policy-library/ --bucket=$CAI_BUCKET_NAME

好了,看起来一切正常,但我们也来看看 roles/editor

  1. 设置两个额外的变量,以便创建新的限制条件:
export USER_ACCOUNT="$(gcloud config get-value core/account)" export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_PROJECT --format="get(projectNumber)")
  1. 创建以下限制条件,将全部有效账号列入许可名单:
# 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
  1. 重新运行 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 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。