arrow_back

CFT Scorecard で Google Cloud の安全性を確保

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

CFT Scorecard で Google Cloud の安全性を確保

ラボ 40分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

GSP698

Google Cloud セルフペース ラボ

概要

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 コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。

    ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] パネルでも [ユーザー名] を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] パネルでも [パスワード] を確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスのリストを含むメニューを表示するには、左上のナビゲーション メニューをクリックします。ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: 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 に以下の 2 つの依存関係があることがわかりました。
  • Cloud Asset Inventory
  • Policy Library
  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. 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. Policy Library のクローンを作成します。
git clone https://github.com/forseti-security/policy-library.git
  1. Policy Library は、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 データ、そして policy-library フォルダです。

プロジェクトのリソースと IAM ポリシー情報を生成するには、CAI を使用する必要があります。

  1. 以下のコマンドを使用してデータを作成します。
# リソースデータのエクスポート 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.
  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 # 実行可能にします 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 ロールを持つ人を完全に把握できるようにします。
# 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
  1. CFT Scorecard を再実行します。
./cft scorecard --policy-path=policy-library/ --bucket=$CAI_BUCKET_NAME

見たところ問題なさそうですが、roles/editor も念のため確認します。

  1. 変数を 2 つ追加設定して、新しい制約を作成します。
export USER_ACCOUNT="$(gcloud config get-value core/account)" export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_PROJECT --format="get(projectNumber)")
  1. 以下の制約を作成して、すべての有効なアカウントを許可リストに登録します。
# 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
  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

これで、組織に存在しない編集者が表示されるはずです。さあ、アリスとボブに話しましょうか。

お疲れさまでした

CFT Scorecard をダウンロード、設定し、Google Cloud プロジェクトの分析に使用する方法を学びました。

クエストを完了する

このセルフペース ラボは、「Security & Identity Fundamentals」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、完了すると成果が認められてバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、こちらのクエストまたはこのラボが含まれるクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。

次のラボを受講する

VPC ネットワーク ピアリング」に進んでクエストを続けるか、その他の Google Cloud Skills Boost ラボをご確認ください。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2023 年 11 月 29 日

ラボの最終テスト日: 2023 年 11 月 29 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします