IAM を使用した Bigtable アクセス制御
このページでは、Bigtable のアクセス制御オプションについて説明します。
概要
Bigtable は、Identity and Access Management(IAM)を使用してアクセス制御を行います。リソースに IAM ポリシーを設定して、誰がどのリソースにどのようなアクセス権を持つかを制御します。
Bigtable リソースは階層で整理されています。Google Cloud プロジェクトは Bigtable インスタンスの親であり、クラスタとテーブルの親です。テーブルはその承認済みビューの親であり、クラスタはそのバックアップの親です。アクセス制御は各レベルで構成できます。
あるレベルの権限を持っている場合、そのレベルより下位の権限も自動的に付与されます。たとえば、プロジェクト レベルでアクセス権を持っている場合、そのプロジェクト内のインスタンス、クラスタ、テーブル、承認済みビューにアクセスできます。承認済みビューへのアクセス権が付与されても、テーブルやインスタンスなど、承認済みビューの親である上位レベルのリソースへのアクセス権が自動的に付与されることはありません。この動作をポリシー継承といいます。
IAM 階層の詳細については、IAM ポリシーの継承をご覧ください。
プロジェクト レベルでのアクセス制御の例を次に示します。
- プロジェクト内の任意のテーブルに対する読み取り権限(ただし書き込みは不可)をユーザーに許可する。
- プロジェクト内の任意のテーブルに対する読み取り / 書き込み権限(ただしインスタンスの管理は不可)をユーザーに許可する。
- プロジェクト内の任意のテーブルに対する読み取り / 書き込み権限と、インスタンスを管理する権限をユーザーに許可する。
インスタンス レベルでのアクセス制御の例を次に示します。
- プロジェクトに複数のインスタンスがある場合、1 つのインスタンスでのみテーブルからの読み取りを許可する
- プロジェクトに複数のインスタンスがある場合、1 つのインスタンスでのみ管理を許可する。
テーブルレベルでのアクセス制御の例を次に示します。
- テーブルへの書き込みをユーザーに許可するが、テーブルからの読み取りは許可しない。
- テーブルからの読み取りをユーザーに許可するが、テーブルへの書き込みは許可しない。
バックアップ レベルでのアクセス制御の例を次に示します。
- ユーザーがバックアップを削除できないようにする。
- ユーザーがバックアップから復元できないようにする。
承認済みビューレベルでのアクセス制御の例を次に示します。
- ユーザーに承認済みビューの読み取りを許可するが、変更は許可しない。
- ユーザーがテーブルの複数の承認済みビューのいずれかからのみデータを表示できるようにします。
IAM とその機能の詳細については、IAM デベロッパー ガイドをご覧ください。特に、アクセス権の付与、変更、取り消しをご覧ください。
Bigtable では、次のプリンシパル タイプへのアクセス権は付与できません。
Bigtable がサポートする権限とロールのリストについては、次のセクションをご覧ください。
Bigtable API を有効にする
Bigtable IAM ロールを表示して割り当てるには、プロジェクトに対して Bigtable API を有効にする必要があります。API を有効にするまで、Google Cloud コンソールで Bigtable ロールを表示できません。
権限
ここでは、Bigtable でサポートされる権限を簡単に説明します。
権限を使用することで、Bigtable リソースに対して特定の操作を行えるようになります。たとえば、bigtable.instances.list
権限を持つユーザーは、プロジェクト内のすべての Bigtable インスタンスを一覧表示できます。ユーザーには権限を直接付与するのではなく、事前定義ロールまたはカスタムロールを割り当てます。これにより、権限が付与されます。
次の表は、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 |
バックアップのアクセス制御リスト(ACL)を読み取ります。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.instances.create |
Bigtable インスタンスを作成します。 |
bigtable.instances.createTagBinding |
タグを作成します。 |
bigtable.instances.delete |
Bigtable インスタンスを削除します。 |
bigtable.instances.deleteTagBinding |
タグを削除します。 |
bigtable.instances.get |
Bigtable インスタンスに関する情報を取得します。 |
bigtable.instances.getIamPolicy |
インスタンスのアクセス制御リスト(ACL)を読み取ります。IAM ポリシーとして返します。 |
bigtable.instances.list |
プロジェクトの Bigtable インスタンスを一覧表示します。 |
bigtable.instances.listEffectiveTagBindings |
インスタンスに対して有効になっているすべてのタグを一覧表示します。 |
bigtable.instances.listTagBindings |
インスタンスのタグを一覧表示します。 |
bigtable.instances.ping |
チャンネル設定のリクエストを送信します。 |
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 |
テーブルの ACL を読み取り、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 |
承認済みビューの設定を更新します。 |
事前定義ロール
各事前定義ロールには、権限が付与されます。たとえば、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 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 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 の事前定義ロールがビジネス要件に合っていない場合は、指定した権限を含むカスタムロールを独自に定義できます。
カスタムロールで Google Cloud コンソールへのアクセス権をサポートする必要がある場合は、次の表に示すように、ユーザーが実行するタスクを指定し、タスクごとに必要な権限がカスタムロールに付与されていることを確認する必要があります。 タスクに必要なすべての権限がカスタムロールに付与されていないときに、ユーザーがそのタスクを実行しようとした場合、Google Cloud コンソールは正しく機能しません。
Google Cloud コンソールのタスク | 必要な権限 |
---|---|
Google Cloud コンソールへの基本的なアクセス |
|
インスタンスまたはクラスタの作成 |
基本的なアクセス権に加えて、次の権限が必要です。
|
インスタンスまたはクラスタの変更 |
基本的なアクセス権に加えて、次の権限が必要です。
|
レプリケーション構成の管理 |
基本的なアクセス権に加えて、次の権限が必要です。
|
インスタンスまたはクラスタの削除 |
基本的なアクセス権に加えて、次の権限が必要です。
|
グラフを表示したインスタンスの監視 |
基本的なアクセス権に加えて、次の権限が必要です。
|
テーブルの作成と更新 |
基本的なアクセス権に加えて、次の権限が必要です。
|
バックアップの復元 |
基本的なアクセス権に加えて、次の権限が必要です。
|
IAM の管理
このセクションでは、IAM のロールと関連する権限をプロジェクト、インスタンス、テーブル、バックアップ レベルで管理する方法について説明します。
プロジェクト レベルの IAM の管理
プロジェクト レベルでは、Google Cloud Console、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 list
bigtable 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 の事前定義ロールのうち任意のロールをユーザーまたはサービス アカウントに付与できます。また、定義した任意のカスタムロールも付与できます。
事前定義ロールやカスタムロールを承認済みビューレベルでユーザーまたはサービス アカウントに割り当てるには、次のコマンドを実行します。
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_ID
bigtable authorized-views set-iam-policy
コマンドを使用します。gcloud bigtable authorized-views set-iam-policy TABLE_ID \ AUTHORIZED_VIEW_ID --instance=INSTANCE_ID POLICY_FILE
次のフィールドを入力します。
INSTANCE_ID
: インスタンスの永続的な識別子。TABLE_ID
: テーブルの永続的な識別子。AUTHORIZED_VIEW_ID
: ビューの永続的な識別子POLICY_FILE
: 有効な IAM ポリシーを含むローカル JSON または YAML ファイルへのパス。
IAM の条件
IAM Conditions では、Bigtable リソースを含む一部の Google Cloud リソースに対する条件付き、属性ベースのアクセス制御を定義して適用できます。
Bigtable では、次の属性に基づいて条件付きアクセスを適用できます。
- 日時属性: Bigtable リソースに対する一時的な(有効期限のある)アクセス権、スケジュール済みアクセス権、または期間限定のアクセス権を設定するために使用します。たとえば、指定した日付までの間、ユーザーはテーブルにアクセスできます。
- リソース属性: リソース名、リソースタイプ、リソース サービス属性に基づいて条件付きアクセスを構成するために使用します。Bigtable では、インスタンス、クラスタ、テーブル、バックアップ、承認済みビューの属性を使用して条件付きアクセスを構成できます。たとえば、特定の接頭辞で始まるテーブルに限ってテーブルを管理できるようにしたり、特定のテーブルのみにユーザーがアクセスできるようにしたりできます。
IAM の条件について詳しくは、条件の概要をご覧ください。
次のステップ
IAM の詳細について学習する。