特殊なケースを処理する

このトピックでは、プロジェクトの移行中に関連する特殊なケースの処理について説明します。

組織リソースのないプロジェクトの移行

組織リソースに関連付けられていないプロジェクトは、他の組織リソースに移行できます。ただし、このプロセスを使用して [組織なし] に戻すことはできません。組織リソースに関連付けられたプロジェクトがあり、[組織なし] に戻す場合は、サポート担当者にお問い合わせください。

プロジェクトの親組織リソースに対する resourcemanager.organizations.get 権限がない場合、プロジェクトが想定された実際の組織のもとで反映されていない可能性があります。詳細については、ユーザーのプロジェクト公開設定の制限をご覧ください。

組織リソースに関連付けられていないプロジェクトを移行するプロセスは、組織リソース間でプロジェクトを移行するプロセスと類似していますが、移行計画にかかわるすべての手順が必要になるわけではありません。プロジェクトを組織リソースに移行するには、次の手順に沿って操作する必要があります。

  1. 継承されるポリシーがこのプロジェクトに与える影響を確認してください。

  2. 必要に応じて、移行先の組織リソースに専用のインポート フォルダを作成します。

  3. 権限を割り当てるで詳しく説明しているように、プロジェクトと宛先の親に Identity and Access Management の権限を割り当てます。

  4. 請求先アカウントを変更する必要があるかどうかを確認します。

その後で、移行を実施できます。

コンソール

組織リソースにプロジェクトを移行するには:

  1. Google Cloud コンソールで [IAM と管理] > [設定]ページを開きます。

    [設定] ページを開く

  2. ページの上部にあるプロジェクト選択ツールを選択します。

  3. 組織選択ツールから、[組織なし] を選択します。組織リソースに関連付けられていない場合は、組織選択ツールは表示されないため、この手順は省略できます。

  4. 移行するプロジェクトを選択します。

    プロジェクト選択ツールのスクリーンショット

  5. ページの上部にある [移行] をクリックします。

  6. [組織] プルダウン リストで、プロジェクトの移行先となる組織リソースを選択します。

gcloud

組織リソースにプロジェクトを移行するには、以下のコマンドを実行します。

gcloud beta projects move PROJECT_ID \
    --organization ORGANIZATION_ID

ここで

  • PROJECT_ID は、組織リソースに移行するプロジェクトの ID です。
  • ORGANIZATION_ID は、プロジェクトの移行先となる組織リソースの ID です。

API

Resource Manager API を使用して、parent フィールドを組織リソースの組織リソース ID に設定することで、組織リソースにプロジェクトを移行できます。

組織リソースにプロジェクトを移行するには:

  • projects.get() メソッドを使用して project オブジェクトを取得します。
  • parent フィールドを組織リソースの組織リソース ID に設定します。
  • projects.update() メソッドを使用して、project オブジェクトを更新します。

設定した parent フィールドは変更できません。

次のコード スニペットは、上記の手順を示しています。

    project = crm.projects().get(projectId=flags.projectId).execute()
    project['parent'] = {
        'type': 'organization',
        'id': flags.organizationId
    }

ソース プロジェクトで OS Login が有効になっている場合は、そのプロジェクトにアクセスできるプリンシパルに roles/compute.osLoginExternalUser ロールを割り当てる必要があります。

共有 VPC

共有 VPC プロジェクトは、次の特定の条件に従って移行できます。まず、ソース組織の roles/orgpolicy.policyAdmin ロールを持つユーザーは、エクスポート対象プロジェクトの親に対する constraints/resourcemanager.allowEnabledServicesForExport 制約を含む組織のポリシーを設定する必要があります。この制約により、SHARED_VPCallowed_value として表示されるはずです。

移行前に共有 VPC を無効にする必要はありません。ただし、共有 VPC ホスト プロジェクトを最初に移行してから、そのサービス プロジェクトのすべてを移行する必要があります。ソースとターゲットの場所にある組織リソース間でファイアウォール ルールを一致させることをお勧めします。これにより、潜在的な問題を最小限に抑え、移行中のプロジェクトとネットワークのダウンタイムを回避できます。一部のサービスプロジェクトをソース組織に無期限に残し、他のプロジェクトを移行した場合、ネットワークの健全性は保証されません。

ホスト プロジェクトを移行すると、移行元の組織リソースに戻すことができます。ホスト プロジェクトとサービス プロジェクトが異なる組織に存在できる期限は厳密に決まっていません。ただし、サービス プロジェクトの移行を開始する場合は、ホスト プロジェクトが再び移行できるようになる前に、すべてのプロジェクトを移行する必要があります。

Identity and Access Management のカスタムロール

Identity and Access Management のカスタムロールを組織レベルで作成して、リソースへのアクセス権をきめ細かく管理できますが、これはそのロールを作成した組織リソース内でのみ有効です。ユーザーの IAM ポリシー バインディングを含むプロジェクトを組織レベルのカスタム IAM ロールに移行しようとすると、移行に失敗します。失敗は、前提条件でのエラーによるもので、移行先の組織リソースに対象のロールが存在しないことが説明されます。

組織リソースレベルですべてのカスタム IAM ロールを一覧表示するには、次の Google Cloud CLI のコマンドを実行します。

gcloud iam roles list --organization ORGANIZATION_ID

ORGANIZATION_ID は、ロールを一覧表示する組織リソース ID です。組織リソース ID を検出する方法については、組織リソースの作成と管理をご覧ください。

組織リソース内のカスタムの Identity and Access Management ロールに関する情報を取得するには、次の Google Cloud CLI コマンドを実行します。

gcloud iam roles describe --organization ORGANIZATION_ID \
    ROLE_ID

ここで

  • ORGANIZATION_ID は、ロールの親組織リソースの組織リソース ID です。

  • ROLE_ID は、説明するロールの名前です。

前提条件でのエラーによる失敗を回避するには、プロジェクトが継承する組織レベルのカスタムロールごとに、同等のプロジェクト レベルのカスタムロールを作成する必要があります。次に、組織レベルのカスタムロールを参照する IAM ロール バインディングを削除します。

プロジェクトの移行後、IAM ポリシーを更新して、移行先組織リソースで組織レベルのカスタムロールを使用できます。

カスタムロールの詳細については、カスタムロールの作成と管理をご覧ください。

バケットロック

Cloud Storage のバケットロック を使用すると、Cloud Storage バケットのデータ保持ポリシーを構成して、バケット内のオブジェクトを保持する期間を管理できます。バケットロックは、リーエンを使用して保護され、プロジェクトが誤って削除されるのを防止します。

保持ポリシーとリーエンは移行中もプロジェクトに保持されますが、バケットロックが適用されているプロジェクトを移行する場合は、誤って移行しないように注意してください。

VPC Service Controls のセキュリティ境界

VPC Service Controls を使用すると、Google Cloud サービスにプロジェクト ベースのセキュリティ境界を設定して、データの引き出しのリスクを軽減できます。VPC Service Controls のセキュリティ境界で保護されているプロジェクトは移行できません。

セキュリティ境界からプロジェクトを削除するには、サービス境界の管理をご覧ください。VPC Service Controls の境界内のプロジェクトは、組織リソース間での移行がブロックされないようにする必要があります。このガイドラインは、境界が作成または更新されてから 1 日間以内に適用されます。プロジェクトがサービス境界から削除されてから移行可能になるまでに数時間かかることがあります。

Dedicated Interconnect

Dedicated Interconnect オブジェクトを使用するプロジェクトと VLAN アタッチメントを使用するプロジェクトは一緒に移行することをおすすめします。Dedicated Interconnect オブジェクトまたはこれらのオブジェクトに接続された VLAN アタッチメントを持つプロジェクトは、組織リソース間の移行後も引き続き機能します。唯一の制限は、組織リソースのスプリット間で新しい VLAN アタッチメントを作成できないことです。

Dedicated Interconnect オブジェクトに接続されている組織リソースまたはこのオブジェクトへの VLAN アタッチメントを持つ組織リソースのプロジェクトに加えられた構成変更は、他の組織リソースに反映されない場合があります。可能であれば、そのようなプロジェクトを組織リソース間で長期にわたり分割したままにしないことをお勧めします。

Partner Interconnect

Partner Interconnect を使用してプロジェクトを移行する場合、特別な考慮事項はありません。

プロジェクト間のサービス アカウント

プロジェクト間のサービス アカウントの移行のコンテキストでは、次のケースが適用されます。

  • プロジェクト間のサービス アカウントが付加されているプロジェクトを移行する場合、そのサービス アカウントは移行先の組織リソースで引き続き機能します。そのプロジェクトのドメインを制限する組織ポリシーがある場合でも、そのプロジェクトは、不可されたサービス アカウントを使って引き続き動作します。
  • 移行元組織リソースの別のプロジェクトに付加されているプロジェクト間サービス アカウントを持つプロジェクトを移行する場合、そのサービス アカウントは移行先の組織リソースで引き続き機能します。ただし、移行元組織リソースのドメインに制限するドメイン制限の組織ポリシーが適用されているリソースでは、サービス アカウントを使用できません。

たとえば、organizations/12345678901project-A があるとします。このプロジェクトには serviceAccount-1 が接続されており、プロジェクト間サービス アカウントとして設定されています。project-Bproject-Corganizations/12345678901 にあるため、同様に serviceAccount-1 を使用します。

ドメイン制限の制約を含む組織のポリシーを project-C に適用したため、organizations/12345678901. のドメインのみにアクセスが許可されます。

project-C の IAM バインディングに serviceAccount-1 を追加し、project-Aorganizations/45678901234 に移行すると、サービス アカウントが機能するようになります。

project-Aorganizations/45678901234 に移行し、serviceAccount-1project-C の IAM バインディングに追加しようとすると、バインディングがドメイン制限制約に違反するため、そのバインディングは失敗します。

サポートケース

未解決のサポート記録があるプロジェクトを移行する場合は、Google サポートに連絡して、移行が発生したことを通知する必要があります。Google で未解決のサポート記録があるプロジェクトでは、Google サポートがケース メタデータを新しい組織リソースを指すように更新するまで、そのサポート記録は表示されません。

内部 OAuth 同意画面を使用するようにプロジェクトを構成し、画面を別の組織リソースに移行した場合は、移管先組織リソースのメンバーのみがリクエストを承認できます。この動作が有効になるまでに、最大で 24 時間を要する場合があります。それまでは、移行元の組織リソースのメンバーがリクエストを承認できます。

以下の手順では、移行元組織リソースのメンバーが移行中にアクセス権を失うことがないようにする方法を説明します。OAuth 同意画面の構成を変更する必要がないよう、組織リソース メンバーの移行先の組織リソースに新しいユーザーを作成することを検討してください。

移行元組織リソース内のユーザーがアクセス権を失うことを回避するには:

  1. OAuth 同意画面の設定を内部設定ではなく外部設定に更新します。

  2. 内部としてマーク付けされ、機密データを使用しているアプリは、アプリの確認を申請する必要はありません。アプリが機密データを使用している場合、同意画面が外部に更新されると、移行元組織リソースのユーザーには、認証画面の前に未確認アプリ画面が表示されます。これを回避するには、機密性の高いスコープまたは制限されたスコープの使用に対してアプリの確認を申請します。

OS ログイン

ソース プロジェクトで OS Login が有効になっている場合は、そのプロジェクトにアクセスできるプリンシパルに roles/compute.osLoginExternalUser ロールを割り当てる必要があります。これにより、プリンシパルが移行先の組織リソースでアクセス権を失いません。

仮想マシン(VM)インスタンスの共有予約

共有予約では、予約を作成したプロジェクト(オーナー プロジェクト)または(コンシューマ プロジェクト)で予約を共有するプロジェクトで、VM インスタンスを作成して予約を使用できます。予約を共有できるのは、オーナー プロジェクトと同じ組織内のプロジェクトのみです。

オーナー プロジェクトまたはコンシューマ プロジェクトを別の組織に移行すると、次のようになります。

  • オーナー プロジェクトを別の組織に移行すると、オーナー プロジェクトによって作成された予約は Compute Engine によってすべて削除されます。実行中の VM インスタンスは影響を受けません。
  • コンシューマ プロジェクトを別の組織に移行すると、コンシューマ プロジェクトは前の組織の共有予約からのリソースを消費しなくなります。

詳細については、共有予約の仕組みをご覧ください。

サービス アカウントとリソースの関連付け

ほとんどの Google Cloud サービスでは、サービス アカウントをリソースに関連付けるには、ユーザーにサービス アカウントに対する iam.serviceAccounts.actAs 権限が必要です。ただし、以前には、特定のサービスのオンボーディングを簡易にする目的で、ユーザーがサービス アカウントの権限借用をする権限を持たない場合であっても、ユーザーがサービス アカウントをリソースに関連付けることを許可していました。詳しくは、サービス アカウントをリソースに関連付ける権限を要求するをご覧ください。

お客様の移行元の組織リソースに従来の動作があり(通常のロール付与がなくてもサービス アカウント の関連付けが可能)、移行先の組織リソースにそれらの動作がない場合は、これらのサービス アカウントをリソースに関連付けるユーザーに対して、サービス アカウント ユーザーのロール(roles/iam.serviceAccountUser)を付与します。サービス アカウントをリソースに関連付けるために必要な権限については、サービス アカウントの認証に必要なロールをご覧ください。

組織リソースで従来の挙動があるかどうかを確認するには、次のとおりにします。

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] ページに移動

  2. ページの上部にあるプロジェクト セレクタから、以前の状態であるかを確認する組織リソースを選択します。

  3. 組織のポリシーリストの上部にあるフィルタ ボックスに、「constraints/appengine.enforceServiceAccountActAsCheck」と入力します。

  4. appengine.enforceServiceAccountActAsCheck 組織ポリシーがリストに表示されている場合、組織リソースには以前の動作が存在します。

  5. 次の組織のポリシーの制約ごとに、ステップ 3 と 4 を繰り返します。

    • appengine.enforceServiceAccountActAsCheck
    • dataflow.enforceComputeDefaultServiceAccountCheck
    • dataproc.enforceComputeDefaultServiceAccountCheck
    • composer.enforceServiceAccountActAsCheck
  6. これらの組織ポリシーの制約のいずれかが表示された場合は、組織リソースでレガシー動作を使用します。

移行元の組織リソースに以前の動作があり、移行先に同じ動作がない場合は、上に記載したロールを付与します。移行元と移行先の組織リソースにすでに従来の動作がある場合は、何も操作する必要はありませんが、意図しないなりすましを回避するため、ポリシーの適用を検討してください。

Analytics Hub を使用したプロジェクトの移行

Analytics Hub を使用しているプロジェクトを別の組織リソースに移行すると、エラーが発生する可能性があります。エラーを解決するには、サポートにお問い合わせください

古い組織のデータ エクスチェンジ リソースが新しい組織の Analytics Hub 管理者ページに表示されない場合は、Analytics Hub API を使用して新しい組織のデータ エクスチェンジ を更新します。

projects.locations.dataExchanges.patchメソッドを使用します。

PATCH https://analyticshub.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/dataExchanges/DATA_EXCHANGE_ID?update_mask=UPDATE_DX_FIELD -d { UPDATE_DX_FIELD:UPDATE_DX_VALUE }

次のように置き換えます。

  • PROJECT_ID はプロジェクトの一意の識別子です。
  • LOCATION はデータ エクスチェンジのロケーションです。
  • DATA_EXCHANGE_ID はデータ エクスチェンジの ID です。
  • UPDATE_DX_FIELD は更新するフィールドです。
  • UPDATE_DX_VALUE は、フィールドの更新後の値です。

バックアップと DR サービスを使用したプロジェクトの移行

プロジェクトを別の組織リソースに移行する前に、バックアップと DR サービスを無効にする必要があります。サービスが無効になっているときに、サービス停止のリスクを考慮する必要があります。新しい組織リソースへの移行が完了したら、バックアップと DR サービスを再度有効にする必要があります。

次のステップ

移行方法については、移行を実行するをご覧ください。