IAM による Bigtable のアクセス制御
このページでは、Bigtable のアクセス制御オプションについて説明します。
概要
Bigtable は、Identity and Access Management(IAM)を使用してアクセス制御を行います。誰がどのリソースにどのようなアクセス権を持つかを制御するには、リソースに IAM ポリシーを設定します。
Bigtable リソースは階層で整理されています。Google Cloud プロジェクトは Bigtable インスタンスの親であり、Bigtable インスタンスはクラスタとテーブルの親です。テーブルはその承認済みビューの親であり、クラスタはそのバックアップの親です。アクセス制御は各レベルで構成できます。
あるレベルの権限を持っている場合は、そのレベルより下のレベルの権限も自動的に付与されます。たとえば、プロジェクト レベルでアクセス権を持っている場合、そのプロジェクト内のインスタンス、クラスタ、テーブル、承認済みビュー、継続的マテリアライズド ビューにアクセスできます。承認済みビューまたは継続的マテリアライズド ビューへのアクセス権が付与されても、テーブルやインスタンスなど、承認済みビューまたは継続的マテリアライズド ビューの親である上位レベルのリソースへのアクセス権が自動的に付与されることはありません。この動作をポリシー継承といいます。
IAM 階層の詳細については、IAM ポリシーの継承をご覧ください。
プロジェクト レベルでのアクセス制御の例を次に示します。
- プロジェクト内の任意のテーブルに対する読み取り権限(ただし書き込みは不可)をユーザーに許可する。
- プロジェクト内の任意のテーブルに対する読み取り / 書き込み権限(ただしインスタンスの管理は不可)をユーザーに許可する。
- プロジェクト内の任意のテーブルに対する読み取り / 書き込み権限と、インスタンスを管理する権限をユーザーに許可する。
インスタンス レベルでのアクセス制御の例を次に示します。
- プロジェクトに複数のインスタンスがある場合、1 つのインスタンスでのみテーブルからの読み取りを許可する。
- プロジェクトに複数のインスタンスがある場合、1 つのインスタンスでのみ管理を許可する。
テーブルレベルでのアクセス制御の例を次に示します。
- テーブルへの書き込みをユーザーに許可するが、テーブルからの読み取りは許可しない。
- テーブルからの読み取りをユーザーに許可するが、テーブルへの書き込みは許可しない。
バックアップ レベルでのアクセス制御の例を次に示します。
- ユーザーがバックアップを削除できないようにする。
- ユーザーがバックアップから復元できないようにする。
承認済みビュー レベルでのアクセス制御の例を次に示します。
- ユーザーに承認済みビューの読み取りを許可するが、変更は許可しない。
- ユーザーがテーブルの複数の承認済みビューのいずれかからのみデータを表示できるようにします。
継続的マテリアライズド ビュー レベルでのアクセス制御の例を次に示します。
- ユーザーに継続的マテリアライズド ビューからの読み取りを許可するが、基盤となるテーブルの変更は許可しない。
IAM とその機能の詳細については、IAM デベロッパー ガイドをご覧ください。特に、アクセス権の付与、変更、取り消しをご覧ください。
Bigtable では、次のプリンシパル タイプへのアクセス権は付与できません。
Bigtable がサポートする権限とロールのリストについては、次のセクションをご覧ください。
Bigtable API を有効にする
Bigtable IAM ロールを表示して割り当てるには、プロジェクトに対して Bigtable API を有効にする必要があります。API を有効にするまで、Bigtable ロールはGoogle Cloud コンソールに表示されません。
API を有効にするために必要なロール
API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。
権限
ここでは、Bigtable でサポートされる権限を簡単に説明します。
権限を使用することで、Bigtable リソースに対して特定の操作を行えるようになります。たとえば、bigtable.instances.list 権限を持つユーザーは、プロジェクト内のすべての Bigtable インスタンスを一覧表示できます。ユーザーには権限を直接付与するのではなく、事前定義ロールまたはカスタムロールを割り当てます。これにより、1 つ以上の権限が付与されます。
次の表は、Bigtable に関連付けられている IAM 権限を示しています。
| アプリ プロファイルの権限名 | 説明 |
|---|---|
bigtable.appProfiles.create |
Bigtable アプリ プロファイルを作成します。 |
bigtable.appProfiles.delete |
Bigtable アプリ プロファイルを削除します。 |
bigtable.appProfiles.get |
Bigtable アプリ プロファイルに関する情報を取得します。 |
bigtable.appProfiles.list |
インスタンスの Bigtable アプリ プロファイルの一覧を表示します。 |
bigtable.appProfiles.update |
Bigtable アプリ プロファイルの設定を更新します。 |
| バックアップの権限名 | 説明 |
|---|---|
bigtable.backups.create |
Bigtable バックアップを作成します。 |
bigtable.backups.delete |
Bigtable バックアップを削除します。 |
bigtable.backups.get |
Bigtable バックアップに関する情報を取得します。 |
bigtable.backups.getIamPolicy |
バックアップの IAM ポリシーを取得する。 |
bigtable.backups.list |
Bigtable バックアップを一覧表示します。 |
bigtable.backups.restore |
Bigtable バックアップから復元します。 |
bigtable.backups.testIamPermissions |
指定したバックアップに対する呼び出し元の権限を取得します。 |
bigtable.backups.read |
Bigtable バックアップから読み取ります。 |
bigtable.backups.setIamPolicy |
バックアップ ACL を更新します。 |
bigtable.backups.update |
Bigtable バックアップの有効期限を変更します。 |
| クラスタの権限名 | 説明 |
|---|---|
bigtable.clusters.create |
Bigtable クラスタを作成します。 |
bigtable.clusters.delete |
Bigtable クラスタを削除します。 |
bigtable.clusters.get |
Bigtable クラスタに関する情報を取得します。 |
bigtable.clusters.list |
インスタンスの Bigtable クラスタを一覧表示します。 |
bigtable.clusters.update |
Bigtable クラスタの設定を更新します。 |
| ホット タブレットの権限名 | 説明 |
|---|---|
bigtable.hotTablets.list |
クラスタのホット タブレットを一覧表示します。 |
| インメモリ(プレビュー)の権限名 | 説明 |
|---|---|
bigtable.memoryLayer.get |
Bigtable インメモリ階層に関する情報を表示します。 |
bigtable.memoryLayer.list |
Bigtable インメモリ階層を一覧表示します。 |
bigtable.memoryLayer.update |
Bigtable インメモリ階層を有効化、無効化、サイズ変更します。 |
| インスタンスの権限名 | 説明 |
|---|---|
bigtable.instances.create |
Bigtable インスタンスを作成します。 |
bigtable.instances.createTagBinding |
タグを作成します。 |
bigtable.instances.delete |
Bigtable インスタンスを削除します。 |
bigtable.instances.deleteTagBinding |
タグを削除します。 |
bigtable.instances.get |
Bigtable インスタンスに関する情報を取得します。 |
bigtable.instances.getIamPolicy |
インスタンスの IAM ポリシーを取得します。 |
bigtable.instances.list |
プロジェクトの Bigtable インスタンスを一覧表示します。 |
bigtable.instances.listEffectiveTagBindings |
インスタンスに対して有効になっているすべてのタグを一覧表示します。 |
bigtable.instances.listTagBindings |
インスタンスのタグを一覧表示します。 |
bigtable.instances.ping |
チャンネル設定のリクエストを送信します。 |
bigtable.instances.executeQuery |
インスタンスに ExecuteQuery リクエストと PrepareQuery リクエストを送信します。 |
bigtable.instances.setIamPolicy |
ACL を更新します。 |
bigtable.instances.update |
Bigtable インスタンスの設定を更新します。 |
| Key Visualizer の権限名 | 説明 |
|---|---|
bigtable.keyvisualizer.get |
テーブルに関する Key Visualizer 情報(アクセス パターンや行キーの分布に関するメタデータなど)を取得します。 |
bigtable.keyvisualizer.list |
テーブルで使用可能な Key Visualizer 情報の一覧を表示します。 |
| ロケーションの権限名 | 説明 |
|---|---|
bigtable.locations.list |
Bigtable のロケーションを一覧表示します。 |
| テーブルの権限名 | 説明 |
|---|---|
bigtable.tables.checkConsistency |
複製されたテーブルが最新かどうか確認します。 |
bigtable.tables.create |
テーブルを作成します。 |
bigtable.tables.delete |
テーブルを削除します。 |
bigtable.tables.generateConsistencyToken |
複製されたテーブルが最新かどうか確認するため、トークンを生成します。 |
bigtable.tables.get |
テーブルに関する情報を取得します。これには、列ファミリーや、各列ファミリーの個別の設定などが含まれます。 |
bigtable.tables.getIamPolicy |
テーブルの IAM ポリシーを取得します。 |
bigtable.tables.list |
インスタンス内のテーブルを一覧表示します。 |
bigtable.tables.mutateRows |
テーブル内の行を修正するか、テーブルを切り捨てます。 |
bigtable.tables.readRows |
テーブルから行を読み取ります。これには、テーブルに関する情報(列ファミリーとその個別の設定など)が含まれます。 |
bigtable.tables.sampleRowKeys |
テーブルで使用される行キーのサンプルを取得します。 |
bigtable.tables.setIamPolicy |
テーブルの ACL を更新します。 |
bigtable.tables.undelete |
削除されたテーブルを復元します。 |
bigtable.tables.update |
テーブルの設定を更新します。これには、列ファミリーや、各列ファミリーの個別の設定などが含まれます。 |
| ロケーションの権限名 | 説明 |
|---|---|
bigtable.locations.list |
Bigtable のロケーションを一覧表示します。 |
| 承認済みビューの権限名 | 説明 |
|---|---|
bigtable.authorizedViews.create |
承認済みビューを作成します。 |
bigtable.authorizedViews.delete |
承認済みビューを削除します。 |
bigtable.authorizedViews.get |
承認済みビューに関する情報を取得します。 |
bigtable.authorizedViews.getIamPolicy |
承認済みビューの IAM ポリシーを取得します。 |
bigtable.authorizedViews.list |
承認済みビューをテーブルに一覧表示します。 |
bigtable.authorizedViews.mutateRows |
承認済みビュー内の行を変更します。 |
bigtable.authorizedViews.readRows |
承認済みビューから行を読み取ります。 |
bigtable.authorizedViews.sampleRowKeys |
承認済みビューで使用される行キーのサンプルを取得します。 |
bigtable.authorizedViews.setIamPolicy |
承認済みビューのアクセス制御ポリシーを更新します。 |
bigtable.authorizedViews.update |
承認済みビューの設定を更新します。 |
| 継続的マテリアライズド ビューの権限名 | 説明 |
|---|---|
bigtable.materializedViews.create |
継続的マテリアライズド ビューを作成します。 |
bigtable.materializedViews.delete |
継続的マテリアライズド ビューを削除します。 |
bigtable.materializedViews.get |
継続的マテリアライズド ビューに関する情報を取得します。 |
bigtable.materializedViews.getIamPolicy |
継続的マテリアライズド ビューの IAM ポリシーを取得します。 |
bigtable.materializedViews.list |
インスタンス内の継続的マテリアライズド ビューを一覧表示します。 |
bigtable.materializedViews.readRows |
継続的マテリアライズド ビューから行を読み取ります。 |
bigtable.materializedViews.sampleRowKeys |
継続的マテリアライズド ビューで使用される行キーのサンプルを取得します。 |
bigtable.materializedViews.setIamPolicy |
継続的マテリアライズド ビューのアクセス制御ポリシーを更新します。 |
bigtable.materializedViews.update |
継続的マテリアライズド ビューの設定を更新します。 |
事前定義ロール
各事前定義ロールには、権限が付与されます。たとえば、roles/bigtable.reader は、Bigtable インスタンス、クラスタ、テーブル、列ファミリーに加え、テーブル内のデータに関する情報への読み取り専用アクセス権を提供します。ロールを割り当てられたユーザーまたはグループは、プロジェクト内のリソースに対する操作を行えるようになります。
次の表では、Bigtable の事前定義ロールと、各ロールに関連付けられている権限の一覧を示します。
| Role | Permissions |
|---|---|
Bigtable Administrator( Administers all Bigtable instances within a project, including the data stored within tables. Can create new instances. Intended for project administrators. Lowest-level resources where you can grant this role:
|
|
Bigtable Editor( Editor role for bigtable |
|
Bigtable User( Provides read-write access to the data stored within Bigtable tables. Intended for application developers or service accounts. Lowest-level resources where you can grant this role:
|
|
Bigtable Viewer( Provides no data access. Intended as a minimal set of permissions to access the Google Cloud console for Bigtable. Lowest-level resources where you can grant this role:
|
|
Bigtable Reader( Provides read-only access to the data stored within Bigtable tables. Intended for data scientists, dashboard generators, and other data-analysis scenarios. Lowest-level resources where you can grant this role:
|
|
カスタムロール
Bigtable の事前定義ロールがビジネス要件に合っていない場合は、指定した権限を含むカスタムロールを独自に定義できます。
カスタムロールで Google Cloud コンソールへのアクセス権をサポートする必要がある場合は、次の表に示すように、ユーザーが実行するタスクを指定し、タスクごとに必要な権限がカスタムロールに付与されていることを確認する必要があります。タスクに必要なすべての権限がカスタムロールに付与されていないときに、ユーザーがそのタスクを実行しようとした場合、 Google Cloud コンソールは正しく機能しません。
| Google Cloud コンソール タスク | 必要な権限 |
|---|---|
| Google Cloud コンソールへの基本的なアクセス |
|
| インスタンスまたはクラスタの作成 |
基本的なアクセス権に加えて、次の権限が必要です。
|
| インスタンスまたはクラスタの変更 |
基本的なアクセス権に加えて、次の権限が必要です。
|
| レプリケーション構成の管理 |
基本的なアクセス権に加えて、次の権限が必要です。
|
| インスタンスまたはクラスタの削除 |
基本的なアクセス権に加えて、次の権限が必要です。
|
| グラフを表示したインスタンスの監視 |
基本的なアクセス権に加えて、次の権限が必要です。
|
| テーブルの作成と更新 |
基本的なアクセス権に加えて、次の権限が必要です。
|
| バックアップの復元 |
基本的なアクセス権に加えて、次の権限が必要です。
|
IAM の管理
このセクションでは、IAM のロールと関連する権限をプロジェクト、インスタンス、テーブル、バックアップ レベルで管理する方法について説明します。
プロジェクト レベルの IAM の管理
プロジェクト レベルでは、 Google Cloud コンソール、IAM API、Google Cloud CLI を使用して IAM ロールの付与、変更、取り消しを行うことができます。詳細については、アクセス権の付与、変更、取り消しをご覧ください。
プロジェクトを作成したら、特定のアクセスレベルに基づいて、プロジェクト レベルの IAM ロールをユーザーに付与できます。
必要なロール
ユーザーのインスタンス レベル、テーブルレベル、バックアップ レベル、承認済みビューレベル、または継続的マテリアライズド ビューレベルの IAM ロールを設定する前に、ユーザーが次のプロジェクト レベルの IAM ロールのうち 1 つ以上を持っていることを確認してください。
- Bigtable 閲覧者(推奨)
- Bigtable Reader
- Bigtable ユーザー
- Bigtable 管理者
プロジェクト内のすべてのインスタンス、テーブル、バックアップ、承認済みビュー、継続的マテリアライズド ビューで、ユーザーが実際に必要とする権限しか持たないプロジェクト レベルのロールを選択します。このため、ほとんどの場合は Bigtable 閲覧者のロールを付与することになります。
ユーザーにこれらのプロジェクト レベルのロールが 1 つもない場合、ユーザーは Google Cloud コンソールから Bigtable にアクセスできません。 Google Cloud コンソールでは、ユーザーに代わってインスタンス、クラスタ、テーブル、バックアップに関する情報を取得できるようにするには、これらのプロジェクト レベルのロールのいずれかが必要です。
インスタンス レベルの IAM ロールを付与する
インスタンス レベルでは、Bigtable の事前定義ロールの任意のロールをユーザーまたはサービス アカウントに付与できます。また、定義した任意のカスタムロールも付与できます。
事前定義ロールやカスタムロールをインスタンス レベルでユーザーまたはサービス アカウントに割り当てるには:
コンソール
Google Cloud コンソールの Bigtable インスタンス ページに移動します。
ロールを管理するインスタンスのチェックボックスをオンにします。情報パネルが表示されます。
情報パネルで [権限] をクリックします。
[プリンシパルを追加] で、追加するユーザーまたはサービス アカウントのメールアドレスの最初の数文字を入力し、目的のユーザーまたはサービス アカウントのメールアドレスをクリックします。
[ロールを選択] リストをクリックし、[Bigtable] をクリックして事前定義ロールを選択するか、[カスタム] をクリックしてカスタムロールを選択します。
割り当てる各ロールの名前をクリックします。
[追加] をクリックします。ユーザーまたはサービス アカウントに対して、指定したロールがインスタンス レベルで付与されます。
gcloud
インスタンス ID がわからない場合は、
bigtable instances listコマンドを使用して、プロジェクトのインスタンスのリストを表示します。gcloud bigtable instances listbigtable instances set-iam-policyコマンドを使用します。gcloud bigtable instances set-iam-policy \ INSTANCE_ID \ POLICY_FILE次のフィールドを入力します。
- INSTANCE_ID: インスタンスの永続的な識別子。
- POLICY_FILE: 有効な IAM ポリシーを含むローカル JSON または YAML ファイルへのパス。
テーブルレベルの IAM ロールを付与する
テーブルレベルでは、Bigtable の事前定義ロールのうち任意のロールをユーザーまたはサービス アカウントに付与できます。また、定義した任意のカスタムロールも付与できます。
事前定義ロールやカスタムロールをテーブルレベルでユーザーまたはサービス アカウントに割り当てるには:
コンソール
Google Cloud コンソールの Bigtable インスタンス ページに移動します。
設定する IAM ロールを持つテーブルを含むインスタンスの名前をクリックします。
左側のナビゲーション ペインで [テーブル] を選択します。
ロールを管理するテーブルのチェックボックスをオンにします。情報パネルが表示されます。
情報パネルで [権限] をクリックします。
[プリンシパルを追加] で、追加するユーザーまたはサービス アカウントのメールアドレスの最初の数文字を入力し、目的のユーザーまたはサービス アカウントのメールアドレスをクリックします。
[ロールを選択] プルダウン リストをクリックしてから、[Bigtable] をクリックして事前定義ロールを選択するか、[カスタム] をクリックしてカスタムロールを選択します。
割り当てる各ロールの名前をクリックします。
[追加] をクリックします。ユーザーまたはサービス アカウントに対して、指定したロールがテーブルレベルで付与されます。
gcloud
インスタンス ID がわからない場合は、
bigtable instances listコマンドを使用して、プロジェクトのインスタンスのリストを表示します。gcloud bigtable instances listインスタンスのテーブル ID がわからない場合は、
bigtable instances tables listコマンドを使用して、インスタンスのテーブルのリストを表示します。gcloud bigtable instances tables list --instances=INSTANCE_ID次のフィールドを入力します。
- INSTANCE_ID: インスタンスの永続的な識別子。
bigtable instances tables set-iam-policyコマンドを使用します。gcloud bigtable instances tables set-iam-policy \ TABLE_ID \ --instance=INSTANCE_ID \ POLICY_FILE次のフィールドを入力します。
- TABLE_ID: テーブルの永続的な識別子。
- INSTANCE_ID: インスタンスの永続的な識別子。
- POLICY_FILE: 有効な IAM ポリシーを含むローカル JSON または YAML ファイルへのパス。
バックアップ レベルの IAM ロールを付与する
バックアップ レベルでは、Bigtable の事前定義ロールのうち任意のロールをユーザーまたはサービス アカウントに付与できます。また、定義した任意のカスタムロールも付与できます。
事前定義ロールやカスタムロールをバックアップ レベルでユーザーまたはサービス アカウントに割り当てるには:
gcloud
インスタンス ID がわからない場合は、
bigtable instances listコマンドを使用して、プロジェクトのインスタンスのリストを表示します。gcloud bigtable instances listインスタンスのバックアップ ID がわからない場合は、
bigtable instances backups listコマンドを使用して、インスタンス内のバックアップのリストを表示します。gcloud bigtable backups list --instances=INSTANCE_ID次のフィールドを入力します。
- INSTANCE_ID: インスタンスの永続的な識別子。
gcloud bigtable backups set-iam-policyコマンドを使用します。gcloud bigtable backups set-iam-policy BACKUP_ID \ --instance=INSTANCE_ID \ --cluster=CLUSTER_ID \ POLICY_FILE次のフィールドを入力します。
- BACKUP_ID: バックアップの永続的な識別子。
- INSTANCE_ID: インスタンスの永続的な識別子。
- TABLE_ID: テーブルの永続的な識別子。
- POLICY_FILE: 有効な IAM ポリシーを含むローカル JSON または YAML ファイルへのパス。
承認済みビュー レベルの IAM ロールを付与する
承認済みビューレベルでは、Bigtable の事前定義ロールのうち任意のロールをユーザーまたはサービス アカウントに付与できます。また、定義した任意のカスタムロールも付与できます。
事前定義ロールやカスタムロールを承認済みビューレベルでユーザーまたはサービス アカウントに割り当てるには:
コンソール
Google Cloud コンソールで Bigtable インスタンスのリストを開きます。
承認済みビューを含むインスタンスをクリックします。
ナビゲーション パネルで [Bigtable Studio] をクリックします。
エクスプローラで、テーブルと [承認済みビュー] を開きます。
変更する承認済みビューの横にある more_vert 操作メニューをクリックし、[アクセスを許可] をクリックします。
プリンシパルを 1 つ以上追加し、そのプリンシパルまたはプリンシパルのグループに割り当てるロールを選択します。
省略可: 追加のロールのアクセス権を付与するには、[別のロールを追加] をクリックし、追加のロールごとにプリンシパルとロールを入力します。
[保存] をクリックします。
gcloud
インスタンス ID がわからない場合は、
bigtable instances listコマンドを使用して、プロジェクトのインスタンスのリストを表示します。gcloud bigtable instances listインスタンスのテーブル ID がわからない場合は、
bigtable instances tables listコマンドを使用して、インスタンスのテーブルのリストを表示します。gcloud bigtable instances tables list --instances=INSTANCE_IDビューの ID がわからない場合は、
bigtable authorized-views listコマンドを使用して、テーブルのすべての承認済みビューのリストを表示します。gcloud bigtable instances tables authorized-views list \ --instance=INSTANCE_ID \ --table=TABLE_IDbigtable authorized-views set-iam-policyコマンドを使用します。gcloud bigtable authorized-views set-iam-policy TABLE_ID{"</var>"}} \ AUTHORIZED_VIEW_ID{"</var>"}} --instance=INSTANCE_ID{"</var>"}} POLICY_FILE{"</var>"}}次のフィールドを入力します。
- INSTANCE_ID: インスタンスの永続的な識別子。
- TABLE_ID: テーブルの永続的な識別子。
- AUTHORIZED_VIEW_ID: ビューの永続的な識別子。
- POLICY_FILE: 有効な IAM ポリシーを含むローカル JSON または YAML ファイルへのパス。
IAM の条件
IAM Conditions を使用すると、Bigtable リソースを含む一部の Google Cloudリソースに対して、条件付きの属性ベースのアクセス制御を定義して適用できます。
Bigtable では、次の属性に基づいて条件付きアクセスを適用できます。
- 日時属性: Bigtable リソースに対する一時的な(有効期限のある)アクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定するために使用します。たとえば、指定した日付までの間、ユーザーはテーブルにアクセスできます。
- リソース属性: リソース名、リソースタイプ、リソース サービス属性に基づいて条件付きアクセスを構成するために使用します。Bigtable では、インスタンス、クラスタ、テーブル、バックアップ、承認済みビューの属性を使用して条件付きアクセスを構成できます。たとえば、特定の接頭辞で始まるテーブルに限ってテーブルを管理できるようにしたり、特定のテーブルのみにユーザーがアクセスできるようにしたりできます。
IAM の条件について詳しくは、条件の概要をご覧ください。
次のステップ
IAM の詳細について学習する。