IAM

Google Cloud には Identity and Access Management(IAM)機能があり、特定の Google Cloud リソースに対するアクセス権を詳細に設定できるため、他のリソースへの不要なアクセスを防ぐことができます。このページでは、Datastore モードの Firestore の IAM ロールについて説明します。IAM の詳細については、IAM のドキュメントを参照してください。

IAM を使用すると、最小限の権限のセキュリティ原則を導入できるため、リソースに対する必要なアクセス権のみ付与できます。

IAM では、IAM ポリシーを設定して、誰(どのユーザー)に、どのリソースに対するどのアクセス権(役割)を付与するかを制御することができます。IAM ポリシーは、特定のロールをユーザーに付与することで、そのユーザーに特定の権限を付与します。たとえば、ユーザーに datastore.indexAdmin のロールを付与されたユーザーは、インデックスの作成、変更、削除、一覧表示、表示を行うことができます。

権限とロール

ここでは、Datastore モードの Firestore でサポートされる権限とロールを簡単に説明します。

権限

次の表に、Datastore モードの Firestore でサポートされる権限を示します。

データベースの権限名 説明
datastore.databases.export データベースからエンティティをエクスポートします。
datastore.databases.get トランザクションを開始またはロールバックします。
空のミューテーションを使用して commit します。
datastore.databases.import データベースにエンティティをインポートします。
datastore.databases.getMetadata データベースからメタデータを読み取ります。
datastore.databases.list プロジェクト内のデータベースを一覧表示します。
datastore.databases.create データベースを作成します。
datastore.databases.update データベースを更新します。
datastore.databases.delete データベースを削除します。
datastore.databases.createTagBinding データベースのタグ バインディングを作成します。
datastore.databases.deleteTagBinding データベースのタグ バインディングを削除します。
datastore.databases.listTagBindings データベースのすべてのタグ バインディングを一覧表示します。
datastore.databases.listEffectiveTagBindings データベースの有効なタグ バインディングを一覧表示します。
エンティティの権限名 説明
datastore.entities.allocateIds 不完全なキーパスを使用して、キーの ID を割り当てます。
datastore.entities.create エンティティを作成します。
datastore.entities.delete エンティティを削除します。
datastore.entities.get エンティティを読み取ります。
datastore.entities.list プロジェクト内のエンティティのキーを一覧表示します。
(エンティティ データへのアクセスには datastore.entities.get が必要です。)
datastore.entities.update エンティティを更新します。
インデックスの権限名 説明
datastore.indexes.create インデックスを作成します。
datastore.indexes.delete インデックスを削除します。
datastore.indexes.get インデックスからメタデータを読み取ります。
datastore.indexes.list プロジェクト内のインデックスを一覧表示します。
datastore.indexes.update インデックスを更新します。
名前空間の権限名 説明
datastore.namespaces.get 名前空間からメタデータを取得します。
datastore.namespaces.list プロジェクト内の名前空間を一覧表示します。
オペレーションの権限名 説明
datastore.operations.cancel 長時間実行オペレーションをキャンセルします。
datastore.operations.delete 長時間実行オペレーションを削除します。
datastore.operations.get 長時間実行オペレーションの最新の状態を取得します。
datastore.operations.list 長時間実行オペレーションを一覧表示します。
プロジェクトの権限名 説明
resourcemanager.projects.get プロジェクト内のリソースを参照します。
resourcemanager.projects.list 所有するプロジェクトをリスト表示します。
統計情報の権限名 説明
datastore.statistics.get 統計情報のエンティティを取得します。
datastore.statistics.list 統計情報のエンティティのキーを一覧表示します。
(統計情報のエンティティ データへのアクセスには datastore.statistics.get が必要です。)
App Engine の権限名 説明
appengine.applications.get すべての App Engine アプリケーション構成に読み取り専用でアクセスします。
ロケーションの権限名 説明
datastore.locations.get データベースの場所の詳細を取得します。新しいデータベースの作成に必要です。
datastore.locations.list 使用可能なデータベースの場所を一覧表示します。新しいデータベースの作成に必要です。
Key Visualizer の権限名 説明
datastore.keyVisualizerScans.get Key Visualizer スキャンの詳細を取得します。
datastore.keyVisualizerScans.list 使用可能な Key Visualizer スキャンを一覧表示します。
バックアップ スケジュールの権限名 説明
datastore.backupSchedules.get バックアップ スケジュールの詳細情報を取得します。
datastore.backupSchedules.list 使用可能なバックアップ スケジュールを一覧表示します。
datastore.backupSchedules.create バックアップ スケジュールを作成する
datastore.backupSchedules.update バックアップ スケジュールを更新する
datastore.backupSchedules.delete バックアップ スケジュールを削除する
バックアップの権限名 説明
datastore.backups.get バックアップの詳細情報を取得します。
datastore.backups.list 利用可能なバックアップを一覧表示します。
datastore.backups.delete バックアップを削除します。
datastore.backups.restoreDatabase バックアップからデータベースを復元します。

事前定義ロール

IAM では、Datastore のすべての API メソッドで、API リクエストを行うアカウントがリソースの使用に必要な権限を保持していることが要求されます。権限を付与するには、ユーザー、グループ、またはサービス アカウントにロールを付与するポリシーを設定します。オーナー、編集者、閲覧者という基本ロール以外に、Datastore モードの Firestore のロールをプロジェクトのユーザーに付与できます。

次の表に、Datastore モードの Firestore の IAM ロールを示します。1 つのユーザー、グループ、またはサービス アカウントに複数のロールを付与できます。

ロール 権限 説明
roles/datastore.owner appengine.applications.get
datastore.*
resourcemanager.projects.get
resourcemanager.projects.list
データベース インスタンスへの完全アクセス権。
Datastore Adminのアクセス権については、appengine.appAdmin ロールをプリンシパルに付与します。
roles/datastore.user appengine.applications.get
datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list
resourcemanager.projects.get
resourcemanager.projects.list
Datastore モード データベース内のデータへの読み取り、書き込みアクセス権。アプリケーション デベロッパーとサービス アカウント向け。
roles/datastore.viewer appengine.applications.get
datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.indexes.get
datastore.indexes.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list
resourcemanager.projects.get
resourcemanager.projects.list
すべての Datastore モード データベース リソースへの読み取りアクセス権。
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
インポートとエクスポートを管理するための完全アクセス権。
roles/datastore.indexAdmin appengine.applications.get
datastore.databases.getMetadata
datastore.indexes.*
resourcemanager.projects.get
resourcemanager.projects.list
インデックスの定義を管理する完全アクセス権
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
Key Visualizer スキャンに対する完全アクセス権。
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
Datastore モード データベースのバックアップ スケジュールに対する読み取りアクセス権。
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
Datastore モード データベースのバックアップ スケジュールに対する完全アクセス権。
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Datastore モードのロケーション内のバックアップ情報への読み取りアクセス権。
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Datastore モードのロケーション内のバックアップへの完全アクセス権。
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Datastore モードのバックアップを新しいデータベースに復元する機能。また、このロールによって、新しいバックアップを作成できるようになります。バックアップから復元する必要はありません。

カスタムの役割

事前定義された役割がお客様のビジネス要件に合っていない場合は、任意に指定した権限を含むカスタムの役割を独自に定義できます。

API メソッドに必要な権限

発信者が各メソッドを呼び出す際に必要となる権限のリストを次の表に示します。

メソッド 必要な権限
allocateIds datastore.entities.allocateIds
beginTransaction datastore.databases.get
空のミューテーションを含む commit datastore.databases.get
insert の commit datastore.entities.create
upsert の commit datastore.entities.create
datastore.entities.update
update の commit datastore.entities.update
delete の commit datastore.entities.delete
lookup の commit datastore.entities.get

メタデータまたは統計情報に関連する検索の場合には、メタデータと統計情報に必要な権限をご覧ください。
query の commit datastore.entities.list
datastore.entities.get(クエリがキーのみのクエリではない場合)

メタデータまたは統計情報に関連するクエリの場合には、メタデータと統計情報に必要な権限をご覧ください。
lookup datastore.entities.get

メタデータまたは統計情報に関連する検索の場合には、メタデータと統計情報に必要な権限をご覧ください。
rollback datastore.databases.get
runQuery datastore.entities.list
datastore.entities.get(クエリがキーのみのクエリではない場合)

メタデータまたは統計情報に関連するクエリの場合には、メタデータと統計情報に必要な権限をご覧ください。
種類を指定しないクエリrunQuery datastore.entities.get
datastore.entities.list
datastore.statistics.get
datastore.statistics.list

メタデータと統計情報に必要な権限

次の表に、メタデータ統計情報に関するメソッドを呼び出す際に必要な権限を示します。

メソッド 必要な権限
__Stat_*__ 一致する種類名を持つエンティティの lookup datastore.statistics.get
__Stat_*__ と一致する名前の種類を使用する runQuery datastore.statistics.get
datastore.statistics.list
種類 __namespace__ を使用する runQuery datastore.namespaces.get
datastore.namespaces.list

Datastore モード データベース インスタンスを作成するために必要な役割

新しい Datastore モード データベース インスタンスを作成するには、オーナーのロールまたは Datastore オーナーのロールが必要です。

Datastore モード データベースではアクティブな App Engine アプリケーションが必要です。プロジェクトにアプリケーションがない場合は、Datastore モードの Firestore によりアプリケーションが作成されます。その場合、appengine.applications.create 権限(オーナーのロールまたは IAM カスタムロールに含まれている権限)が必要です。

ロール変更のレイテンシ

Datastore モードの Firestore は IAM 権限を 5 分間キャッシュに保存します。そのため、ロールの変更が反映されるまでに最大で 5 分かかります。

IAM の管理

IAM ポリシーは、Google Cloud Console、IAM メソッド、Google Cloud CLI を使用して取得と設定ができます。

条件付きアクセス権限を構成する

IAM Conditions を使用して、条件付きアクセス制御を定義して適用できます。

たとえば、次の条件では、指定した日付までプリンシパルに datastore.user ロールが割り当てられます。

{
  "role": "roles/datastore.user",
  "members": [
    "user:travis@example.com"
  ],
  "condition": {
    "title": "Expires_December_1_2023",
    "description": "Expires on December 1, 2023",
    "expression":
      "request.time < timestamp('2023-12-01T00:00:00.000Z')"
  }
}

一時的なアクセス権の IAM Conditions を定義する方法については、一時的なアクセス権を構成するをご覧ください。

1 つ以上のデータベースにアクセスするための IAM Conditions を構成する方法については、データベース アクセス条件を構成するをご覧ください。

次のステップ