こんにちは、Aireです。
今回はGoogle Cloudリソースを管理する「組織」の使い方として、組織の下に配置されていないプロジェクト(組織無しプロジェクト)を組織の下に移動する方法を紹介します。
組織の作成方法については、以下の記事を参考にしてください。

組織無しプロジェクトを組織の下に配置する(新しいユーザ・組織・請求先アカウントに切り替える)
本手順では、組織の下に配置されていないプロジェクトを新しい組織・組織の管理者・請求先アカウントと紐付けし、組織のドメインに属していない現ユーザと請求先アカウントのアクセス権限を削除します。
以下、手順の概要を記載します。

組織無しプロジェクトとリンクしている請求先アカウントに組織管理者を追加し、組織管理者によるアクセスを許可します。(請求方法が現状のままで良ければ、本ステップはスキップ可能です)
組織無しプロジェクトに組織管理者を追加し、当該プロジェクトへのアクセスを許可します。
組織のドメインに属していないユーザーアカウント(現ユーザ)の、現請求先アカウントに対するアクセス権限を削除します。(削除する必要がなければ、本ステップはスキップ可能です)
組織のドメインに属していないユーザーアカウント(現ユーザ)の、組織無しプロジェクトに対するアクセス権限を削除します。(削除する必要がなければ、本ステップはスキップ可能です)
アクセス権限の設定変更後、プロジェクトを組織の下に移行します。
プロジェクトの請求方法を変更します。(請求方法が現状のままで良ければ、本ステップはスキップ可能です)
なお、本手順は以下に記載するCloud Identityの公式ページを参考にしています。
現請求先アカウントに組織管理者を追加する
組織無しプロジェクトとリンクしている請求先アカウントに対して、組織管理者によるアクセスを許可します。
- 組織のドメインに属していない現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)でGoogle Cloudコンソールにログイン後、ナビゲーションメニューから[お支払い]-[アカウント管理]を選択します。画面右側に情報パネルが表示されていない場合、[情報パネルを表示]をクリックします。その後、[プリンシパルを追加]をクリックします。

- アクセス権を付与するユーザーアカウントを指定します。[新しいプリンシパル]欄に新ユーザ(組織管理者であるCloud Identityアカウント)のメールアドレスを入力後、[ロール]欄から「請求先アカウント管理者」を選択し、[保存]をクリックします。

プロジェクトに組織管理者を追加する
組織無しプロジェクトに新ユーザ(組織管理者であるCloud Identityアカウント)をオーナー
として追加します。
- 現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)でGoogle Cloudコンソールにログイン後、リソースとして移行対象のプロジェクトが選択された状態で、ナビゲーションメニューから[IAMと管理]-[IAM]を選択し、[アクセス権を付与]をクリックします。

- アクセス権を付与するユーザーアカウントを指定します。[新しいプリンシパル]欄に新ユーザ(組織管理者であるCloud Identityアカウント)のメールアドレスを入力後、[ロール]欄から
オーナー
を選択し、[保存]をクリックします。

- 新ユーザ(組織管理者であるCloud Identityアカウント)のメールアドレス宛に招待メールが届くので、招待メール内のURLをクリックし、招待を承諾します。

現ユーザの現請求先アカウントへのアクセス権限を削除する
新ユーザ(組織管理者であるCloud Identityアカウント)で組織無しプロジェクトにアクセスし、現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)の、請求先アカウントに対するアカウント権限を削除します。
- 新ユーザ(組織管理者であるCloud Identityアカウント)でGoogle Cloudコンソールにログイン後、ダッシュボードから組織無しプロジェクトを選択します。

- ナビゲーションメニューから[お支払い]-[アカウント管理]を選択し、現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)から[請求先アカウント管理者]ロールを削除します。

現ユーザのプロジェクトへのアクセス権限を削除する
前節に続き、現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)の、組織無しプロジェクトに対するアクセス権限を削除します。
- 新ユーザ(組織管理者であるCloud Identityアカウント)でナビゲーションメニューから[IAMと管理]-[リソースの管理]を選択し、組織無しプロジェクトにチェックを入れます。組織のドメインに属していないユーザーアカウントから[オーナー]ロールを削除します。

プロジェクトを新規組織の下に移行する
ここまででアクセス権限の設定が終わったので、プロジェクトを組織の下に移行します。
- 新ユーザ(組織管理者であるCloud Identityアカウント)で、[IAMと管理]-[リソースの管理](前節と同じ画面)上で組織無しプロジェクトにチェックを入れて、[移行]をクリックします。

- 移行先の組織を選択し、[移行]をクリックします。

- 組織無しプロジェクトが組織の下に移動したことを確認します。

プロジェクトの請求先アカウントを変更する
プロジェクトの請求先アカウントを変更し、新しい請求方法に切り替えます。
- 新ユーザ(組織管理者であるCloud Identityアカウント)でGoogle Cloud管理コンソールにログインした状態で、ナビゲーションメニューから[お支払い]を選択します。[マイプロジェクト]タブに移動し、対象プロジェクトの[お支払い情報を変更]をクリックします。

- [請求先アカウント]欄から新請求先アカウントを選択し、[アカウントを設定]をクリックします。

参考(組織管理者にメールアドレスを用意できない場合の代替手順)
本記事で紹介した手順は、GoogleサポートページのGoogle Cloud管理者向け設定手順 > Google Cloudコンソールを使用して設定手順を完了するを参考にしています。
上記手順では、新ユーザ(組織管理者であるCloud Identityアカウント)をプロジェクトのオーナーとして追加後、そのアクセス権限を利用して、新規組織の下にプロジェクトを移行していますが、組織無しプロジェクトにユーザー(オーナー権限)を追加する場合、そのユーザ宛にプロジェクトへの招待メールを送り、メール内のURLをクリックし招待を承諾してもらう必要があります。
そのため、新ユーザ(組織管理者であるCloud Identityアカウント)には組織と紐付けられたドメインを持つメールアドレスが必要になりますが、手順を変更することで新ユーザにメールアドレスがなくてもプロジェクトを移行することができますので参考までに共有します。(プロジェクトが組織配下のリソースになったためか、プロジェクトを組織の下に移動後、メールによる招待のステップを踏むことなく、そのプロジェクトに組織管理者をオーナー権限で追加することもできます)
以下、手順の概要です。(請求先アカウントの変更手順は省略しています)

組織のドメインに属していない現ユーザを新規組織の管理者(roles/resourcemanager.organizationAdmin
)およびプロジェクト作成者(roles/resourcemanager.projectCreator
)として追加します。
アクセス権限の設定変更後、プロジェクトを組織の下に移行します。
現ユーザを新規組織の管理者およびプロジェクト作成者として追加する
組織のドメインに属していない現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)を新規組織の管理者(roles/resourcemanager.organizationAdmin
)およびプロジェクト作成者(roles/resourcemanager.projectCreator
)として追加します。
- 新ユーザ(組織管理者であるCloud Identityアカウント)でGoogle Cloudコンソールにログイン後、ナビゲーションメニューから[IAMと管理]-[リソースの管理]を選択し、新規組織にチェックを入れて、[プリンシパルを追加]をクリックします。

- アクセス権を付与するユーザーアカウントを指定します。[新しいプリンシパル]欄に現ユーザのメールアドレスを入力後、[ロール]欄から「プロジェクト作成者」を選択し、[保存]をクリックします。

組織ポリシーの制約によって現ユーザへのロールの割り当てができない場合
2024年以降に新しく作成された組織リソースにはいくつかの制約が始めから有効化されており、その中の一つに、許可した組織(ドメイン)以外に属しているユーザへのロールの割り当てを制限する組織ポリシー(constraints/iam.allowedPolicyMemberDomains
)があります。
そのため、組織リソースの作成時期によっては、組織に属していない現ユーザにロールを割り当てようとする際に以下のようなエラーメッセージが表示されます。

これについてはconstraints/iam.allowedPolicyMemberDomains
の設定を変更し、組織に属していないユーザへのロールの割り当てを許可することで解決可能です。
以下、参考までにconstraints/iam.allowedPolicyMemberDomains
の設定を変更する方法を紹介します。なお、組織ポリシーの変更にあたっては組織ポリシー管理者
ロールが必要です。
- 新ユーザ(組織管理者であるCloud Identityアカウント)でGoogle Cloudコンソールにログインし、自身のアカウントに
組織ポリシー管理者
ロールを割り当てます。以降、新ユーザで作業を行います。 - [IAM と管理] > [組織のポリシー]に移動し、フィルタで
constraints/iam.allowedPolicyMemberDomains
を検索・選択します。

- [ポリシーを管理]をクリックします。

- 「ポリシーのソース」:
親のポリシーをオーバーライドする
を選択します。 - 「ポリシーの適用」:
置き換える
を選択し、親リソースから継承したポリシーを置き換えて新しいポリシーを作成します。

- 「ルール」:「ルールの追加」をクリック後、「ポリシーの値」として
すべて許可
を選択し、[完了]をクリックします。 - [ポリシーを設定]をクリックし、新しい組織ポリシーを適用します。

プロジェクトを新規組織の下に移行する
前節でアクセス権限の追加が完了したら、プロジェクトを組織の下に移行します。
- 現ユーザ(プロジェクトのオーナー権限を持つGoogleアカウント)でGoogle Cloudコンソールにログインし、[IAMと管理]-[リソースの管理](前節と同じ画面)上で、移行対象のプロジェクトにチェックを入れて、[移行]をクリックします。

- 移行先の組織を選択し、[移行]をクリックします。

以上、ここまで。