[GCP]独自ドメイン+SSLでCloud Storage上のファイルを公開する方法

# はじめに
独自ドメイン+SSLで Cloud Storage上のファイルを公開する方法をまとめています。
インターネット -> ロードバランサ -> Cloud Storage という流れになります。

# Cloud Storageの設定手順
## 1. Cloud Storageにオブジェクトを配置
公開したいファイルをCloud Storageにアップロードします。
なおバケットは既存のものを利用しても新規に作成しても構いません。

今回は`public_gcs`というバケットに以下のようにファイルを配置しました。

```
public_gcs
├─folder1
│ ├─test2.txt
├─test.txt
```

## 2. オブジェクトの公開設定
オブジェクトの公開設定をします。
今回は`test.txt`と`test2.txt`を公開するため、以下の作業を2回繰り返します。

1. 公開するオブジェクトのメニュー アイコンをクリックします。オブジェクト行の右端にある縦に並んだ 3 つの点がメニュー アイコンです。
2. メニューから [権限を編集] を選択します。
3. [項目を追加] をクリックします。
4. allUsers の権限を追加します。
5. [エンティティ] で [ユーザー] を選択します。
6. [名前] に「allUsers」と入力します。
7. [アクセス] で [読み取り] を選択します。
8. [保存] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/8c2c0eb2-55c9-65fe-abef-bae3f7a25b34.png)

参考：ロードバランサへの Cloud Storage バケットの追加
https://cloud.google.com/load-balancing/docs/https/adding-backend-buckets-to-load-balancers?hl=ja

# ロードバランサの設定
## 1. ロードバランサを作成
[ネットワークサービス] -> [負荷分散] -> [ロードバランサを作成] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/9159d84a-f64b-0788-ba8f-147efa3e8380.png)

HTTP(S)負荷分散の下にある [設定を開始] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/8aea0577-ad1f-a9e4-2d23-d9edc780c6a0.png)

[インターネットから自分のVMへ] を選択した状態で [続行] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/09b8aa0a-4bf1-8b74-e019-a14ecf769379.png)

名前を入力します。今回は`public-lb`としました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/044fd6f5-1baa-4f7c-5f1f-063d629283e8.png)

## 2. バックエンドの設定
[バックエンドの設定] -> [バックエンドバケット] -> [バックエンドバケットを作成] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/d3ef63c2-f428-4bbc-aa07-cc886a3f8ddc.png)

名前（ここでは`public-gcs`）を入力し、先ほど作成したバケットを選択し、[作成] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/2b1d346b-ef1b-a189-f464-c47b2df3bf18.png)

## 3. フロントエンドの設定
[フロントエンドの設定] を選択し、以下を設定します。

* 名前（ここでは`public-gcs`）を入力
* プロトコルで [HTTTPS (HTTP/2を含む)] を選択
* IPアドレスの部分で [IPアドレスを作成] を選択すると、名前を入力する画面が表示されますので名前（ここでは`public-gcs`）を入力します。すると自動でIPアドレスが割り振られます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/da0740c4-4f35-dbc6-04f9-9b46f9df5f2a.png)

* 上記で割り振られたIPアドレスをメモします
* ドメイン名とIPアドレスの紐付けを登録します
    * テストで試すのであればDDNSサービスを利用するのが簡単です。ちなみに私はNo-IPで登録しました
* 次に [証明書] の項目で [新しい証明書の作成] を選択すると以下の画面が表示されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/ebeaf73d-6d73-8511-ef46-285b60426ff0.png)

* 上記の画面に名前（ここでは`public-gcs`）を入力し、[Google管理の証明書を作成する] を選択し、[ドメイン] にIPアドレスと紐付けたドメイン名を入力し、最後に [作成] を選択します
* 以下の画面が表示されたら [完了] を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/4adda0c8-dc45-2b87-6336-957a6ff9cc0e.png)


## 4. ホストとパスのルール
[ホストとパスのルール] を選択し、[ホストとパスのルールを追加] を選択し以下を設定します。

* [ホスト名] にIPアドレスと紐付けたドメイン名を入力
* [パス] にアクセスさせたいCloud Storageのフォルダ名（ここでは`/folder1/*`）を入力
* [バックエンド] で`public-gcs`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/c68c91ce-121f-086b-32ba-067845d7e36d.png)


## 5. 確認と完了
[確認と完了] を選択し入力内容に問題がなければ、[作成] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/32e955fb-3322-572b-3520-574d2017fdc0.png)


# オブジェクトにアクセス
## 1. マネージド証明書ステータスの確認
先ほど作成したロードバランサを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/c9d1f977-f975-c47b-a71f-59df36e190d0.png)

認証鍵を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/4caaa79b-fdfc-1d5c-66ba-21be667e78ea.png)

ステータスを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/a816378e-a041-9f65-b21b-453a92cc52b0.png)

> ステータス PROVISIONING は、Google マネージド証明書リソースは作成済みでプロビジョニングはまだ完了していないことを示しています。
> 正しく構成されていれば、証明書のプロビジョニングの合計所要時間は 30～60 分程度になります。

とのことですので、しばらく待ちます。
ステータスが`ACTIVE`になったら次の手順に進んでください。

## 2. ブラウザからオブジェクトにアクセス
Cloud Storageの構成は以下のようになっており、ロードバランサの [ホストとパスのルール] で`/folder1/*`を指定しました。

```
public_gcs
├─folder1
│ ├─test2.txt
├─test.txt
```

ブラウザからのアクセスする場合は以下のURLとなります。

* https://********.ddns.net/test.txt
* https://********.ddns.net/folder1/test2.txt

なお、ロードバランサの [ホストとパスのルール] で`/folder1/*`しか指定していないため、インターネットからアクセスできるオブジェクトは`public_gcs`直下か、`folder1`フォルダの中身だけです。