GCP で組織を作成して共有 VPC 構築

## はじめに

ゼロから GCP で共有 VPC を作成したので、やったことを記載する

### 共有 VPC を作成するまでにやること
GCP で共有 VPC を作成する
共有 VPC は組織を作成する必要があるので、組織を作成する
組織作成にはドメイン取得も必要なのでドメイン取得から実施する
既存プロジェクトの組織の移行も実施する

- やることリスト
    - ドメイン取得
    - G Suite アカウント or Cloud Identity アカウントの取得
    - 組織作成
    - 組織アカウントからプロジェクトアカウントへ権限の付与
    - 既存プロジェクトの組織への移行
    - ホストプロジェクトの有効化, 共有 VPC の作成
    - サービスプロジェクトの作成, 共有 VPC への接続

- 必要資金
    - ドメイン： **年間 1400 円**(.dev) ※取得ドメインによる
    - G Suite : 月額 680 円(Basic) or **Cloud Identity : 無料**
    - GCP でのコスト (通常の GCP コスト. 共有 VPC でかかるコストはない(はず))


## 全体概要図

下記、組織・プロジェクト、それぞれのアカウント(ロール)、共有 VPC (Shared VPC)とサブネットの、全体概要図

![gcp_abst_shardvpca.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4d4c34b6-8710-0ca8-b24f-1db5d114710a.png)


※今回組織で使用するドメインのレジストラは Google Domains を使用した (使用するレジストラは Google Domains じゃなくても良い)



## 構築ステップ

ドメインの取得から、組織作成、既存プロジェクトとの組織の移行、
共有 VPC の作成(ホストプロジェクト有効)、サービスプロジェクトの作成・接続を、
下記ステップに分けて実施する

1. ドメイン取得
2. 組織の作成 
3. 組織へのプロジェクト移行
4. ホストプロジェクト 共有 VPC の構築
5. サービスプロジェクトの作成
6. サービスプロジェクトに共有 VCP のサブネットで VM インスタンスを作成

## 1. ドメイン取得
ドメイン取得はレジストラへの申請で実施する
ここでは、Google Domains を使用して実施するが、後段での作業でもレジストラの指定はないので他で所有しているドメインがあればスキップ可能

<img width="700" alt="![gcp_abst_sharedvpc1a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/d8263e89-a8e3-9351-5d44-c858774017a6.png">

まずは、Google Domains へアクセス

https://domains.google/intl/ja_jp/

取得したいドメインを入力して、「取得」をクリックする

<img width="700" alt="![スクリーンショット 2020-06-28 22.46.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/fee5c939-478f-2a39-fce9-02d2ab3c2096.png">

✅ がされて取得可能なドメインであることを確認したら、「カートアイコン」をクリックする

<img width="700" alt="![GoogleDomains1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/f4bc05a5-c22a-3c90-be12-f8208a70986d.png">

カートにドメインが入ったので、右上の「カートアイコン」をクリックする

<img width="700" alt="![GoogleDomains2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9873b215-a90d-fdb3-ab2a-955752308691.png">

取得するドメイン名と登録の内容を確認する
「プライバシー保護が有効です」が有効になっていると、 whois への情報が Google によってマスクされるのでオススメ

<img width="700" alt="![GoogleDomains3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a8a0de19-912b-ccad-71e5-cb313c5afef0.png">

「名前・住所・電話番号」を入力して、「保存して続行」をクリックする

<img width="700" alt="![GoogleDomains4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/52709d3f-9f49-13f0-c8b3-560c47f8b330.png">

これまでの入力情報などを確認して、支払い方法を確認する
(GCP など Google の他のサービスで支払いをしていれば自動で選択されている)
最後に「購入」をクリックする (**これで支払いが確定する**)

<img width="700" alt="![GoogleDomains5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a8662d4c-bf0e-a842-9b88-4c6b7f5af9d1.png">

購入が完了すると、「Google Domains」の管理画面に遷移する
連絡先メールアドレスへの確認メールが来ているので確認をする (しないと管理画面に注意が出る)

<img width="700" alt="![GoogleDomains6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/44c76c13-0d30-cee4-15ed-d5aa676ce405.png">

連絡先メールアドレスに Google Domains からいろいろメールが来ているので、「ご対応のお願い:〜」の件名のメールを開いて確認する

<img width="1000" alt="![GoogleDomains7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/3dcd9fcc-39d9-3638-7635-46c65de97daf.png">

「メールアドレスを確認」をクリックする

<img width="700" alt="![GoogleDomains8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/e68d86d4-3fa1-b8e2-4970-188d58092398.png">

Google Domains のページが自動で開いて、「確認されました」とした方に出たらOK

<img width="700" alt="![GoogleDomains9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4ff06e05-e3c2-e477-09fb-c7e6d47b0cc9.png">

以上で、**ドメイン取得完了**

## 2. 組織の作成

<img width="700" alt="![gcp_abst_sharedvpc2a.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9d635238-c7a0-77b8-e899-906c5213f432.png">

### 組織作成に必要になるもの・ここでやること

- **組織作成**には `G Suite` もしくは IDaaS の `Cloud Identity` の登録が**必要**
    - 今回は、Free Edition がある **Cloud Identity を採用**して実施する
- G Suite もしくは Cloud Identity の作成にはドメインを使用し、**ドメイン所有権証明が必要**

### 実施順番・やること
1. Cloud Identity のアカウント作成
2. Cloud Identity の設定 / ドメイン所有権の証明


### 2.1. Cloud Identity の登録・アカウント作成

GCP コンソールから Cloud Identity に登録する
https://support.google.com/cloudidentity/answer/7389973

1. [GCP コンソール](https://console.cloud.google.com/)にログイン
2. [ツールとサービス] メニューから [IAM と管理] > [ID と組織] にアクセス
3. [Cloud Identity] ウィンドウで [[登録する](https://www.google.com/a/signup/?enterprise_product=IDENTITY_GCP)] をクリック


<img width="878" alt="CloudIdentity.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/690c40c8-1b09-b668-79e3-aaf24f4788a7.png">

下記画面が表示されるので、「`次へ`」をクリックする

<img width="500" alt="![Cloud Identity1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/74fe9c2b-13e5-4827-9acd-ea29f1660cfc.png">

`ビジネス名`と`従業員数`を選んで、`次へ`をクリック

<img width="500" alt="![Cloud Identity2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4be7b4ce-a09d-e574-734d-f1d3aca58b64.png">

`国`を選んで`次へ`をクリック

<img width="500" alt="![Cloud Identity3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/018557e3-6f0d-3146-4069-12bef11b8c59.png">

`自分のメールアドレス`を入力して`次へ`をクリック

<img width="500" alt="![Cloud Identity4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/0b0c2597-347d-d378-9920-f572f4bfbb3c.png">

1. ドメイン取得 で取得した`ドメイン名`を入力して`次へ`をクリック (証明は後に実施される)

<img width="500" alt="![Cloud Identity5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/db3a5a66-831b-bf02-03df-484c0184c973.png">

ドメインを確認して`次へ`をクリック

<img width="500" alt="![Cloud Identity6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/8f528340-ed34-ec97-5a1b-f97d5bcffbd7.png">

Cloud Identity のアカウント管理者のアカウント作成を実施する
`姓``名`を入力して`次へ`をクリック

<img width="500" alt="![Cloud Identity7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/2912e073-b715-166b-358d-1b09c0068bc4.png">

続いて`ユーザー名``パスワード`を入力して`次へ`をクリック

<img width="500" alt="![Cloud Identity8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/701b2e70-4626-e453-06ac-d0b523abbf3d.png">

お知らせメールを受信してよければ`OK`をクリック

<img width="500" alt="![Cloud Identity9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/56e19101-5b43-c834-30b1-846bf6299e89.png">

`私はロボットではありません`を`チェック`して、規約に同意して`同意してアカウント作成`をクリック

<img width="500" alt="![Cloud Identity10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/797afecd-9a9b-d457-9b96-08fd158ab0bc.png">

以上で、**Cloud Identity アカウント作成が完了**

続いて Cloud Identity の設定・ドメイン所有権の証明のため、`設定に進む`をクリック

<img width="500" alt="![Cloud Identity11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/68c00366-3809-fd6d-78e6-78cd4ffea81d.png">

クリックすると、次の 2.2. の作業画面へ遷移する

### 2.2. Cloud Identity の設定 / ドメイン所有権の証明

ドメイン所有権の証明を実施する
今回は Google Domains での例を記載するが、その他の例も下記ドキュメントで記載がある
https://support.google.com/a/topic/1409901

2.1. 設定後に、下記画面へ遷移されているので、`開始`をクリック

<img width="500" alt="![Cloud Identity12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/7b003b92-a1bf-1df6-07ac-b60f612fd255.png">

ドメインの所有権の確認になる

Google Domains だと下記画面のように、Google Domains へアクセスすることが求められるので、`Google Domains を別ウィンドウで開いてログインする`
ログインが完了したら`ログインできました`を`チェック`

<img width="500" alt="![Cloud Identity13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/f67cabb8-d448-d8b2-9268-52ccbcee9d2f.png">

`自分のドメインのコントロール パネルを開きました`を`チェック`

<img width="500" alt="![Cloud Identity14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/aeb2d8dc-5bc3-5a88-ccca-1d4288474f67.png">

ドメインに新しい TXT レコードの追加が求められるので、ドメインに追加することを求めらえる`値/応答/参照先`の値を`コピー`する

<img width="500" alt="![Cloud Identity15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a87fb5f1-0346-57ee-d395-1d22d29916e3.png">

Google Domains のコントロール画面に移り下記設定を実施する

- DNS 設定画面を開く
- カスタム リソース レコード設定までスクロール
- `@`を入力
- `TXT`を選択
- コピーしておいた`値/応答/参照先`の値をペースト
- `追加`をクリック

<img width="1000" alt="![Cloud Identity16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/049b3372-6540-d35c-c273-4cee528c7012.png">

追加が完了すると下記画面のように、`変更が保存されました。48時間以内に反映されます`と出る
実際にやったところ、そこまでかからず数分で反映された (早い時は 1 分前後)

<img width="1000" alt="![Cloud Identity17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/dcbe2bd8-3c10-0dd8-268d-7ccdb65c2df4.png">

反映の確認を`dig -t TXT [ドメイン名]`のコマンドで確認する
ANSWER の中の TXT レコードに設定した`google-site-verification=xxx`の値が入っていればOK

```
dig -t TXT [ドメイン名(xxx.dev)]

; <<>> DiG 9.10.6 <<>> -t TXT xxx.dev
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31813
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;suzuyu.dev.			IN	TXT

;; ANSWER SECTION:
xxx.dev.		3599	IN	TXT	"google-site-verification=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

;; Query time: 168 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jun 30 00:37:33 JST 2020
;; MSG SIZE  rcvd: 120
```

上記通り反映が確認できたら`TXT 確認レコードを追加しました。`へ`チェック`する


<img width="500" alt="![Cloud Identity18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/77aa434a-ca72-db09-eecb-4024385e6c37.png">

`TXT 確認レコードを保存しました。`へ`チェック`する

<img width="500" alt="![Cloud Identity19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/47dffcb8-87c2-af41-bed8-dcfaacb25496.png">

`ドメインの所有権を証明`をクリック

<img width="500" alt="![Cloud Identity20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/50221145-7e22-cfd4-12de-a3c8d6a39a5a.png">

ドメインの所有権の証明が問題なく完了すれば、下記画面に遷移する
続いて、先行ユーザの登録を実施するため、`ユーザーを作成`をクリックする

<img width="500" alt="![Cloud Identity21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/f8322f41-6934-2ebe-2833-e4559655fe73.png">

組織のユーザーをを 1つ作成してみる
`名``姓``ユーザー名`を入力
ユーザーの追加を完了しましたを`チェック`
`次へ`をクリックする

<img width="500" alt="![Cloud Identity22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9cf02121-ddf7-7201-7bf8-7c7d054897ed.png">

上記で **Cloud Identity の設定が完了**
次に組織の IAM 設定などに進むため、`CLOUD CONSOLE に進む`をクリックする

<img width="500" alt="![Cloud Identity23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5c442fa6-fec7-af64-d64a-b1a5a6f2e474.png">

上記画面で、`CLOUD CONSOLE に進む`をクリックすると下記画面が表示され、登録完了が確認できる

<img width="1000" alt="![IDと組織1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/d468c214-6d17-6913-4915-de3203c73414.png">

以上で、**組織の作成が完了**

## 3. 組織へのプロジェクト移行

組織へ既存にあるプロジェクトを移行するのため、下記実施する
1. 組織アカウントから既存プロジェクトアカウントへ権限の付与
2. 既存プロジェクトを組織へ移行
3. 既存の請求先アカウントを組織へ移行

<img width="700" alt="![gcp_abst_sharedvpc3a.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/4d013d1e-fdd6-5a85-b57f-53b24f98308f.png">


### 3.1. 組織アカウントから既存プロジェクトアカウントへ権限の付与

`2. 組織の作成`の最後の組織アカウントの画面から`IAMと管理`の`IAM`の画面を開く
下記画面のとおり、`追加`をクリックする

![IAMの追加1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1472f7e1-857e-28d9-cb93-6b3b4cac43c8.png)

移行するプロジェクトのアカウントに下記ロールを付与する

- 付与するロール
    - 請求先アカウント作成者
    - プロジェクトの支払い管理者
    - プロジェクト作成者

ロール付与したら`保存`をクリック

![IAMの追加2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/429cfbfc-44c3-050c-134d-847f65e14590.png)

上記で、**既存アカウントへの権限付与完了**

### 3.2. 既存プロジェクトを組織へ移行

**既存プロジェクトのコンソール**を開く
Cloud Console で [IAM と管理] > [設定]ページを開く
下記画面の`移行`を`クリック`する

![プロジェクト移行1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/60f9fd2b-c695-a131-14ed-71bb0b3f2856.png)

下記画面がポップアップされるので、`組織を選択する`からプルダウンして`移行する組織ドメイン`を選択し、`移行`を`クリック`する

![プロジェクト移行2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/0e72b02f-0665-66d9-e03d-aeea5c2d198b.png)

上記で**既存プロジェクトの移行が完了**する

### 3.3. 既存の請求先アカウントを組織へ移行

既存の請求先アカウントを組織に移行することができるので、実施する

Cloud Console の [お支払い] ページに移動する
ページの上部にあるプルダウンから、[組織なし] を選択すると、組織に関連付けられていない請求先アカウントが表示される

[請求先アカウント名] のリストで、移行する請求先アカウント名をクリックします。請求先アカウントの概要ページが表示される
右側の [請求先アカウント] の横にある [管理] をクリックする

![請求先アカウントの移行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/76c75e1b-92d9-a469-a2fc-6cf7eb90781b.png)

表示されるアカウントの管理ページで [組織の変更] をクリックし、請求先アカウントを移行する組織を選択します。

![請求先アカウントの移行2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/ee675050-2267-cbbb-feb5-18150c14172e.png)

上記で**請求先アカウントの組織への移行完了**

以上で、**既存プロジェクトの移行手順完了**

## 4. ホストプロジェクト 共有 VPC の構築

組織が作成できたので、共有 VPC が構築可能になったので、**共有 VPC の構築を実施**する

- 共有 VPC とは
    - 組織で利用でき、**複数プロジェクトから共通で利用できる VPC ネットワーク**
    - 共通の VPC ネットワークにより内部 IP を使用してプロジェクト間安全で効率的な相互通信が可能
    - 共通 VPC は、**ホストプロジェクトを指定**して、その他はサービスプロジェクトとして、ホストプロジェクトに接続する

<img width="700" alt="![gcp_abst_sharedvpc4a.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/139da00c-d818-206a-2432-1db852ed6ec9.png">

下記順序で実施していく
1. ホストプロジェクトにするプロジェクト管理者に共有 VPC 管理者ロールを付与
2. 移行した既存プロジェクトをホストプロジェクトに指定

#### 4.1. ホストプロジェクトにするプロジェクト管理者に共有 VPC 管理者ロールを付与
[必要な管理者のロール](https://cloud.google.com/vpc/docs/shared-vpc?hl=ja#iam_roles_required_for_shared_vpc)を付与する

- **組織管理者アカウントで**下記ロールを**ホストプロジェクトオーナーアカウント**(ここでは移行したプロジェクトオーナー)へ付与する
    - Compute Shared VPC 管理者
        - [roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles?hl=ja#compute.xpnAdmin)
    - Project IAM 管理者
        - [roles/resourcemanager.projectIamAdmin](https://cloud.google.com/iam/docs/understanding-roles?hl=ja#resourcemanager.projectIamAdmin)


下記が付与するときの画面
![スクリーンショット 2020-07-06 23.38.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/197a46b7-d183-54bd-37d5-9ad1eb9d74e5.png)

#### 4.2. 移行した既存プロジェクトをホストプロジェクトに指定

共有 VPC を作成する
「VPCネットワーク」 -> 「共有 VPC」 に移動して`共有 VPC を設定`をクリック
![共有VPC01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5260153c-b8f3-f980-7f3f-8cd1b64fe52f.png)

共有 VPC の`ホストプロジェクトを有効`にする
下記画面に遷移するので`保存して続行`をクリックする

![共有VPC02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/eb223923-1f58-9d9f-2604-b582ce18b475.png)

ここではホストプロジェクトの有効化のみなので`続行`をクリック
※ 共有するサブネットの選択は別途実施する

![共有VPC03a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/93ae668a-0c17-37e8-a833-f5790a1e3cfe.png)

ここではホストプロジェクトの有効化のみなので`保存`をクリック
※ サービスプロジェクトの接続は別途実施する

![共有VPC04a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5c28dc0a-0c78-21c9-574e-10920846226b.png)

上記で、**ホストプロジェクトの有効化完了**
下記のようにホストプロジェクトになっていることが確認できる

![共有VPC05b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/f28807fa-181e-a358-61a2-e1a57d266649.png)

以上で、**共有 VPC の有効化完了**

## 5. サービスプロジェクトの作成

サービスプロジェクト向けのアカウント・プロジェクトを作成して、共有 VPC へ接続する

<img width="700" alt="![gcp_abst_sharedvpc5a.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/88d57dae-7fba-5268-b421-cf406daae11b.png">


下記の順番で実施する

1. サービスプロジェクト用のオーナーアカウントを作成
2. 新規にサービスプロジェクトを作成
3. サービスプロジェクト管理者ロールをを付与
4. 共有 VPC のサービスプロジェクトとして接続

### 5.1. サービスプロジェクト用のオーナーアカウントを作成

**組織管理者アカウント**で組織の画面を開く

![サービスPJ001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/aacc097c-7e1c-fc6c-201c-194aeaca7434.png)

「IAM と管理」 → 「ID と組織」を開いて、管理コンソールの`ユーザーを管理`をクリックする

![サービスPJ002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/ed8d10ed-e478-c560-76b4-978890e91237.png)

Google Admin の画面に遷移するので、`新しいユーザーの追加`をクリックする

![サービスPJ003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a576dc3d-ca4f-eb98-4c57-89a06d1784fd.png)

下記画面がポップアップし、新しいユーザーの`姓``名`を入力して、`新しいユーザーの追加`をクリックする

![アカウント作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/9930eaf2-e95f-76cd-0323-5ecb5a12675a.png)
![アカウント作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/845ba9f5-cb57-f6fc-8d24-82ca6b653027.png)

以上で、**ユーザアカウント作成完了**

### 5.2. 新規にサービスプロジェクトを作成

サービスプロジェクトを作成するために 4ステップ実施する

1. 作成した新しいユーザーアカウントで Google Cloud Platform へログインする
2. プロジェクトを作成
3. 請求先アカウントの設定
4. Compute Engine API 有効化

#### 5.2.1. 作成した新しいユーザーアカウントで Google Cloud Platform へログインする
作成したアカウントで Google Cloud Console へログインする
作成時に表示されたユーザのメールアドレスを入力する
![ユーザログイン01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/a67d1a62-4bb4-f1a2-275a-1824124f5b0c.png)
作成時にコピーしたパスワードを入力する
![ユーザログイン02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/617b1180-3c53-683e-796d-66b8c2d8a4ad.png)
記載条項を読んで`同意する`をクリックする
![ユーザログイン03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/abaafd72-1fc4-d830-a7ff-865070a9f35d.png)
初回ログイン時にパスワード変更が求められるので新しいパスワードを作成する
![ユーザログイン04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/aa7e7b9e-3b83-d44d-d9ed-d1a2fa251e8a.png)
利用規約への同意チェックが求められるので、チェックして`同意して続行`をクリックする
![ユーザログイン05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/ada517ed-3adf-5446-e738-ad588d87d819.png)

以上で、**ログイン完了**する

#### 5.2.2. プロジェクトを作成
ログインしたサービスプロジェクトのアカウントでプロジェクトの作成を実施する(新規プロジェクトのオーナーになる)
下記画面に遷移して`新しいプロジェクト`をクリック
![プロジェクト作成00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/1188bd13-1220-ae2a-ab54-3a8ab8e9e50c.png)
`サービスプロジェクト名`を入力して`作成`をクリック
![プロジェクト作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/664ca20a-3d89-a4f6-a6f8-5bcc01d57a86.png)

以上で、**プロジェクト作成完了**

#### 5.2.3. 請求先アカウントの設定
課金が可能になるように、請求先アカウントの設定を実施する

組織の請求先アカウントの管理者(この例ではホストプロジェクトのオーナー)で「お支払い」画面を開く
`請求先アカウントを管理`をクリックして開く

![請求先アカウント追加00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/578a9708-7ae7-9d06-035e-71558ec200a2.png)

`マイプロジェクト`タブをクリックして、作成したサービスプロジェクトの`お支払い情報の変更`をクリック
![請求先アカウント追加01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/cb586e74-922d-d647-7517-8dd044eda5fd.png)

`アカウントを設定`をクリック
![請求先アカウント追加02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/2a12dc52-fdb8-b8ad-1872-6349a66fc9b1.png)

以上で、**請求先アカウントの設定完了**

#### 5.2.4. Compute Engine API 有効化
Coumpute Engine API が有効化してないと、共有 VPC に接続ができないので、有効化を実施する

サービスプロジェクトの「API とサービス」画面を開き、`API とサービスを有効化`をクリック
![GCE_API有効化01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/b6180aa7-8092-7ad5-b135-b9067e6c974f.png)
検索窓で`Compute`を入力
<img width="700" alt="![GCE_API有効化02.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/6f4444c0-4058-4482-2d05-ed4c24cf3a94.png">
`Compute Engine API`をクリック
<img width="700" alt="![GCE_API有効化03.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/45a40df1-fb3d-a3d6-a74c-4cc01d577bda.png">
`有効にする`をクリック
<img width="500" alt="![GCE_API有効化04.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/0bf8e4be-b75c-0a01-0a68-d9652be7d452.png">


以上で**サービスプロジェクト作成完了**

### 5.3. サービスプロジェクト管理者ロールを付与
サービスプロジェクトの管理者が共有 VPC のネットワークを見れるように、ネットワークユーザーロールを付与する

- 共有 VPC のホストプロジェクト側で、**共有 VPC 管理者アカウント**で下記ロールを付与する
- 付与ロール
    - Compute ネットワーク ユーザー
        - [compute.networkUser](https://cloud.google.com/compute/docs/access/iam?hl=ja#compute.networkUser)

![サービスPJ01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5f55a44e-83d8-40e6-bedb-b304f76f954a.png)

以上で、ロール付与完了

### 5.4. 共有 VPC のサービスプロジェクトとして接続
共有 VPC 側でサービスプロジェクトの接続を実施する

**ホストプロジェクトのコンソールで**「VPCネットワーク」「共有 VPC」「接続されたプロジェクト」を開いて、`プロジェクトを接続`をクリック
![共有VPC接続01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/be8c1095-d175-d843-27d5-cbdc4d34c774.png)
接続するプロジェクトをチェックして、共有するサブネットを選択して`保存`をクリック
![共有VPC接続02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/b0c8e183-ab9b-4b90-498d-ebc1c012f6ec.png)
下記画面に遷移し、サービスプロジェクトが接続されたことが表示される
![共有VPC接続03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/ba5ae896-b2f6-cff4-0ad3-1d4086cc1522.png)

以上で、**サービスプロジェクトの共有 VPC への接続完了**

## 6. サービスプロジェクトに共有 VCP のサブネットで VM インスタンスを作成
最後に、サービスプロジェクトに共有 VCP のサブネットで VM インスタンスを作成できるかを確認する
<img width="700" alt="![gcp_abst_sharedvpc6a.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/07b16088-2e1f-d98a-0b51-cd5c8ea3cbf1.png">

サービスプロジェクトのコンソールで VM インスタンス作成画面まで進め、`管理、セキュリティ、ディスク、ネットワーク、単一テナンシー`をクリック

<img width="700" alt="![インスタンス作成01.png]" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/5d17c7b3-d4dc-3675-046e-0e63aacb8393.png">

`ネットワーキング`タブをクリックし開いて、**共有ネットワーク**が選択できるようになっていることを確認する
![インスタンス作成02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/326183/707c0dfb-e9de-6dd7-49ba-b57575c283ca.png)

上記選択して、VM インスタンスを作成すれば**共有 VPC のサブネットで VM インスタンス作成完了**

共有 VPC 側ファイヤーウォール設定で通信制御実施も可能

## [追加] 運用.共有VPCでのサブネット追加とサービスプロジェクトへの払い出し

作成した共有 VPC からサービスプロジェクトへ新たなサブネットを作成して払い出す運用を試したので追記する

### 新規サブネットの作成

ホストプロジェクトに切り替える

```sh:プロジェクトIDの確認。切り替え
gcloud projects list
gcloud config set project HOST_PROJECT_ID
```

```sh:事前サブネット確認
gcloud compute networks subnets list
```

```sh:サブネットの追加
gcloud compute networks subnets create private-subnet01 \
    --network=vpc01 \
    --range=10.20.0.0/20\
    --region=us-west1
```

```sh:切り戻し_サブネットの追加_削除コマンド
gcloud compute networks subnets delete private-subnet01 \
    --region=us-west1
```

```sh:事後サブネット確認
gcloud compute networks subnets list
```

参考：https://cloud.google.com/vpc/docs/using-vpc?hl=ja#add-subnets

### サービスプロジェクトへの払い出し

サービスプロジェクトから共有 VPC で作成したサブネットを利用するには、
サービスプロジェクトの管理者アカウントへ権限を追加する

下記コマンドで現状のサブネットの権限を json フォーマットで出力する

```
$ gcloud beta compute networks subnets get-iam-policy private-subnet01 \
    --region us-west1 \
    --project HOST_PROJECT_ID \
    --format json

{
  "etag": "ACAB"
}
```

出力されたフォーマットに `bindings` でメンバーと`networkUser ロール`の追加をする json ファイルを作成する

SERVICE_PROJECT_ADMIN: xxx@xxx.dev アカウント
"etag": 現状設定から踏襲したもの.上記出力例では`"etag": "ACAB"`とする

```subnet-policy.json
{
  "bindings": [  {
     "members": [
           "user:[SERVICE_PROJECT_ADMIN]"
        ],
        "role": "roles/compute.networkUser"
  }
  ],
  "etag": "[ETAG_STRING]"
}
```

上記で作成した json ファイルを対象サブネットへ適用する

```
gcloud beta compute networks subnets set-iam-policy private-subnet01 subnet-policy.json \
    --region us-west1 \
    --project HOST_PROJECT_ID
```

再度 json フォーマット出力をして反映が確認できる

```
gcloud beta compute networks subnets get-iam-policy private-subnet01 \
    --region us-west1 \
    --project HOST_PROJECT_ID \
    --format json
```

参考：https://cloud.google.com/vpc/docs/provisioning-shared-vpc?hl=ja#networkuseratsubnet

## おわりに
組織作成(の前のドメイン取得)から始めて、既存プロジェクトの移行、共有 VPC の作成やサービスプロジェクトの作成・接続まで完了した

組織で GCP にて複数プロジェクトを扱うようになるために、共有 VPC の事前学習を自前でやってみるかと軽い気持ちで手を出したらやること多すぎた
今後は、共有 VPC でのネットワーク共有や制御、組織の IAM 管理などを試していきたい

## 参考
組織の作成と管理
https://cloud.google.com/resource-manager/docs/creating-managing-organization?hl=ja
Cloud Identity とは
https://support.google.com/cloudidentity/answer/7319251?hl=ja&visit_id=637290373214995333-3222352506&rd=1
ドメイン所有権の証明手順
https://support.google.com/a/topic/1409901
G Suite へのお申し込み
https://support.google.com/a/answer/53926?hl=ja
組織へのプロジェクトの移行
https://cloud.google.com/resource-manager/docs/migrating-projects-billing?hl=ja#migrating_projects_with_no_organization
共有 VPC の概要
https://cloud.google.com/vpc/docs/shared-vpc?hl=ja
共有 VPC のプロビジョニング
https://cloud.google.com/vpc/docs/provisioning-shared-vpc?hl=ja
サブネットの追加
https://cloud.google.com/vpc/docs/using-vpc?hl=ja#add-subnets
一部のサブネットのサービス プロジェクト管理者
https://cloud.google.com/vpc/docs/provisioning-shared-vpc?hl=ja#networkuseratsubnet