IAM Conditions とタグを用いて Cloud Bigtable を活用する
Google Cloud Japan Team
※この投稿は米国時間 2022 年 7 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。
Cloud Bigtable は、低レイテンシ、高スループットの NoSQL データベースです。Bigtable ユーザーは、テーブルにテラバイト規模のデータを保存します。データの公開を安全に実施することは、Bigtable ユーザーにとって不可欠です。Bigtable データへのアクセスを保護する責任を担う管理者またはデベロッパーは、Google Cloud のセキュリティ機能を使用して Bigtable リソースをロックダウンし、認証モデルをカスタマイズすることとなります。
この記事では、特定の Bigtable リソースへのアクセスを管理する方法、権限を適用するリソースを絞り込む方法、開発環境に応じて権限を設定する方法を説明します。これらを達成するには、Identity and Access Management(IAM)、IAM Conditions、タグを使用して、Bigtable データを保護します。
Identity and Access Management
IAM により、きめ細かいアクセス制御と Google Cloud リソースの一元管理のための可視性が提供されます。複雑なクラウド組織では、さまざまなリソースに IAM ポリシーがバインドされている可能性があります。IAM ポリシーは、ロールに基づいてアクセスを制限することを希望する管理者によって構成されます。
次の図は、管理者が IAM ポリシーをリソースにバインドする様子を示しています。IAM ポリシーは 1 つ以上のプリンシパル(メンバーとも呼ばれます)で構成され、管理者は 1 つ以上のロールを各プリンシパルに付与できます。プリンシパルとして使用できるのは、ユーザー、グループ、サービス アカウントです。ロールとは、プリンシパルが Google Cloud リソースに対してなんらかのアクションを実行することを許可する、一連の権限のことです。
リソースは、リソースツリーの親から IAM ポリシーを継承します。ユーザーがリクエストを送信すると、IAM は、対象となるリソースに対してアクションを実行する権限がそのユーザーにあるかどうかを確認します。リソースにバインドされている IAM ポリシーが、ユーザーに権限を付与することを許可している場合には、権限が付与されます。そのポリシーでは付与できない場合、IAM はリソースツリーの上流に向かって、この権限を付与できるポリシーを検索します。権限を付与できるポリシーがリソースツリーにない場合には、リクエストは拒否され、権限拒否エラーになります。
次の Cloud コンソールの例では、Bigtable Reader ロールがユーザー 222larabrown@gmail.com に付与され、ポリシーが my-project プロジェクトにバインドされます。
これは、gcloud CLI でも実行できます。
バインディングの作成後に、my-project プロジェクト内で Bigtable Reader ロールが 222larabrown@gmail.com に付与されます。つまり 222larabrown@gmail.com は、既存のテーブルのデータに対する読み取りアクセス権と、インスタンス、クラスタ、テーブルのメタデータ(列ファミリーを含む)に対する読み取りアクセス権を持つことになります。
IAM には、基本ロール、事前定義ロール、カスタムロールの 3 種類のロールがあります。Bigtable Reader ロールは事前定義ロールです。IAM ロールの詳細については、ロールについてを参照してください。
IAM Conditions
IAM Conditions は、Google Cloud リソースに対して、条件付きの属性ベースのアクセス制御を定義、適用できる機能です。構成されている条件に一致した場合にのみ、リソースにロールをバインディングすることに加えて、リソースへのアクセスがプリンシパルに付与されます。
IAM Conditions の仕組みを次に示します。
次の Cloud コンソール の例では、Bigable Reader ロールがユーザー 222larabrown@gmail.com に「Report tables」という条件付きで付与され、ポリシーが my-project プロジェクトにバインドされます。「Report tables」条件が指定されているため、222larabrown@gmail.com は、特定の Bigtable インスタンス内でテーブル ID に report- という接頭辞を含む Bigtable テーブルにアクセスできます。
「Report tables」条件は次のように定義されています。
ソースタイプは Bigtable テーブル bigtableadmin.googleapis.com/Table である必要があります。
リソース(テーブル)名には接頭辞 projects/my-project/instances/my-instance/tables/report- が必要です。
サービスは Bigtable 管理サービス bigtableadmin.googleapis.com である必要があります。
これは、gcloud CLI でも実行できます。
CONDITION_FROM_FILE
は、次の条件を定義するローカルの JSON ファイルまたは YAML ファイルのパスにします。
IAM Conditions とタグ
Prod 環境には 222larabrown@gmail.com に公開してはならないセンシティブ データが含まれているため、Test 環境または Staging 環境のデータへの読み取りアクセス権のみを 222larabrown@gmail.com に対して許可するにはどうしたらよいでしょうか。一つの方法は、いくつかの環境タグ値を適切なリソースにバインドし、IAM Conditions を使用して、タグ値が関連付けられているリソースのみにアクセスを制限することです。
タグにより、ビジネス ディメンションを追加して組織階層内のリソースを管理できます。タグを使用して、特定のリソースをさまざまな目的(アクセス制御など)別にグループ化できます。タグを使用してさまざまな環境(Test、Staging、Prod)別にリソースをグループ化していきます。
まず Cloud コンソール で、環境を表すタグを組織レベルで作成できます。新しいタグの値は、Test、Staging、Prod です。
タグが作成されると、タグに対し 1 つのタグキー ID と、3 つのタグ値に対し 3 つのタグ値 ID が生成されます。
my-instance という Bigtable インスタンスを Test 環境に使用するとします。gcloud CLI を使用して、Environment タグの Test タグ値を次のようにインスタンスにバインドします。
注: 現在のところ、Cloud コンソールでは Bigtable インスタンスへのタグのバインドはサポートされていません。
バインディングが有効になったら、条件を追加できます。また、Test タグ値に一致するタグ値がリソースに含まれている場合にのみ、プリンシパルにロールを付与することもできます。今回ユーザー 222larabrown@gmail.com は、Test 環境にのみアクセスできます。
注: 現在、同じ条件でタグとその他の属性を組み合わせることはできません。
詳しくは、タグとアクセス制御を参照してください。
概要
この記事では次の内容を説明しました。
IAM の基礎知識
Bigtable リソースの IAM ロールを設定する方法
IAM Conditions を使用して IAM ロールの範囲を制限する方法
IAM タグを使用して権限に関する環境要件を追加する方法
詳細
IAM、IAM Conditions を使用した Bigtable データの保護の詳細については、IAM によるアクセス制御をご覧ください。
- Cloud Bigtable 担当ソフトウェア エンジニア Kevin Si