GSP698

概要
CFT Scorecard は、Forseti Config Validator のオープンソース コマンドライン クライアントです。また、より広範な Cloud Foundation Toolkit の一部でもあります。Google Cloud のリソース、プロジェクト、フォルダ、あるいは組織における、構成ミスや確立された標準への違反を可視化します。
現在、86 以上もの Google Cloud のリソースタイプがあり、その数は増え続けています。パブリック クラウドへの移行により、クラウド運用やリソースのデプロイを多くの個人の連携のもとに行うことがさらに容易になりました。インフラストラクチャ、リソース、ポリシーのデプロイにおけるこうした連携とアジリティが求められる傾向に伴い、ポリシーと標準の統制維持が難しくなってきています。
このラボでは、CFT Scorecard を構成して Google Cloud プロジェクトの可視性を高め、構成ミスを検出する方法を学びます。
このラボですること
ここでは、クラウドに複数の同時利用者がいる際の課題についてお話しします。CFT Scorecardを有効にし、Cloud Asset Inventory とオープンソースの Policy Library とのインテグレーションにより、リソース構成のモニタリングと違反検出の機能を拡張します。構成ミスやリソースの不必要な公開を検出するためのツールを設定する一方で、チーム内の他のメンバー、最終的には Google Cloud プロジェクトが、確立されたポリシー内でアジャイルに活動できるようにします。
取り上げるトピック
- CFT Scorecard の設定
- CFT Scorecard の評価の実行
- 新しい CFT Scorecard ポリシーの追加

シナリオ
あなたは 3 人のチームのテクニカル リードだとします。リモートのチームメイトであるアリスとボブとは頻繁にやりとりしながら仕事を進めており、同じ Google Cloud プロジェクトを共有して、多くのリソースをそこにデプロイしています。一緒に働き始めて数週間後、あなたは異変に気がつきます。アリスとボブが手抜きをして、構成ミスとなるプロジェクト構成を導入していたのです。ある構成ミスにより、Cloud Storage バケットが一般に公開されてしまいました。見つけたのはたった 1 つの構成ミスでしたが、あなたは他にもたくさんあるかもしれないと考えています。
そこで 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 | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- Cloud Shell 情報ウィンドウで操作を進めます。
- Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。
接続した時点で認証が完了しており、プロジェクトに各自の 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 にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
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 に以下の 2 つの依存関係があることがわかりました。
- Cloud Asset Inventory
- Policy Library
- プロジェクトで 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
- 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
- Policy Library のクローンを作成します。
git clone https://github.com/forseti-security/policy-library.git
- Policy Library は、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 データ、そして policy-library フォルダです。
プロジェクトのリソースと IAM ポリシー情報を生成するには、CAI を使用する必要があります。
- 以下のコマンドを使用してデータを作成します。
# リソースデータのエクスポート
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/resource_inventory.json \
--content-type=resource \
--project=$GOOGLE_PROJECT
# IAM データのエクスポート
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/iam_inventory.json \
--content-type=iam-policy \
--project=$GOOGLE_PROJECT
# 組織のポリシーデータのエクスポート
gcloud asset export \
--output-path=gs://$CAI_BUCKET_NAME/org_policy_inventory.json \
--content-type=org-policy \
--project=$GOOGLE_PROJECT
# アクセス ポリシー データのエクスポート
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
# 実行可能にします
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
ロールを持つ人を完全に把握できるようにします。
# IAM オーナーロールを拒否リストに登録するための新しいポリシーを追加
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
も念のため確認します。
- 変数を 2 つ追加設定して、新しい制約を作成します。
export USER_ACCOUNT="$(gcloud config get-value core/account)"
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_PROJECT --format="get(projectNumber)")
- 以下の制約を作成して、すべての有効なアカウントを許可リストに登録します。
# IAM 編集者ロールを許可リストに登録するための新しいポリシーを追加
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
これで、組織に存在しない編集者が表示されるはずです。さあ、アリスとボブに話しましょうか。
お疲れさまでした
CFT Scorecard をダウンロードして設定し、Google Cloud プロジェクトの分析に使用する方法を学びました。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2024 年 4 月 12 日
ラボの最終テスト日: 2024 年 4 月 12 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。