GCP プロジェクトを他の組織へ移行する

この記事は [Google Cloud + Gaming Advent Calendar 2020](https://qiita.com/advent-calendar/2020/gcp-gaming) の18日目のものです。
GCPの組織の配下にあるプロジェクトを、他の組織に移行するためにやることを書いた記事です。

**（2021年5月31日追記）**
移行のコマンドが ```gcloud beta``` にアップデートされたようです。GAまでもうすぐですかね。

**（2021年3月3日追記）**
GCP 組織間のプロジェクト移行について、サポートケースの作成なしで、ユーザーのコマンド実行でできるようになりそうです。
Pre-GA（alpha）で機能が提供され始めたようでした、便利になりますね。
https://cloud.google.com/resource-manager/docs/project-migration
（追記ここまで）

# はじめに
はじめまして、グリー株式会社の黒木です。

グリーでは他社からのゲーム事業の受け容れをすることがあります。その際、 GCP 上で動いているゲームの場合、 GCP の組織配下のプロジェクトを丸ごと他の組織へ移行する対応ができるケースがあります。

最近、業務の中で 組織間の移行を経験しましたので

- スケジュール感
- 事前に確認すべきこと
- 実際の移行に必要なサポートケースのやり取り

などの内容を書いてみたいと思います。移行の際にお役に立てば幸いです。

基本的な手順については公式ドキュメントに記載がありますので、あわせてご確認ください。
https://cloud.google.com/resource-manager/docs/project-migration?hl=ja

こちらの記事も参考にさせていただきました。
https://tech.radiotalk.jp/entry/2020/06/16/113000

# 前提条件
本記事で紹介する、組織から組織へのプロジェクトの移行を行うためには、以下のような前提条件があります。

- 移行先組織が移行元組織とよく似ていること
  - [公式ドキュメント](https://cloud.google.com/resource-manager/docs/project-migration?hl=ja)に記載の通りです。
- G Suite アカウントを使っている企業同士　かつ、組織ポリシーを適用していること
  - Gmail アカウントでプロジェクトを作成するような場合は組織なしのプロジェクトになりますので、今回の対象外になります。
  - GCP の組織とリソースについては[こちら](https://medium.com/google-cloud-jp/gcp-iam-beginner-b2e1ef7ad9c2)が参考になりそうです。
- GCP を代理店を通さず利用していること
  - 代理店を利用している場合は、契約のスキームなどが定められていると思いますので、確認の上慎重に進める必要がありそうです。

# ざっくりとした手順
移行の概要を把握するために、ざっくりとした手順の紹介をします。
移行に必要な手順は大きく分けて

- 事前準備
- サポートケースのやり取り

以上の2つです。

我々ユーザーからの操作だけでは他の組織へのプロジェクト移行を行うことはできず、
サポートケースを上げて対応していただくことになりますが、 Google 側で対応していただける内容は
「プロジェクトを組織から外す（プロジェクトを組織なしの状態にする）」という部分になります。
組織なしの状態になったプロジェクトを、移行先の組織に組み入れる　という対応が必要になることを押さえておいてください。

# スケジュール感
移行に必要な期間は、事前準備の期間と、サポートケースのやり取りの期間の合計になります。

- 事前準備の期間
 - 事前準備は、使い方によって必要な期間が変わると思います。確認だけで済む場合でしたら1週間も見ておけばよいかと思いますが、重い設定変更が必要な場合などは数ヶ月程度の期間もあり得るかもしれません。内容については事前準備の項目で後述します。
- サポートケースのやり取りの期間
 - 私が対応したケースでは、サポートケースを上げてから組織が切り替わるまでにかかった期間は2営業日でした。事前の準備が足りていない場合など、やり取りが複雑になるともう少しかかるかもしれません。

## 複数のプロジェクトを移行する場合
複数プロジェクトを移行する際は、スケジュールが許せば、最初に1つのプロジェクトを移行した後に他のプロジェクトを移行してもよいかと思います。何かあった際に被害を最小限にすることができます。
1つのサポートケースで複数のプロジェクトを移行対応してもらうことも可能です。私が対応したケースではそうしました。


# 移行手順
それでは、ここから実際の移行の手順を記載していきます。

## 事前準備
Google のドキュメントに従い事前準備を進めます
https://cloud.google.com/resource-manager/docs/project-migration?hl=ja
これらの確認項目を事前に確認しておくことで、サポートケースを上げてからの実際の移行作業をスムーズに進めることができます。

確認すべきことが何項目か書かれていますが、これだけを見ると具体的に何をすべきか判断しづらい箇所もあるかもしれません。
いくつかピックアップして、私の対応したケースで確認した内容を記載します。


> ・すべての組織のポリシーを親リソースから継承するように設定します。これらのポリシーを前もって確認しておくことで、移行後にこれらのポリシーが与える影響を知ることができます。詳細については、下の組織のポリシーをご覧ください

- GCP のコンソールから「 IAM と管理」→「組織のポリシー」がすべて「継承」になっており、影響を与えそうな項目がないことを確認しました。


> ・新しいプロジェクト リソースの所有権を受け取れるように、移行先組織に関連するプライマリ ドメインのメール転送を設定します

> ・移行先組織リソースで必要となる IAM ロールを付与します。たとえば、roles/resourcemanager.projectCreator です。プロジェクトが移行先組織に移行した後で、継承されたすべてのロールが削除されます

- これらについては、予め移行先の「組織の管理者」の方に、プロジェクトのオーナー権限を付与するとスムーズに進むかと思います。
- IAM 関連では、後述しますが請求先アカウントの切り替えも発生しますので、移行先組織の請求アカウント管理者の方に、「プロジェクトの支払い管理者」を予め付けておくとスムーズに進むと思われます。

> ・ドメインで制限された共有を移行先組織で使用している場合は、移行元組織のリソースにアクセスできるドメインを移行先組織の許可リストに追加します

- GCP のコンソールから「 IAM と管理」→「組織のポリシー」内の項目「ドメインで制限された共有」が「継承」になっていることを確認しました。

> ・プロジェクト リソースがフォルダの下にある場合は、組織リソースの直下に移動します。プロジェクトがフォルダ リソースの子である場合は、プロジェクトを移行できません

- こちらは記載のとおりですが、プロジェクトを組織の直下に移しておきます。
移行元の「組織の管理者」に依頼し、設定してもらうことになるかと思います。

- その他
この他に、移行元と移行先の組織名と組織 ID が必要になりますので、予め調べておきます。


## サポートケースのやり取り
GCP コンソールからサポートケースを作成し、移行のためのやり取りを進めます。
弊社の利用しているサポートパッケージでは英語でのやり取りのみです。パッケージによっては日本語でも可能かと思います。
Google Cloud の担当営業やカスタマーエンジニアがついてくれている場合は、そちらへケース ID を共有します。何かあったときにバックアップを得られるかもしれません。
サポートケースのやり取りは以下のような手順で進みました。

- 移行元の組織管理者による移行の承認を行います　ケースの Cc に組織管理者を入れて、飛んだメールへの返信で組織管理者からメールを送信します。
 - 組織管理者がケースを作成すると、このあたりの手間がなくてよさそうかもです。
- サポート担当者により、事前準備で確認していた項目の確認を行います
 - 弊社で以前対応したケースでは移行の承認が先でしたので、ケースによって内容が前後するかもしれません。
- 上記の確認が問題なく完了し、準備ができると、サポート担当者から連携したスペシャリストチームの対応により、プロジェクトが組織から外れます。
- 移行先の組織の管理者により、移行先組織の配下にプロジェクトを紐付けます。
 - 移行先での対応はこちら
https://cloud.google.com/resource-manager/docs/migrating-projects-billing#migrating_projects_with_no_organization

以上で、他の組織へのプロジェクト移行は完了です。
他、いくつか必要になる/必要になる場合がある 対応の内容を書いておきます。

## OS Login 関連の設定
OS Login を利用していて、移行後も移行元組織のユーザーによる ssh ログインが必要な場合などに
組織外のユーザーにインスタンスへのアクセスを許可する必要があります。
下記の公式ドキュメントの手順が参考になります。予め移行先と認識を合わせておくと良さそうです。
https://cloud.google.com/compute/docs/oslogin/manage-oslogin-in-an-org?hl=ja#configure_users

権限周りの設定変更はユーザーへの反映に少し時間がかかることもありますので、少し時間を置くか、 GCP コンソールへログインし直してみるか、別途シークレットウインドウで新規ログインをしてから確認すると確実かと思います。

## 請求先アカウントの切り替え
移行先組織の、請求先アカウントの管理者による操作で、プロジェクトの請求先アカウントを切り替えます。
月またぎの0時ちょうどに切り替えられると、請求書が綺麗に分かれてよいかもしれません。
が、現実的には難しい場合もあるかと思いますので、営業時間中に切り替えてあとは請求処理などで対応できるとよいかと思います。


# おわりに
以上、他の組織へのプロジェクト移行について記載しましたが、もしかすると時間が経つと、事前の確認項目など、必要な対応内容が変化していく可能性もあるかと思います。
他の組織へのプロジェクト移行はなかなかインターネット上に事例などの情報も少なく、大変かもしれませんが、ぜひ頑張ってください！