Modify the constraint

進行状況を確認

/ 100

このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。

GSP1021

Google Cloud セルフペース ラボ

概要

このラボでは、gcloud beta terraform vet コマンドについて学びます。ラボの残りの部分では、このコマンドを「Validate」と呼びます。Validate は、インフラストラクチャ CI / CD パイプラインの一部としてポリシーの遵守を徹底させるためのツールです。ポリシー違反を検出すると、Validate は警告を出します。また、本番環境に移行する前にデプロイを停止することもできます。

このラボでは、ドメイン制限を強制する制約の適用方法について説明します。最初に、この制約をテストして、意図的にエラーを発生させます。次に、ドメインが合格するようにこの制約を変更します。

目標

このラボでは、次の作業を行います。

  • ドメイン制限を強制する制約を適用する
  • 制約をテストして、意図的に検証エラーを発生させる
  • 制約を変更して検証に合格させる

前提条件

このラボでは、受講者が Terraform の使用経験があることを前提としています。Terraform に関するその他のハンズオン プラクティスについては、「Google Cloud における Terraform を使用したインフラストラクチャの構築」コースをご覧ください。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、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 をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • 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 にプリインストールされており、タブ補完がサポートされています。

  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 ウィンドウを開き、次のコマンドを実行してポリシー ライブラリ リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/policy-library.git
  1. コマンド プロンプトで、次のコマンドを入力してサンプルの IAM ドメイン制限の制約をコピーします。
cd policy-library/ cp samples/iam_service_accounts_only.yaml policies/constraints
  1. コピーした制約をターミナルに出力して確認します。
cat policies/constraints/iam_service_accounts_only.yaml

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

# This constraint checks that all IAM policy members are in the # "gserviceaccount.com" domain. apiVersion: constraints.gatekeeper.sh/v1alpha1 kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2 metadata: name: service_accounts_only annotations: description: Checks that members that have been granted IAM roles belong to allowlisted domains. spec: severity: high match: target: # {"$ref":"#/definitions/io.k8s.cli.setters.target"} - "organizations/**" parameters: domains: - gserviceaccount.com

下部の強調表示されたセクションに注目してください。これにより、IAM ポリシーに gserviceaccount.com ドメインのメンバーのみが存在できることが指定されます。

制約をテストする

  1. ポリシーが想定どおりに機能することを確認するために、現在のディレクトリに Terraform ファイルを作成します。
touch main.tf
  1. Cloud Shell ツールバーで [エディタを開く] をクリックします。Cloud Shell とコードエディタを切り替えるには、必要に応じて [エディタを開く] または [ターミナルを開く] をクリックするか、[新しいウィンドウで開く] をクリックして別のタブでエディタを開いたままにします。

  2. policy-library/main.tf ファイルを開き、次のコードをコピーして貼り付けます。

terraform { required_providers { google = { source = "hashicorp/google" version = "~> 3.84" } } } resource "google_project_iam_binding" "sample_iam_binding" { project = "<YOUR PROJECT ID>" role = "roles/viewer" members = [ "user:<USER>" ] }
  1. <YOUR PROJECT ID> に置き換えます。

  2. <USER> に置き換えます。

  3. 次に、ターミナルに戻り、次のコマンドを実行して Terraform を初期化します。

terraform init
  1. 次のコマンドを実行して、Terraform プランをエクスポートします。承認するよう求められた場合は、プロンプトが表示されたときに [Authorize] をクリックします。
terraform plan -out=test.tfplan
  1. Terraform プランを JSON に変換します。
terraform show -json ./test.tfplan > ./tfplan.json
  1. Terraform Tools コンポーネントをインストールします。
sudo apt-get install google-cloud-sdk-terraform-tools
  1. 次のコマンドを実行して、Terraform プランがポリシーに準拠していることを確認します。
gcloud beta terraform vet tfplan.json --policy-library=. 注: プロジェクト ID の取得に関する警告は無視してかまいません。

IAM ポリシー バインディングで指定したメールアドレスはサービス アカウントに属していないため、プランは設定した制約に違反しています。出力は次のようになります。

constraint: GCPIAMAllowedPolicyMemberDomainsConstraintV2.service_accounts_only constraint_config: api_version: constraints.gatekeeper.sh/v1alpha1 kind: GCPIAMAllowedPolicyMemberDomainsConstraintV2 metadata: annotations: description: Checks that members that have been granted IAM roles belong to allowlisted domains. validation.gcp.forsetisecurity.org/originalName: service_accounts_only validation.gcp.forsetisecurity.org/yamlpath: policies/constraints/iam_service_accounts_only.yaml name: service-accounts-only spec: match: target: - organizations/** parameters: domains: - gserviceaccount.com severity: high message: 'IAM policy for //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d contains member from unexpected domain: user:student-02-0edcb8aed69f@qwiklabs.net' metadata: ancestry_path: organizations/616463121992/folders/365352270458/folders/474147567761/folders/125430737939/projects/qwiklabs-gcp-02-ec89de7c9f9d constraint: annotations: description: Checks that members that have been granted IAM roles belong to allowlisted domains. validation.gcp.forsetisecurity.org/originalName: service_accounts_only validation.gcp.forsetisecurity.org/yamlpath: policies/constraints/iam_service_accounts_only.yaml labels: {} parameters: domains: - gserviceaccount.com details: member: user:student-02-0edcb8aed69f@qwiklabs.net resource: //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d resource: //cloudresourcemanager.googleapis.com/projects/qwiklabs-gcp-02-ec89de7c9f9d severity: high トラブルシューティング: 「Error 403: The caller does not have permission, forbidden」というエラーが表示された場合は、policy-library/main.tfproject_id 引数が置き換えられていないか、指定したプロジェクトに対する必要な権限がありません。

タスク 2. 制約を変更する

この制約は意図したとおりに機能していますが、ドメイン内の他のメールアドレスも許可できるように変更する場合を考えてみます。

  1. エディタから、policy-library/policies/constraints/iam_service_accounts_only.yaml ファイルに移動します。

  2. [domains] セクションで、qwiklabs.net メールドメインをドメイン許可リストに追加します。

apiVersion: constraints.gatekeeper.sh/v1alpha1 kind: GCPIAMAllowedPolicyMemberDomainsConstraintV1 metadata: name: service_accounts_only spec: severity: high match: target: ["organizations/**"] parameters: domains: - gserviceaccount.com - qwiklabs.net
  1. Cloud Shell ウィンドウに戻り、新しい JSON Terraform プランをエクスポートします。
terraform plan -out=test.tfplan
  1. Terraform プランを再度検証しても、違反は見つからないはずです。
gcloud beta terraform vet tfplan.json --policy-library=.

出力:

Validating resources...done.
  1. 最後に、IAM ポリシーの Terraform プランを適用して、メンバーにロールを付与します。
terraform apply test.tfplan

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 制約を変更する

お疲れさまでした

このラボでは、ドメイン制限を強制する制約を適用しました。この制約をテストしたところ、エラーが発生しました。次に、定義したドメインが検証に合格するように制約を変更しました。

次のステップと詳細情報

Validator や Terraform への理解をさらに深めるために、以下のリソースもご覧ください。

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

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

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

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

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

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

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

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

ありがとうございます。

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

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。