Compute Engine の IAP の設定

このガイドでは、Identity-Aware Proxy(IAP)を使用して Compute Engine インスタンスを設定する方法について説明します。Compute Engine インスタンスが設定済みで、IAP を有効にする必要がある場合は、Compute Engine での IAP の有効化をご覧ください。

目標

このチュートリアルでは、次のことについて学習します。

  • Compute Engine インスタンス テンプレートとマネージド インスタンス グループ(MIG)の作成。
  • ドメイン名と証明書の取得。
  • 証明書付きの HTTPS ロードバランサの作成。
  • IAP の有効化。
  • IAP の動作確認。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • Compute Engine
    • 4 台の仮想マシン(VM)
  • ネットワーキング
    • グローバル ロードバランサの転送ルール
    • 上りトラフィック

予想使用量に基づく料金の見積もりについては、この料金計算ツールをご覧ください。

新しい Cloud Platform ユーザーは無料トライアルをご利用いただけます。

始める前に

このチュートリアルを開始する前に、次のものが必要になります。

  1. Google Cloud プロジェクトを選択または作成します。
    プロジェクト ページに移動

  2. プロジェクトに対する課金を有効にします。プロジェクトの課金設定の変更方法をご覧ください。

ステップ 1: Compute Engine テンプレートを作成する

Cloud Console で [Compute Engine] > [インスタンス テンプレートを作成] ページに移動し、テンプレートを作成するプロジェクトを選択します。

[インスタンス テンプレートの作成] ページに移動

以下を除いてデフォルト値を使用します。

  • マシンタイプ
    • micro(f1-micro)
  • アクセス スコープ
    • 各 API にアクセス権を設定
    • Compute Engine: 読み取り専用
  • ファイアウォール
    • HTTP トラフィックを許可する
  • [管理] セクションの [自動化] > [起動スクリプト] で、次のスクリプトをコピーして貼り付けます。
    # Copyright 2021 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #      http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    apt-get -y update
    apt-get -y install git
    apt-get -y install virtualenv
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    cd python-docs-samples/iap
    virtualenv venv -p python3
    source venv/bin/activate
    pip install -r requirements.txt
    cat example_gce_backend.py |
      sed -e "s/YOUR_BACKEND_SERVICE_ID/$(gcloud compute backend-services describe my-backend-service --global --format="value(id)")/g" |
      sed -e "s/YOUR_PROJECT_ID/$(gcloud config get-value account | tr -cd "[0-9]")/g" > real_backend.py
    gunicorn real_backend:app -b 0.0.0.0:80
    

値の更新が終了したら、[作成] をクリックしてテンプレートを作成します。

ステップ 2: マネージド インスタンス グループを作成する

Cloud Console で [Compute Engine] > [新しいインスタンス グループの作成] ページに移動し、マネージド インスタンス グループを作成するプロジェクトを選択します。

[新しいインスタンス グループの作成] ページに移動

以下を除いてデフォルト値を使用します。

  • 名前: my-managed-instance-group
  • 場所: マルチゾーン
  • インスタンス テンプレート: ステップ 1 で作成したインスタンス テンプレートを選択します
  • インスタンス数: 3
  • ヘルスチェック: [ヘルスチェックの作成] を選択して、次の値を入力します。

    • 名前: my-health-check
    • プロトコル: HTTP

    [保存して次へ] をクリックして、新しいヘルスチェックを使用します。

値の更新が終了したら、[作成] をクリックして、マネージド インスタンス グループ(MIG)を作成します。

ステップ 3: ドメイン名と証明書を取得する

HTTPS トラフィックでロードバランサを使用するには、ドメイン名と署名済み証明書が必要です。Google Domains でドメインを登録するか、選択したドメイン登録事業者を使用することができます。このガイドを続行する前に、ドメインを登録してください。

証明書の設定

Let's Encrypt は無料で非営利の認証局(CA)です。この認証局のサービスを使用して、ユーザーに対してウェブサイトを特定する証明書を作成します。

CA は、登録したドメイン名を所有していることを確認する必要があります。以下の手順では、CA でドメインが認証される VM を作成します。

ドメインの所有権が認証される VM を作成する

Cloud Console で、[Compute Engine] > [インスタンスの作成] ページに移動します。

[インスタンスの作成] ページに移動

以下を除いてデフォルト値を使用します。

  • 名前: certbot-vm
  • マシンタイプ: micro(f1-micro)
  • アクセス スコープ
    • 各 API にアクセス権を設定
    • Compute Engine: 読み取り / 書き込み
  • ブートディスク イメージ:
    • Debian GNU/Linux 9(stretch)
  • ファイアウォール
    • HTTP トラフィックを許可する
    • HTTPS トラフィックを許可する

値の更新が完了したら、[作成] をクリックして VM インスタンスを作成します。作成した VM の外部 IP アドレスに注意してください。次のステップで必要になります。

VM を参照するようにドメインを設定する

VM を参照するようにドメインを設定するには、以下の手順に従って A レコードを設定します。

  1. ドメインホストでドメインのアカウントにログインします。
  2. ドメインの DNS レコードを更新するページを探します。多くの場合、「DNS 管理」、「ネームサーバー管理」、「詳細設定」といったページ名です。
  3. A レコードを次に示す値に変更します。
    • 名前 / ホスト / エイリアス: @
    • 値: 上記のドメイン所有権を認証するために作成した VM の外部 IP アドレス。
    • TTL: 登録事業者のデフォルト値、または 86400(1 日)。
  4. DNS レコードが更新されるのを待ちます。追加したレコードが反映されるまで最大 1 日かかることがあります。

詳細は、A レコードについてをご覧ください。

サーバーのテスト

サーバーが正常に動作していることをテストするには、次の手順を実行します。

  1. Cloud Console で、[Compute Engine] > [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動

  2. [certbot-vm] の [接続] で、[SSH] をクリックします。

  3. VM 上で小規模なウェブサーバーを実行するには、次のコマンドを実行します。

      mkdir web
      cd web
      echo "Hello" > index.html
      sudo busybox httpd -v -f
    
  4. ウェブブラウザで、以前に登録したドメイン名に移動します。ウェブブラウザに Hello が表示され、SSH セッションで ... response:200 を含むメッセージが表示されます。表示されない場合、数分待ってからこの手順を繰り返します。

  5. テストに成功したら、Ctrl+C を押してウェブサーバーを停止します。

証明書の作成

証明書を作成するには、VM で次のコマンドを実行し、Let's Encrypt に登録します。YOUR_DOMAIN はプロトコルを含まないドメイン名です。

sudo pkill busybox
sudo apt-get install -y certbot
sudo certbot certonly --standalone -d YOUR-DOMAIN

Let's Encrypt はこのプロセス中にメールアドレスを要求し、証明書が期限切れになったとき(デフォルトでは発行の 3 か月後)に通知を送信できるようにする場合があります。また、Let's Encrypt によって設定された利用規約に同意する必要があります。

正常に登録されると、「Congratulations! Your certificate and chain have been saved at...」というメッセージが表示されます。

プロジェクトに証明書を追加する

証明書をプロジェクトに追加するには、VM で次のコマンドを実行します。

sudo su
cd /etc/letsencrypt/live/YOUR_DOMAIN
gcloud compute ssl-certificates create my-cert --certificate=fullchain.pem --private-key=privkey.pem

証明書を作成すると、Created [https://www.googleapis.com/compute/v1/projects/example-project/global/sslCertificates/my-cert] に類似したメッセージが表示されます。

続行する前に、SSH セッションを閉じます。

ステップ 4: ロードバランサを作成する

この手順を開始する前に、前の手順で開始した SSH セッションを閉じていることを確認してください。準備ができたら、次の手順に従ってロードバランサを作成します。

  1. Cloud Console で、[ネットワーク サービス] > [ロードバランサの作成] ページに移動し、ロードバランサを作成するプロジェクトを選択します。
    [ロードバランサの作成] ページに移動

  2. [HTTP(S) 負荷分散] で [設定を開始] をクリックします。

  3. [インターネットから自分の VM へ] を選択します。

  4. 表示される [新しい外部 HTTP(S)ロードバランサ] ページで、ロードバランサの名前を入力します。

  5. [バックエンドの構成] をクリックし、[バックエンド サービス] > [バックエンド サービスを作成] を選択します。

  6. [バックエンド サービスを作成] パネルの [名前] ボックスに「my-backend-service」と入力します。

  7. [新しいバックエンド] で、以下を除いてデフォルト値を使用します。

    • インスタンス グループ: my-managed-instance-group
  8. [ヘルスチェック] で、[my-health-check] を選択します。

  9. 値の更新が完了したら、[作成] をクリックします。[新しい HTTP(S) ロードバランサ] パネルが再表示されます。

  10. [ホストとパスのルール] をクリックして、デフォルト値を読み込みます。ルールを追加する必要はありません。

  11. [フロントエンドの構成] をクリックします。次に示すものを除き、デフォルト値を使用します。

    • プロトコル: HTTPS
    • IP アドレス: [IP アドレスを作成] をクリックします。
      • 新しい静的 IP アドレスに関連付ける名前を入力します。
      • [予約] をクリックして、静的 IP アドレスを予約します。
    • 証明書: my-cert
  12. フロントエンドの構成値の入力が完了したら、[完了] をクリックします。[新しい外部 HTTP(S)ロードバランサ] パネルが再表示されます。

  13. [新しい外部 HTTP(S)ロードバランサ] で、[作成] をクリックします。[負荷分散] ページが表示され、ロードバランサのリストに新しいロードバランサが作成されます。

  14. Cloud Console で新しいロードバランサの作成が完了したら、ロードバランサの名前をクリックし、[詳細] > [フロントエンド] の外部 IP アドレスをメモします。次のステップでこれが必要になります。

ロードバランサを参照するようにドメインを設定する

ロードバランサを参照するようにドメインを設定するには、以下の手順に従って A レコードを設定します。

  1. ドメインホストでドメインのアカウントにログインします。
  2. ドメインの DNS レコードを更新するページを探します。多くの場合、「DNS 管理」、「ネームサーバー管理」、「詳細設定」といったページ名です。
  3. A レコードを次に示す値に変更します。
    • 名前 / ホスト / エイリアス: @
    • 値: 上記で作成したロードバランサの外部 IP アドレス。DNS レコードにポート :443 を含めないでください。
    • TTL: 登録事業者のデフォルト値、または 86400(1 日)。
  4. DNS レコードが更新されるのを待ちます。追加したレコードが反映されるまで最大で 1 日かかることがあります。
  5. ロードバランサをテストするには、ウェブブラウザで https:// プロトコルを使用してドメインに移動します。
    • ロードバランサがまだ設定されていない場合、「HTTP 502」エラーが表示されます。
    • ロードバランサの準備が整うと、「未承認のリクエスト」と表示されます。

詳細は、A レコードについてをご覧ください。

VM を再起動する

IAP からのリクエストを正しく認証するには、以下の手順に従って MIG 内の VM を再起動する必要があります。

  1. Cloud Console で、[Compute Engine] > [インスタンス グループ] ページに移動します。
    [インスタンス グループ] ページに移動
  2. [my-managed-instance-group] をクリックします。
  3. 表示されるインスタンス グループの詳細の上部で、[ローリング再起動 / 置換] をクリックします。
  4. 表示される [my-managed-instance-group のインスタンスの再起動 / 置換] ページで、次の値を設定します。
    • 操作: 再起動
    • オフライン上限: 3 つのインスタンスのうち 3 つのインスタンス
    • 最小待機時間: 0秒
  5. 値の更新が完了したら、[再起動] をクリックします。

ステップ 5: IAP を設定する

ファイアウォールを構成する

次に、基盤となる VM へのアクセスをブロックし、IAP 経由のアクセスのみを許可するように、ファイアウォールを構成します。

  1. Cloud Console で、[VPC ネットワーク] > [ファイアウォール ルール] の順に移動します。
    [ファイアウォール ルール] ページに移動
  2. 次のルールの横にあるチェックボックスをオンにします。
    • default-allow-http
    • default-allow-https
    • default-allow-internal
  3. [削除] をクリックします。
  4. [ファイアウォール ルールを作成] をクリックし、次の値を設定します。
    • 名前: allow-iap-traffic
    • ターゲット: ネットワーク内のすべてのインスタンス
    • ソース IP の範囲(ボックスに各値を貼り付けた後に Enter キーを押します):
      • 130.211.0.0/22
      • 35.191.0.0/16
    • プロトコルとポート:
      • 指定したプロトコルとポート
      • tcp:80
  5. 値の更新が完了したら、[作成] をクリックします。

IAP の設定

プロジェクトに IAP を設定する手順は次のとおりです。

  1. Cloud Console で、[セキュリティ] > [Identity-Aware Proxy] ページに移動し、IAP を有効にするプロジェクトを選択します。
    [Identity-Aware Proxy] ページに移動
  2. プロジェクトの OAuth 同意画面を構成していない場合、構成するように指示されます。

    1. OAuth 同意画面に移動します。
      同意画面を構成
    2. [サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。このメールアドレスは、自分のメールアドレスまたは自身が所有する Google グループにする必要があります。
    3. [アプリケーション名] に、アプリケーションの表示名を入力します。
    4. 任意の詳細を追加します。
    5. [保存] をクリックします。

    プロダクト名やメールアドレスなど、OAuth 同意画面の情報を後で変更する場合は、上記の手順を繰り返して同意画面を構成します。

  3. my-backend-service の隣で、

  4. 表示された [IAP の有効化] ウィンドウで、「構成要件を参照し、ドキュメントに従って Compute Engine リソースを構成しました。」の横にあるチェックボックスをオンにします。

  5. [有効にする] をクリックします。

アクセスリストにメンバーを追加する

次に、プロジェクトの IAP アクセスリストにメンバーを追加します。

  1. [IAM と管理] > [Identity-Aware Proxy] の順に移動し、右側にある [アクセス権] セクションで [追加] をクリックします。
  2. 自分自身を含めて、アクセスを許可するメンバーを入力します。メンバーにできるアカウントの種類は次のとおりです。
    • Google アカウント: user@gmail.com
    • Google グループ: admins@googlegroups.com
    • サービス アカウント: server@example.gserviceaccount.com
    • Google Workspace ドメイン: example.com

ステップ 6: IAP をテストする

IAP が正しく動作していることを確認する方法は次のとおりです。

  1. ウェブブラウザで、ドメインに移動します。
    1. [未承認のリクエスト] が表示された場合は、数分後にもう一度お試しください。
  2. Google ログイン画面が表示されたら、前の手順でアクセス権を付与した Google アカウントを使用してログインします。
  3. 「Hi, user@example.com. I am my-managed-instance-group-29z6.」のようなメッセージが表示されるはずです。
  4. ページを更新します。ブラウザに、マネージド インスタンス グループの 3 台のマシンの名前が表示されるはずです。これは、グループの VM 間でトラフィックを分散するロードバランサです。

これで、IAP を使用して負荷分散サービスを有効にしました。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

Compute Engine の IAP の設定が完了したら、Google Cloud で作成したリソースをクリーンアップして、今後料金が発生しないようにします。以下のセクションでは、このようなリソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

インスタンスの削除

Compute Engine インスタンスを削除するには:

  1. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 削除するインスタンスのチェックボックスを選択します。
  3. インスタンスを削除するには、 [その他の操作] をクリックし、[削除] をクリックしてから、指示に沿って操作します。

デフォルトのネットワークのファイアウォール ルールの削除

ファイアウォール ルールを削除するには:

  1. Cloud Console で、[ファイアウォール] ページに移動します。

    [ファイアウォール] に移動

  2. ルールの のチェックボックスを選択します。
  3. ファイアウォール ルールを削除するには、[削除] をクリックします。

次のステップ