GCPのマネージドTLSを触ってみた

# GCPマネージドTLSについて

GCPでGoogleが管理する証明書のサービス提供が開始されました。
これを利用することで、GCP上で構築したWebサービスに無償SSL証明書を簡単に適用することができるようになりました。

自己管理証明書との大きな差は以下の通りです。

||自己管理証明書|GCP マネージドTLS|
|---|---|---|
|価格|有償|無償|
|種別|選択可能|DVのみ|
|ワイルドカード|可|不可|
|有効期間|選択可能|3ヶ月|

[マネージドTLSについての公式ページ]
https://cloud.google.com/load-balancing/docs/ssl-certificates

# 既存のWebサイトをHTTPS化してみる

HTTPのみを提供していたロードバランサーに、HTTPSのフロントエンドを追加します。
フロントエンドに割り当ててあるIPアドレスは、「ip-static-address」という名前で事前に静的アドレスを予約取得しました。

<img width="672" alt="スクリーンショット 2018-12-20 19.16.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/80a1006c-d606-d410-b872-bd31d3871d65.png">

# 証明書の作成
以下のコマンドを実行して、証明書リソースを作成します。
始める前にgcloudを最新まであげておきましょう。(gcloud components updateで最新化できます)

```
$ gcloud beta compute ssl-certificates create [証明書リソース名] --domains [取得したいFQDN]
```
## コマンド実行例
```
$ gcloud beta compute ssl-certificates create sample-cert --domains sample.example.com

Created [https://www.googleapis.com/compute/beta/projects/<あなたのGCPプロジェクト名>/global/sslCertificates/sample-cert].
NAME                  TYPE     CREATION_TIMESTAMP             EXPIRE_TIME  MANAGED_STATUS
sample-cert           MANAGED  2018-11-16T01:16:43.038-08:00               PROVISIONING
    sample.example.com: PROVISIONING
```

# HTTPSプロキシの作成

HTTPS用のプロキシターゲットを作成します。

```
$ gcloud beta compute target-https-proxies create [HTTPSプロキシ名] \
--url-map=[URL_MAP名] \
--ssl-certificates=[作成した証明書リソース名]
```
## コマンド実行例
```
$ gcloud beta compute target-https-proxies create ssl-proxy \
> --url-map=lb-ssl-service \
> --ssl-certificates=ssl-cert

Created [https://www.googleapis.com/compute/beta/projects/<あなたのGCPプロジェクト名>/global/targetHttpsProxies/ssl-proxy].
NAME       SSL_CERTIFICATES  URL_MAP
ssl-proxy  ssl-cert          lb-ssl-service
```

# フロントエンドの追加

ロードバランサの設定にHTTPS用のターゲットプロキシを組み込み、HTTPS対応させます。

```
gcloud beta compute forwarding-rules create [フォワーディングルール名] \
--global \
--target-https-proxy=[作成したHTTPSプロキシ名] \
--address=[取得済みの静的アドレス名] \
--ports=443
```
## コマンド実行例
```
gcloud beta compute forwarding-rules create frontend-ssl-rules \
> --global \
> --target-https-proxy=ssl-proxy \
> --ip-protocol=TCP \
> --address=ip-static-address \
> --ports=443

Created [https://www.googleapis.com/compute/beta/projects/<あなたのGCPプロジェクト名>/global/forwardingRules/frontend-ssl-rules].
```

# 確認してみる
最初に確認したロードバランサの詳細をみてみると、フロントエンドにHTTPSが追加されました。
上記手順で新規にHTTPSのフロントエンドを追加した直後は、証明書部分をマウスオーバーすると PROVISIONING になっており、アクセスを受け付けません。
10分ほど待つと、以下の画面のようにステータスが ACTIVE になり、実際に利用可能になります。

<img width="677" alt="スクリーンショット 2018-12-20 20.07.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/087d51c7-c6c3-280e-c690-4e0be0966682.png">

また、以下のコマンドでも確認することが可能です。

```
$ gcloud beta compute ssl-certificates list

NAME                             TYPE     CREATION_TIMESTAMP             EXPIRE_TIME                    MANAGED_STATUS
ssl-cert                         MANAGED  2018-12-20T02:25:17.851-08:00  2019-03-20T03:00:05.000-07:00  ACTIVE
    sample.example.com: ACTIVE
```

以下は証明書のプロパティの部分キャプチャとなります。
中身はLet’s Encryptで期間は3ヶ月でした。
<img width="483" alt="スクリーンショット 2018-12-21 12.44.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/198206/5542d255-50e8-38f3-bef4-131bd1c9e59e.png">

# おわりに

これでHTTPSサイトの構築ができることが確認できました。
この機能を使うことで、開発環境等でエラーを発生させないようにしたり、コストダウンへの貢献などができるかと思います。

みなさまもこれを機会に導入してみてはいかがでしょうか。