目標
このチュートリアルでは、次のことを学びます。
Compute Engine インスタンス テンプレートとマネージド インスタンス グループ(MIG)の作成。
ドメイン名と証明書の取得。
証明書を使用して、 HTTPS ロードバランサ を作成する。
IAP の有効化。
IAP の動作確認。
費用
このチュートリアルでは、課金対象となる以下の Google Cloudのコンポーネントを使用しています。
Compute Engine
- 4 つの仮想マシン(VM)
ネットワーキング
グローバル ロードバランサ転送ルール
上り(内向き)トラフィック
予想使用量に基づく費用の見積もりについては、こちらの料金計算ツールをご覧ください。
始める前に
このチュートリアルを始める前に、次のものが必要になります。
Google Cloud プロジェクトを選択または作成します。
[プロジェクト] ページに移動プロジェクトに対する課金を有効にします。プロジェクトの課金設定の変更方法をご覧ください。
ステップ 1: Compute Engine テンプレートを作成する
Google Cloud コンソールで、[Compute Engine] > [インスタンス テンプレートを作成] ページに移動し、テンプレートを作成するプロジェクトを選択します。
以下を除くデフォルト値を使用します。
マシンタイプ:
- micro(f1-micro)
アクセス スコープ:
各 API にアクセス権を設定
Compute Engine: 読み取り専用
ファイアウォール:
- HTTP トラフィックを許可する
[管理] セクションの [自動化] > [起動スクリプト] で、次のスクリプトをコピーして貼り付けます。
値の更新が終了したら、[作成] をクリックしてテンプレートを作成します。
ステップ 2: マネージド インスタンス グループを作成する
Google Cloud コンソールで、[Compute Engine] > [新しいインスタンス グループの作成] ページに移動し、マネージド インスタンス グループを作成するプロジェクトを選択します。
以下を除いてデフォルト値を使用します。
名前: my-managed-instance-group
場所: マルチゾーン
インスタンス テンプレート: ステップ 1 で作成したインスタンス テンプレートを選択します
インスタンス数: インスタンス数を変更するには、まず自動スケーリングをオフにする必要があります。
自動スケーリング モード: 自動スケーリングしない
ヘルスチェック: [ヘルスチェックの作成] を選択して、次の値を入力します。
名前: my-health-check
プロトコル: HTTP
[保存して次へ] をクリックして、新しいヘルスチェックを使用します。
値の更新が終了したら、[作成] をクリックして、マネージド インスタンス グループ(MIG)を作成します。
ステップ 3: ドメイン名と証明書を取得する
HTTPS トラフィックでロードバランサを使用するには、ドメイン名と署名付き証明書が必要です。Cloud Domains でドメインを登録するか、選択したドメイン登録事業者を使用することができます。続行する前に、ドメインを登録してください。
証明書の設定
ユーザーに対してウェブサイトを特定する証明書を作成します。証明書の作成方法については、Google マネージド SSL 証明書の使用をご覧ください。
CA は、登録したドメイン名を所有していることを確認する必要があります。次の手順では、CA でドメインを認証する VM を作成します。
ドメインの所有権が認証される VM を作成する
Google Cloud コンソールで、[Compute Engine] > [インスタンスの作成] ページに移動します。
以下を除いてデフォルト値を使用します。
名前: certbot-vm
マシンタイプ: micro(f1-micro)
アクセス スコープ:
各 API にアクセス権を設定
Compute Engine: 読み取り / 書き込み
ブートディスク イメージ:
- Debian GNU/Linux 9(stretch)
ファイアウォール:
HTTP トラフィックを許可する
HTTPS トラフィックを許可する
値の更新が完了したら、[作成] をクリックして VM インスタンスを作成します。作成した VM の外部 IP アドレスをメモします。次のステップで必要になります。
VM を参照するようにドメインを設定する
VM を参照するようにドメインを設定するには、次の手順に沿って A レコードを構成します。
ドメインホストでドメインのアカウントにログインします。
ドメインの DNS レコードを更新するページを探します。多くの場合、「DNS 管理」、「ネームサーバー管理」、「詳細設定」といったページ名です。
A レコードを以下の値に変更してください。
名前 / ホスト / エイリアス: @
値: 上記のドメインの所有権を認証するために作成した VM の外部 IP アドレス。
TTL: 登録事業者のデフォルト値、または 86400(1 日)。
DNS レコードが更新されるのを待ちます。追加したレコードが反映されるまで最大 1 日かかることがあります。
詳細は、A レコードについてをご覧ください。
サーバーをテストする
サーバーが正常に動作していることをテストするには、次の手順を実行します。
Google Cloud コンソールで、[Compute Engine] > [VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動[certbot-vm] の [接続] で、[SSH] をクリックします。
VM 上で小規模なウェブサーバーを実行するには、次のコマンドを実行します。
mkdir web cd web echo "Hello" > index.html sudo busybox httpd -v -fウェブブラウザで、以前に登録したドメイン名に移動します。ウェブブラウザに
Helloが表示され、SSH セッションで... response:200を含むメッセージが表示されます。表示されない場合、数分待ってからこの手順を繰り返します。テストに成功したら、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 セッションを閉じていることを確認してください。準備ができたら、次の手順に従ってロードバランサを作成します。
Google Cloud コンソールで、[ネットワーク サービス] > [ロードバランサの作成] ページに移動し、ロードバランサを作成するプロジェクトを選択します。
[ロードバランサの作成] ページに移動[HTTP(S) ロード バランシング]で、[構成を開始] をクリックします。
[ インターネットから VM へ。
表示された [新しい 外部アプリケーション ロードバランサ] ページで、ロードバランサの名前を入力します。
[バックエンドの構成] をクリックします。
[バックエンド サービスとバックエンド バケット] で、[バックエンド サービスを作成] を選択します。
バックエンド サービスの名前(
my-backend-serviceなど)を追加します。
[セキュリティ] セクションに移動し、[IAP を有効にしてアプリケーションへのアクセスを保護する] を選択します。
Cloud CDN と IAP には互換性がありません。Cloud CDN が有効になっている状態で IAP を有効にすると、Cloud CDN は自動的に無効になります。
[作成] をクリックします。[ロード バランシング] ページが読み込まれ、ロードバランサのリストに新しいロードバランサが表示されます。
Google Cloud コンソールで新しいロードバランサの作成が完了したら、ロードバランサの名前をクリックし、[詳細] > [フロントエンド] の外部 IP アドレスを書き留めます。次のステップでこれを使用します。
ロードバランサを参照するようにドメインを設定する
ロードバランサを参照するようにドメインを設定するには、次の手順に沿って A レコードを構成します。
ドメインホストでドメインのアカウントにログインします。
ドメインの DNS レコードを更新するページを探します。多くの場合、「DNS 管理」、「ネームサーバー管理」、「詳細設定」といったページ名です。
A レコードを以下の値に変更してください。
名前 / ホスト / エイリアス: @
値: 前に作成したロードバランサの外部 IP アドレス。DNS レコードにポート
:443を含めないでください。TTL: 登録事業者のデフォルト値、または 86400(1 日)。
DNS レコードが更新されるのを待ちます。追加したレコードが反映されるまで最大で 1 日かかることがあります。
ロードバランサをテストするには、ウェブブラウザを使用して
https://プロトコルでドメインにアクセスします。ロードバランサがまだ設定されていない場合は、「HTTP 502」エラーが表示されます。
ロードバランサの準備が整うと、「Unauthorized request.」と表示されます。
詳細は、A レコードについてをご覧ください。
VM を再起動する
IAP からのリクエストを正しく認証するには、MIG 内の VM を再起動する必要があります。
Google Cloud コンソールで、[Compute Engine] > [インスタンス グループ] ページに移動します。
[インスタンス グループ] ページに移動[my-managed-instance-group] をクリックします。
表示されるインスタンス グループの詳細の上部で、[ローリング再起動 / 置換] をクリックします。
[my-managed-instance-group のインスタンスを再起動 / 置換] ページで、次の値を設定します。
操作: 再起動
オフライン上限: 3 つのインスタンスのうち 3 つのインスタンス
最小待機時間: 0秒
値の更新が完了したら、[再起動] をクリックします。
ステップ 5: IAP を設定する
ファイアウォールを構成する
次に、基盤となる VM へのアクセスをブロックし、IAP 経由のアクセスのみを許可するように、ファイアウォールを構成します。
Google Cloud コンソールで、[VPC ネットワーク] > [ファイアウォール ルール] に移動します。
[ファイアウォール ルール] ページに移動次のルールの横にあるチェックボックスをオンにします。
default-allow-http
default-allow-https
default-allow-internal
[削除] をクリックします。
[ファイアウォール ルールを作成] をクリックし、次の値を設定します。
名前: allow-iap-traffic
ターゲット: ネットワーク内のすべてのインスタンス
ソース IP の範囲(フィールドに各値を貼り付けた後に Enter キーを押します)。ロードバランサがバックエンドと通信できるように、これらの IP アドレス範囲からのトラフィックを許可する必要があります。
130.211.0.0/22
35.191.0.0/16
プロトコルとポート:
指定したプロトコルとポート
tcp:80
値の更新が完了したら、[作成] をクリックします。
IAP を設定する
プロジェクトに IAP を設定する手順は次のとおりです。
Google Cloud コンソールで、[セキュリティ] > [Identity-Aware Proxy] ページに移動し、IAP を有効にするプロジェクトを選択します。
[Identity-Aware Proxy] ページに移動プロジェクトの OAuth 同意画面を構成していない場合、構成するように指示されます。
-
OAuth 同意画面に移動します。
同意画面を構成 - [サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。メールアドレスは、現在ログインしているユーザー アカウントに属しているか、現在ログインしているユーザーがマネージャーまたはオーナーである Google グループに属している必要があります。
- [アプリケーション名] に、アプリケーションの表示名を入力します。
- 任意の詳細を追加します。
- [保存] をクリックします。
プロダクト名やメールアドレスなど、OAuth 同意画面の情報を後で変更する場合は、上記の手順を繰り返して同意画面を構成します。
-
OAuth 同意画面に移動します。
my-backend-service の隣で、
表示された [IAP の有効化] ウィンドウで、[構成要件を読み、ドキュメントに沿って Compute Engine リソースを構成しました。] の横にあるチェックボックスをオンにします。
[オンにする] をクリックします。
アクセスリストにプリンシパルを追加する
次に、プロジェクトの IAP アクセスリストにプリンシパルを追加します。
[セキュリティ] > [Identity-Aware Proxy] の順に移動し、右側にある [アクセス権] セクションで [追加] をクリックします。
自分自身を含めて、アクセスを許可するプリンシパルを入力し、プリンシパルに IAP で保護されたウェブアプリ ユーザーのロールを割り当てます。プリンシパルの例を次に示します。
Google アカウント: user@gmail.com
Google グループ: admins@googlegroups.com
サービス アカウント: server@example.
Google Workspace ドメイン: example.com
ステップ 6: IAP をテストする
IAP が正常に動作していることをテストする手順は次のとおりです。
ウェブブラウザでドメインに移動します。「不正なリクエスト」と表示された場合は、数分後にもう一度お試しください。
Google ログイン画面が表示されたら、前の手順でアクセス権を付与した Google アカウントを使用してログインします。
「Hi, user@example.com. I am my-managed-instance-group-29z6.」のようなメッセージが表示されます。
ページを更新してください。ブラウザに、マネージド インスタンス グループの 3 台のマシンの名前が表示されるはずです。これは、グループの VM 間でトラフィックを分散するロードバランサです。
これで、IAP を使用して負荷分散サービスを有効にしました。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
Compute Engine の IAP の設定が完了したら、 Google Cloud で作成したリソースをクリーンアップして、今後料金が発生しないようにします。以下のセクションでは、このようなリソースを削除または無効にする方法を説明します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Google Cloud コンソールで [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
インスタンスの削除
Compute Engine インスタンスを削除するには:
- Google Cloud コンソールで、[VM インスタンス] ページに移動します。
- 削除するインスタンスのチェックボックスを選択します。
- インスタンスを削除するには、 [その他の操作] をクリックし、[削除] をクリックしてから、指示に沿って操作します。
デフォルトのネットワークのファイアウォール ルールの削除
ファイアウォール ルールを削除するには:
- Google Cloud コンソールで、[ファイアウォール] ページに移動します。
- 削除するファイアウォール ルールのチェックボックスをオンにします。
- ファイアウォール ルールを削除するには、[削除] をクリックします。
次のステップ
このチュートリアルで使用したサンプルアプリを変更して、他のデータに使用してみる。
ベスト プラクティスを読んで、独自のアプリを作成して IAP で保護する方法を確認する。