クラウド同上

GCPで無料HTTPS化{Compute Engine編}

Author
yastani
Lv:3 Exp:3491

3大パブリッククラウドを彷徨うSREエンジニア。
モットーは「ボタンを押せば構築完了」

こんにちは。
マスターレベルは146、トレーナーレベルは35のyastaniです。

2018年10月頃、AWSでいうところの Certificate Manager と同様の機能を持つGoogle-managed SSL certificateGoogle Cloud Load Balancing に対応するBETA版としてリリースされました!

Google-managed SSL certificate(以降、マネージドSSL) を利用する一番のメリットとして、ロードバランサーに設定したSSL証明書の更新期限を気にする必要がなくなります。

注意点としては、使用されるSSL証明書の発行元が「Let’s Encrypt」ですので企業ポリシーによっては採用が難しい可能性もあることをお伝えしておきます。

BETA版自体は2019年の後半まで続くとGoogle Documentに記載がありますので、まずは開発環境などでお手軽に試されるのもよいのではないでしょうか。
また、本稿の後半には 忙しい方向けコマンドラインまとめ を掲載していますのでそちらもご覧ください。

それでは早速設定手順をご紹介したいと思います!

1. はじめに

本稿の手順が正しいことを最終的に確認するには 「お名前.com」や「Google Domains」などのドメインレジストラで、管理している独自ドメインのレコードを編集できることが必須 となります。
企業や個人で編集できる独自ドメインを保有していない方は、「freenom」という無料でドメイン取得できる外部サービスをご利用ください。
また、「freenom」に関しては本稿執筆時点では触れませんので、インターネットで検索してみてください。


2. GCPコンソールから各リソースを作成する手順

VPCネットワーク・サブネットの作成

  • 左上のナビゲーションメニューから「VPCネットワーク」を開く
  • VPCネットワークを作成」ボタンを押下する

「VPCネットワークを作成」ボタンを押下する

  • VPCネットワーク名」を入力する(例:managedssl-vpc)
  • サブネット名」を入力する(例:tokyo-subnet )
  • リージョンを「asia-northeast1」で選択する
  • IPアドレス範囲」を入力する(例:192.168.0.0/24)

  • その他の設定は変更せず「作成」ボタンを押下する

インスタンステンプレートの作成

  • 左上のナビゲーションメニューから「Compute Engine」→「インスタンステンプレート」を開く
  • インスタンステンプレートを作成」ボタンを押下する

インスタンステンプレートを作成

  • インスタンステンプレート名」を入力する(例:managedssl-default-osimage-debian9)
  • ファイアウォール」欄で「HTTPトラフィックを許可する」をチェックする

インスタンステンプレートの設定

  • 管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」を押下する
  • 自動化」欄にある「起動スクリプト」に下記bashコマンドをコピペする
#! /bin/bash
#Installs apache and a custom homepage
sudo su -
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello World</h1>
<p>This page was created from a simple start up script!</p>
</body></html>

スタートアップスクリプトの設定

  • ネットワーキング」タブを押下する
  • ファイアウォール」欄で「HTTPトラフィックを許可する」をチェックする
  • ネットワーク」欄で先ほど作成したVPCネットワークを選択する
  • サブネット」欄で先ほど作成したサブネットを選択する

ファイアウォールおよびネットワークの設定

  • 作成」ボタンを押下する

マネージドインスタンスグループの作成

  • 左上のナビゲーションメニューから「Compute Engine」→「インスタンスグループ」を開く
  • インスタンスグループを作成」ボタンを押下する

インスタンスグループを作成

  • インスタンスグループ名」を入力する(例:managedssl-mig)
  • ロケーション」欄で「複数のゾーン」を選択する
  • リージョン」欄で「asia-northeast1」を選択する
  • インスタンステンプレート」欄で先ほど作成したインスタンステンプレートを選択する
  • インスタンスの最小数」欄で「2」を選択する

インスタンスグループの設定

  • 作成」ボタンを押下する

ロードバランサー(URL map)の作成

  • 左上のナビゲーションメニューから「ネットワークサービス」→「負荷分散」を開く
  • ロードバランサを作成」ボタンを押下する

ロードバランサーを作成

  • HTTP(S)負荷分散」欄の「設定を開始」ボタンを押下する
  • ロードバランサー名」を入力する(例:managedssl-global-lb)
  • バックエンドの設定」を押下する
  • バックエンドサービスとバックエンドバケット」欄で「バックエンドサービス」→「バックエンドサービスを作成」を押下する

バックエンドサービスを作成

  • バックエンドサービス名」を入力する(例:managedssl-bes)
  • 新しいバックエンド」の項目にある「インスタンスグループ」欄に先ほど作成したインスタンスグループを選択する
  • ヘルスチェック」欄で「ヘルスチェックを作成」を押下する
  • ヘルスチェック名」を入力する(例:managedssl-http-healthcheck)
  • 保存して次へ」ボタンを押下する

バックエンドサービスの設定

  • 作成」ボタンを押下する
  • フロントエンドの設定」を押下する
  • フロントエンド名」を入力する(例:managedssl-https-proxy)
  • プロトコル」欄で「HTTPS(HTTP/2を含む)」を選択する
  • 証明書」欄で「新しい証明書の作成」を押下する
  • 証明書名」を入力する(例:managedssl-sslcert)
  • 作成モード」欄で「Google管理の証明書を作成する」を選択する
  • ドメイン欄」で自身が管理しているドメインを入力する(例:managedssl-example.tk)

マネージドSSL証明書の設定

  • 作成」ボタンを押下する

ロードバランサーの設定

  • 完了」ボタンを押下する
  • 作成」ボタンを押下する

ロードバランサーのIPv4アドレスを取得

  • 注記
    • ロードバランサーの作成には5分ほどかかるのでグリーンのチェックマークが表示されるまでお待ちください

  • 左上のナビゲーションメニューから「ネットワークサービス」→「負荷分散」を開く
  • 先ほど作成したロードバランサーの下部にある「詳細設定メニュー」リンクを押下する

ロードバランサーのステータス

  • 転送ルール」タブを表示すると先ほど作成したフロントエンドの転送ルールにIPv4アドレスが表示されていることを確認する

転送ルールの確認

管理しているドメインレジストラやDNSサービスにDNSレコードをセット

  • 注記
    • 下記はCloud DNSでの設定方法です

  • 左上のナビゲーションメニューから「ネットワークサービス」→「Cloud DNS」を開く
  • ゾーンを作成」ボタンを押下する

DNSゾーンを作成

  • ゾーン名」を入力する(例:managedssl-example-tk)
  • DNS名」を入力する(例:managedssl-example.tk)
  • 作成」ボタンを押下する

DNSゾーンの設定

  • 作成したゾーンに自動で割り当てられたネームサーバーをドメインレジストラに登録する(例:freenomのネームサーバー設定画面)

freenomのネームサーバー設定
ネームサーバーの確認

  • レコードセットを追加」ボタンを押下する
  • IPv4アドレス」欄に ロードバランサーのIPv4アドレスを取得 にて取得したIPv4アドレスをAレコードにセットする

Aレコードの設定

  • 作成」ボタンを押下する
  • 5分ほど待ってブラウザからHTTPS接続する

SSL証明書の確認


3. まとめ

おつかれさまでした。
今回はユーザーが管理する必要の無いSSL証明書をHTTP(S)ロードバランサーに紐づけて、ドメインでアクセスすることを中心にご説明しました。

ですので、今回の手順では「ロードバランサーへHTTPでアクセスするにはどうすればいいのか」や「GKEで同じことができるのか」といった疑問にはあえて触れない内容になっています。

冒頭でご紹介した「freenom」や「GKEで同じことができるのか」といった内容はまた改めて投稿しますので引き続き弊ブログを注視いただければ幸いです。


4. 忙しい方向けコマンドラインまとめ(構築編)

  • 注記
    • コマンドを実行後、GCPConsole上で対象のリソースが作成されたことを確認してから次のコマンドを実行すると次のコマンドが失敗しづらくなります
    • また、コマンドの実行環境はCloud Shellがおすすめです。詳しくはCloud Shell の起動をご覧ください。

VPCネットワーク・サブネットの作成

$ gcloud compute networks create managedssl-vpc \
    --subnet-mode=custom
$ gcloud compute networks subnets create tokyo-subnet \
    --network=managedssl-vpc \
    --range=192.168.0.0/24 \
    --region=asia-northeast1

インスタンステンプレートの作成

$ gcloud compute instance-templates create managedssl-default-osimage-debian9 \
    --network=managedssl-vpc \
    --region=asia-northeast1 \
    --subnet tokyo-subnet \
    --image-project=debian-9 \
    --tags=http-server \
    --metadata startup-script='#! /bin/bash
# Installs apache and a custom homepage
sudo su -
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello World</h1>
<p>This page was created from a simple start up script!</p>
</body></html>'

マネージドインスタンスグループの作成

$ gcloud compute instance-groups managed create managedssl-mig \
    --region=asia-northeast1 \
    --template=managedssl-default-osimage-debian9 \
    --size=2

マネージドSSL証明書の作成

–domains= はあなたが所持しているドメイン名に置き換えてください

$ gcloud beta compute ssl-certificates create managedssl-sslcert \
    --domains=managedssl-example.tk

バックエンドサービス・ヘルスチェックの作成

$ gcloud compute http-health-checks create managedssl-http-healthcheck
$ gcloud compute backend-services create managedssl-bes \
    --protocol=HTTP \
    --http-health-checks=managedssl-http-healthcheck \
    --global

バックエンドサービスにマネージドSSL証明書を適用

$ gcloud compute backend-services add-backend managedssl-bes \
    --instance-group=managedssl-mig \
    --global \
    --instance-group-region=asia-northeast1

ロードバランサー(URL map)の作成

$ gcloud compute url-maps create managedssl-global-lb \
    --default-service=managedssl-bes

HTTPSプロキシ・転送ルールの作成

$ gcloud compute target-https-proxies create managedssl-https-proxy \
    --ssl-certificates=managedssl-sslcert \
    --url-map=managedssl-global-lb

$ gcloud compute forwarding-rules create managedssl-fw-rules \
    --target-https-proxy=managedssl-https-proxy \
    --ports=443 \
    --global

ロードバランサーのIPv4アドレスを取得

$ gcloud compute forwarding-rules describe managedssl-fw-rules \
    --global | grep "IPAddress"

IPAddress: 34.95.94.230

5. 忙しい方向けコマンドラインまとめ(削除編)

  • 注記
    • コマンドを実行後、GCPConsole上で対象のリソースが削除されたことを確認してから次のコマンドを実行すると次のコマンドが失敗しづらくなります
    • また、コマンドの実行環境はCloud Shellがおすすめです。詳しくはCloud Shell の起動をご覧ください。

HTTPSプロキシ・転送ルールの削除

$ gcloud compute forwarding-rules delete managedssl-fw-rules \
    --global \
    --quiet

$ gcloud compute target-https-proxies delete managedssl-https-proxy \
    --quiet

ロードバランサー(URL map)の削除

$ gcloud compute url-maps delete managedssl-global-lb \
    --quiet

バックエンドサービスの削除

$ gcloud compute backend-services delete managedssl-bes \
    --global \
    --quiet

バックエンドサービス・ヘルスチェックの削除

$ gcloud compute http-health-checks delete managedssl-http-healthcheck \
    --quiet

マネージドSSL証明書の削除

$ gcloud beta compute ssl-certificates delete managedssl-sslcert \
    --quiet

マネージドインスタンスグループの削除

$ gcloud compute instance-groups managed delete managedssl-mig \
    --region=asia-northeast1 \
    --quiet

インスタンステンプレートの削除

$ gcloud compute instance-templates delete managedssl-default-osimage-debian9 \
    --quiet

自動生成されたファイアウォールルールの削除

$ gcloud compute firewall-rules delete managedssl-vpc-allow-http \
    --quiet

VPCネットワーク・サブネットの削除

$ gcloud compute networks subnets delete tokyo-subnet --region=asia-northeast1 \
    --quiet
$ gcloud compute networks delete managedssl-vpc \
    --quiet
次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます
次の記事を読み込んでいます