VPC Service Controls
VPC Service Controls を使用すると、組織は Google Cloud リソースの周囲に境界を定義して、データ漏洩のリスクを軽減できます。VPC Service Controls により、明示的に指定するサービスのリソースとデータを保護する境界を作成します。
バンドルされた Firestore サービス
VPC Service Controls には、次の API がバンドルされています。
firestore.googleapis.com
datastore.googleapis.com
firestorekeyvisualizer.googleapis.com
境界で firestore.googleapis.com
サービスを制限すると、境界によって datastore.googleapis.com
サービスと firestorekeyvisualizer.googleapis.com
サービスも制限されます。
datastore.googleapis.com
サービスを制限する
datastore.googleapis.com
サービスは、firestore.googleapis.com
サービスの下にバンドルされています。datastore.googleapis.com
サービスを制限するには、firestore.googleapis.com
サービスを次のように制限する必要があります。
- Google Cloud コンソールを使用してサービス境界を作成するときに、Firestore を制限付きサービスとして追加します。
-
Google Cloud CLI を使用してサービス境界を作成する場合は、
datastore.googleapis.com
ではなくfirestore.googleapis.com
を使用します。--perimeter-restricted-services=firestore.googleapis.com
Datastore 用の App Engine の以前のバンドル サービス
Datastore 用の App Engine レガシー バンドル サービス はサービス境界をサポートしていません。Datastore サービスをサービス境界で保護すると、App Engine のレガシー バンドル サービスからのトラフィックがブロックされます。レガシー バンドル サービスには以下が含まれます。
- App Engine API を使用した Java 8 Datastore
- Datastore 用 Python 2 NDB クライアント ライブラリ
- App Engine API を使用した Go 1.11 Datastore
インポート オペレーションおよびエクスポート オペレーションの下り(外向き)の保護
Firestore は VPC Service Controls をサポートしていますが、インポートとエクスポートのオペレーションで完全な下り(外向き)保護を取得するには追加の構成が必要です。デフォルトの App Engine サービス アカウントを使用する代わりに、Firestore サービス エージェントを使用してインポートとエクスポートのオペレーションを承認する必要があります。次の手順に沿って、インポート オペレーションとエクスポート オペレーションの認可アカウントを表示して構成します。
Firestore サービス エージェント
Firestore は、App Engine サービス アカウントを使用する代わりに、Firestore サービス エージェントを使用してインポートとエクスポートのオペレーションを承認します。サービス エージェントとサービス アカウントは、次の命名規則を使用します。
- Firestore サービス エージェント
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Firestore では、以前は Firestore サービス エージェントの代わりに App Engine のデフォルトのサービス アカウントを使用していました。データベースが依然として App Engine サービス アカウントを使用してデータをインポートまたはエクスポートしている場合は、このセクションの手順に沿って Firestore サービス エージェントの使用に移行することをおすすめします。
- App Engine サービス アカウント
PROJECT_ID@appspot.gserviceaccount.com
Firestore サービス エージェントは Firestore に固有であるため、Firestore サービス エージェントをおすすめします。App Engine サービス アカウントは、複数のサービスで共有されます。
承認アカウントを表示する
リクエストを承認するためにインポートとエクスポートのオペレーションで使用するアカウントは、Google Cloud コンソールの [インポート / エクスポート] ページで確認できます。データベースが、すでに Firestore サービス エージェントを使用しているかどうかも確認できます。
-
Google Cloud コンソールで [データベース] ページに移動します。
- データベースのリストから、必要なデータベースを選択します。
-
ナビゲーション メニューで [インポート / エクスポート] をクリックします。
- [インポート / エクスポート ジョブの実行方法] ラベルの横にある承認アカウントを表示します。
プロジェクトで Firestore サービス エージェントを使用していない場合は、次のいずれかの方法で Firestore サービス エージェントに移行できます。
- Cloud Storage バケットの権限を確認して更新することで、プロジェクトを移行する(推奨)。
- 組織内のすべてのプロジェクトに適用される組織全体のポリシー制約を追加します。
1 番目は、単一の Firestore プロジェクトに効果の範囲をローカライズするため、望ましい方法です。2 番目の方法は、既存の Cloud Storage バケットの権限を移行しないため、推奨しません。ただし、組織レベルでのセキュリティ コンプライアンスは実現します。
Cloud Storage バケットの権限を確認および更新して移行する
移行プロセスには次の 2 つの手順があります。
- Cloud Storage バケットの権限を更新します。詳細は以下で説明します。
- Firestore サービス エージェントへの移行を確認します。
サービス エージェント バケットの権限
別のプロジェクトの Cloud Storage バケットを使用するエクスポートまたはインポート オペレーションの場合は、そのバケットに対する Firestore サービス エージェント権限を付与する必要があります。たとえば、データを別のプロジェクトに移動するオペレーションは、その別のプロジェクト内のバケットにアクセスする必要があります。そうでないと、これらのオペレーションは Firestore サービス エージェントへの移行後に失敗します。
同じプロジェクト内にあるインポートとエクスポートのワークフローでは、権限の変更は必要ありません。デフォルトでは、Firestore サービス エージェントは同じプロジェクト内のバケットにアクセスできます。
他のプロジェクトの Cloud Storage バケットの権限を更新して、service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
サービス エージェントへのアクセスを許可します。サービス エージェントに Firestore Service Agent
ロールを付与します。
Firestore Service Agent
ロールでは、Cloud Storage バケットに対する読み取り権限と書き込み権限が付与されます。読み取り権限のみ、または書き込み権限のみを付与する必要がある場合は、カスタムロールを使用してください。
次のセクションで説明する移行プロセスは、権限の更新が必要な可能性のある Cloud Storage バケットの特定に役立ちます。
プロジェクトを Firestore サービス エージェントに移行する
App Engine サービス アカウントから Firestore サービス エージェントに移行するには、次の手順を行います。完了すると、移行は元に戻せません。
-
Google Cloud コンソールで [データベース] ページに移動します。
- データベースのリストから、必要なデータベースを選択します。
-
ナビゲーション メニューで [インポート / エクスポート] をクリックします。
-
プロジェクトがまだ Firestore サービス エージェントに移行していない場合は、移行を説明するバナーと [バケットのステータスを確認] ボタンが表示されます。次の手順では、潜在的な権限エラーを特定して修正します。
[バケットのステータスを確認] をクリックします。
移行を完了するためのオプションと Cloud Storage バケットのリストが記載されたメニューが表示されます。リストの読み込みが完了するまで数分かかることがあります。
このリストには、インポートとエクスポートのオペレーションで最近使用されたバケットが含まれていますが、Firestore サービス エージェントへの読み取りと書き込みの権限は付与されていません。
- プロジェクトの Firestore サービス エージェントのプリンシパル名をメモします。サービス エージェント名は、[アクセス権を付与するサービス エージェント] ラベルの下に表示されます。
-
リスト内のバケットのうち、今後のインポートまたはエクスポート オペレーションに使用する場合は、次の手順を行います。
-
このバケットの表の行で [修正] をクリックします。そのバケットの権限ページが新しいタブで開きます。
- [追加] をクリックします。
- [新しいプリンシパル] フィールドに、Firestore サービス エージェントの名前を入力します。
- [ロールを選択] フィールドで、[サービス エージェント] > [Firestore サービス エージェント] の順に選択します。
- [保存] をクリックします。
- Firestore のインポート / エクスポート ページがあるタブに戻ります。
- リスト内の他のバケットについて、上記の手順を繰り返します。リストのすべてのページを表示してください。
-
-
[Firestore サービス エージェントに移行] をクリックします。権限チェックに失敗したバケットがまだある場合は、[移行] をクリックして移行を確認する必要があります。
移行が完了するとアラートが表示されます。移行は元に戻せません。
移行ステータスを表示する
プロジェクトの移行ステータスを確認するには:
-
Google Cloud コンソールで [データベース] ページに移動します。
- データベースのリストから、必要なデータベースを選択します。
-
ナビゲーション メニューで [インポート / エクスポート] をクリックします。
-
[インポート / エクスポート ジョブの実行方法] ラベルの横にあるプリンシパルを探します。
プリンシパルが
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
の場合、プロジェクトはすでに Firestore サービス エージェントに移行されています。移行は元に戻せません。プロジェクトが移行されていない場合は、[バケットのステータスを確認] ボタンでページ上部にバナーが表示されます。移行を完了するには、Firestore サービス エージェントに移行するをご覧ください。
組織全体のポリシーの制約を追加する
-
組織のポリシーに次の制約を設定します。
インポート / エクスポート用に必要な Firestore サービス エージェント(
firestore.requireP4SAforImportExport
)この制約により、インポートおよびエクスポート操作では、Firestore サービス エージェントを使用してリクエストを承認する必要があります。 この制約を設定するには、組織のポリシーの作成と管理をご覧ください。
この組織のポリシー制約を適用しても、Firestore サービス エージェントに適切な Cloud Storage バケット権限が自動的に付与されることはありません。
制約によってインポートまたはエクスポートのワークフローの権限エラーが発生した場合は、デフォルトのサービス アカウントを使用して制約を無効にし、元に戻すことができます。Cloud Storage バケットの権限を確認および更新した後、制約を再び有効にできます。