はじめに
ゼロから 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)とサブネットの、全体概要図
※今回組織で使用するドメインのレジストラは Google Domains を使用した (使用するレジストラは Google Domains じゃなくても良い)
構築ステップ
ドメインの取得から、組織作成、既存プロジェクトとの組織の移行、
共有 VPC の作成(ホストプロジェクト有効)、サービスプロジェクトの作成・接続を、
下記ステップに分けて実施する
- ドメイン取得
- 組織の作成
- 組織へのプロジェクト移行
- ホストプロジェクト 共有 VPC の構築
- サービスプロジェクトの作成
- サービスプロジェクトに共有 VCP のサブネットで VM インスタンスを作成
1. ドメイン取得
ドメイン取得はレジストラへの申請で実施する
ここでは、Google Domains を使用して実施するが、後段での作業でもレジストラの指定はないので他で所有しているドメインがあればスキップ可能
まずは、Google Domains へアクセス
取得したいドメインを入力して、「取得」をクリックする
✅ がされて取得可能なドメインであることを確認したら、「カートアイコン」をクリックする
カートにドメインが入ったので、右上の「カートアイコン」をクリックする
取得するドメイン名と登録の内容を確認する
「プライバシー保護が有効です」が有効になっていると、 whois への情報が Google によってマスクされるのでオススメ
「名前・住所・電話番号」を入力して、「保存して続行」をクリックする
これまでの入力情報などを確認して、支払い方法を確認する
(GCP など Google の他のサービスで支払いをしていれば自動で選択されている)
最後に「購入」をクリックする (これで支払いが確定する)
購入が完了すると、「Google Domains」の管理画面に遷移する
連絡先メールアドレスへの確認メールが来ているので確認をする (しないと管理画面に注意が出る)
連絡先メールアドレスに Google Domains からいろいろメールが来ているので、「ご対応のお願い:〜」の件名のメールを開いて確認する
「メールアドレスを確認」をクリックする
Google Domains のページが自動で開いて、「確認されました」とした方に出たらOK
以上で、ドメイン取得完了
2. 組織の作成
組織作成に必要になるもの・ここでやること
-
組織作成には
G Suite
もしくは IDaaS のCloud Identity
の登録が必要- 今回は、Free Edition がある Cloud Identity を採用して実施する
- G Suite もしくは Cloud Identity の作成にはドメインを使用し、ドメイン所有権証明が必要
実施順番・やること
- Cloud Identity のアカウント作成
- Cloud Identity の設定 / ドメイン所有権の証明
2.1. Cloud Identity の登録・アカウント作成
GCP コンソールから Cloud Identity に登録する
https://support.google.com/cloudidentity/answer/7389973
下記画面が表示されるので、「次へ
」をクリックする
ビジネス名
と従業員数
を選んで、次へ
をクリック
国
を選んで次へ
をクリック
自分のメールアドレス
を入力して次へ
をクリック
- ドメイン取得 で取得した
ドメイン名
を入力して次へ
をクリック (証明は後に実施される)
ドメインを確認して次へ
をクリック
Cloud Identity のアカウント管理者のアカウント作成を実施する
姓
名
を入力して次へ
をクリック
続いてユーザー名
パスワード
を入力して次へ
をクリック
お知らせメールを受信してよければOK
をクリック
私はロボットではありません
をチェック
して、規約に同意して同意してアカウント作成
をクリック
以上で、Cloud Identity アカウント作成が完了
続いて Cloud Identity の設定・ドメイン所有権の証明のため、設定に進む
をクリック
クリックすると、次の 2.2. の作業画面へ遷移する
2.2. Cloud Identity の設定 / ドメイン所有権の証明
ドメイン所有権の証明を実施する
今回は Google Domains での例を記載するが、その他の例も下記ドキュメントで記載がある
https://support.google.com/a/topic/1409901
2.1. 設定後に、下記画面へ遷移されているので、開始
をクリック
ドメインの所有権の確認になる
Google Domains だと下記画面のように、Google Domains へアクセスすることが求められるので、Google Domains を別ウィンドウで開いてログインする
ログインが完了したらログインできました
をチェック
自分のドメインのコントロール パネルを開きました
をチェック
ドメインに新しい TXT レコードの追加が求められるので、ドメインに追加することを求めらえる値/応答/参照先
の値をコピー
する
Google Domains のコントロール画面に移り下記設定を実施する
- DNS 設定画面を開く
- カスタム リソース レコード設定までスクロール
-
@
を入力 -
TXT
を選択 - コピーしておいた
値/応答/参照先
の値をペースト -
追加
をクリック
追加が完了すると下記画面のように、変更が保存されました。48時間以内に反映されます
と出る
実際にやったところ、そこまでかからず数分で反映された (早い時は 1 分前後)
反映の確認を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 確認レコードを追加しました。
へチェック
する
TXT 確認レコードを保存しました。
へチェック
する
ドメインの所有権を証明
をクリック
ドメインの所有権の証明が問題なく完了すれば、下記画面に遷移する
続いて、先行ユーザの登録を実施するため、ユーザーを作成
をクリックする
組織のユーザーをを 1つ作成してみる
名
姓
ユーザー名
を入力
ユーザーの追加を完了しましたをチェック
次へ
をクリックする
上記で Cloud Identity の設定が完了
次に組織の IAM 設定などに進むため、CLOUD CONSOLE に進む
をクリックする
上記画面で、CLOUD CONSOLE に進む
をクリックすると下記画面が表示され、登録完了が確認できる
以上で、組織の作成が完了
3. 組織へのプロジェクト移行
組織へ既存にあるプロジェクトを移行するのため、下記実施する
1. 組織アカウントから既存プロジェクトアカウントへ権限の付与
2. 既存プロジェクトを組織へ移行
3. 既存の請求先アカウントを組織へ移行
3.1. 組織アカウントから既存プロジェクトアカウントへ権限の付与
2. 組織の作成
の最後の組織アカウントの画面からIAMと管理
のIAM
の画面を開く
下記画面のとおり、追加
をクリックする
移行するプロジェクトのアカウントに下記ロールを付与する
- 付与するロール
- 請求先アカウント作成者
- プロジェクトの支払い管理者
- プロジェクト作成者
ロール付与したら保存
をクリック
上記で、既存アカウントへの権限付与完了
3.2. 既存プロジェクトを組織へ移行
既存プロジェクトのコンソールを開く
Cloud Console で [IAM と管理] > [設定]ページを開く
下記画面の移行
をクリック
する
下記画面がポップアップされるので、組織を選択する
からプルダウンして移行する組織ドメイン
を選択し、移行
をクリック
する
上記で既存プロジェクトの移行が完了する
3.3. 既存の請求先アカウントを組織へ移行
既存の請求先アカウントを組織に移行することができるので、実施する
Cloud Console の [お支払い] ページに移動する
ページの上部にあるプルダウンから、[組織なし] を選択すると、組織に関連付けられていない請求先アカウントが表示される
[請求先アカウント名] のリストで、移行する請求先アカウント名をクリックします。請求先アカウントの概要ページが表示される
右側の [請求先アカウント] の横にある [管理] をクリックする
表示されるアカウントの管理ページで [組織の変更] をクリックし、請求先アカウントを移行する組織を選択します。
上記で請求先アカウントの組織への移行完了
以上で、既存プロジェクトの移行手順完了
4. ホストプロジェクト 共有 VPC の構築
組織が作成できたので、共有 VPC が構築可能になったので、共有 VPC の構築を実施する
- 共有 VPC とは
- 組織で利用でき、複数プロジェクトから共通で利用できる VPC ネットワーク
- 共通の VPC ネットワークにより内部 IP を使用してプロジェクト間安全で効率的な相互通信が可能
- 共通 VPC は、ホストプロジェクトを指定して、その他はサービスプロジェクトとして、ホストプロジェクトに接続する
下記順序で実施していく
1. ホストプロジェクトにするプロジェクト管理者に共有 VPC 管理者ロールを付与
2. 移行した既存プロジェクトをホストプロジェクトに指定
4.1. ホストプロジェクトにするプロジェクト管理者に共有 VPC 管理者ロールを付与
必要な管理者のロールを付与する
-
組織管理者アカウントで下記ロールをホストプロジェクトオーナーアカウント(ここでは移行したプロジェクトオーナー)へ付与する
- Compute Shared VPC 管理者
- Project IAM 管理者
4.2. 移行した既存プロジェクトをホストプロジェクトに指定
共有 VPC を作成する
「VPCネットワーク」 -> 「共有 VPC」 に移動して共有 VPC を設定
をクリック
共有 VPC のホストプロジェクトを有効
にする
下記画面に遷移するので保存して続行
をクリックする
ここではホストプロジェクトの有効化のみなので続行
をクリック
※ 共有するサブネットの選択は別途実施する
ここではホストプロジェクトの有効化のみなので保存
をクリック
※ サービスプロジェクトの接続は別途実施する
上記で、ホストプロジェクトの有効化完了
下記のようにホストプロジェクトになっていることが確認できる
以上で、共有 VPC の有効化完了
5. サービスプロジェクトの作成
サービスプロジェクト向けのアカウント・プロジェクトを作成して、共有 VPC へ接続する
下記の順番で実施する
- サービスプロジェクト用のオーナーアカウントを作成
- 新規にサービスプロジェクトを作成
- サービスプロジェクト管理者ロールをを付与
- 共有 VPC のサービスプロジェクトとして接続
5.1. サービスプロジェクト用のオーナーアカウントを作成
組織管理者アカウントで組織の画面を開く
「IAM と管理」 → 「ID と組織」を開いて、管理コンソールのユーザーを管理
をクリックする
Google Admin の画面に遷移するので、新しいユーザーの追加
をクリックする
下記画面がポップアップし、新しいユーザーの姓
名
を入力して、新しいユーザーの追加
をクリックする
以上で、ユーザアカウント作成完了
5.2. 新規にサービスプロジェクトを作成
サービスプロジェクトを作成するために 4ステップ実施する
- 作成した新しいユーザーアカウントで Google Cloud Platform へログインする
- プロジェクトを作成
- 請求先アカウントの設定
- Compute Engine API 有効化
5.2.1. 作成した新しいユーザーアカウントで Google Cloud Platform へログインする
作成したアカウントで Google Cloud Console へログインする
作成時に表示されたユーザのメールアドレスを入力する
作成時にコピーしたパスワードを入力する
記載条項を読んで同意する
をクリックする
初回ログイン時にパスワード変更が求められるので新しいパスワードを作成する
利用規約への同意チェックが求められるので、チェックして同意して続行
をクリックする
以上で、ログイン完了する
5.2.2. プロジェクトを作成
ログインしたサービスプロジェクトのアカウントでプロジェクトの作成を実施する(新規プロジェクトのオーナーになる)
下記画面に遷移して新しいプロジェクト
をクリック
サービスプロジェクト名
を入力して作成
をクリック
以上で、プロジェクト作成完了
5.2.3. 請求先アカウントの設定
課金が可能になるように、請求先アカウントの設定を実施する
組織の請求先アカウントの管理者(この例ではホストプロジェクトのオーナー)で「お支払い」画面を開く
請求先アカウントを管理
をクリックして開く
マイプロジェクト
タブをクリックして、作成したサービスプロジェクトのお支払い情報の変更
をクリック
以上で、請求先アカウントの設定完了
5.2.4. Compute Engine API 有効化
Coumpute Engine API が有効化してないと、共有 VPC に接続ができないので、有効化を実施する
サービスプロジェクトの「API とサービス」画面を開き、API とサービスを有効化
をクリック
検索窓でCompute
を入力
Compute Engine API
をクリック
有効にする
をクリック
以上でサービスプロジェクト作成完了
5.3. サービスプロジェクト管理者ロールを付与
サービスプロジェクトの管理者が共有 VPC のネットワークを見れるように、ネットワークユーザーロールを付与する
- 共有 VPC のホストプロジェクト側で、共有 VPC 管理者アカウントで下記ロールを付与する
- 付与ロール
- Compute ネットワーク ユーザー
以上で、ロール付与完了
5.4. 共有 VPC のサービスプロジェクトとして接続
共有 VPC 側でサービスプロジェクトの接続を実施する
ホストプロジェクトのコンソールで「VPCネットワーク」「共有 VPC」「接続されたプロジェクト」を開いて、プロジェクトを接続
をクリック
接続するプロジェクトをチェックして、共有するサブネットを選択して保存
をクリック
下記画面に遷移し、サービスプロジェクトが接続されたことが表示される
以上で、サービスプロジェクトの共有 VPC への接続完了
6. サービスプロジェクトに共有 VCP のサブネットで VM インスタンスを作成
最後に、サービスプロジェクトに共有 VCP のサブネットで VM インスタンスを作成できるかを確認する
サービスプロジェクトのコンソールで VM インスタンス作成画面まで進め、管理、セキュリティ、ディスク、ネットワーク、単一テナンシー
をクリック
ネットワーキング
タブをクリックし開いて、共有ネットワークが選択できるようになっていることを確認する
上記選択して、VM インスタンスを作成すれば共有 VPC のサブネットで VM インスタンス作成完了
共有 VPC 側ファイヤーウォール設定で通信制御実施も可能
[追加] 運用.共有VPCでのサブネット追加とサービスプロジェクトへの払い出し
作成した共有 VPC からサービスプロジェクトへ新たなサブネットを作成して払い出す運用を試したので追記する
新規サブネットの作成
ホストプロジェクトに切り替える
gcloud projects list
gcloud config set project HOST_PROJECT_ID
gcloud compute networks subnets list
gcloud compute networks subnets create private-subnet01 \
--network=vpc01 \
--range=10.20.0.0/20\
--region=us-west1
gcloud compute networks subnets delete private-subnet01 \
--region=us-west1
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"
とする
{
"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