タグを使用したアクセスの制御とインスタンスの整理

このページでは、Google Cloud タグを使用して Spanner インスタンスへのアクセスを管理する方法について説明します。

Google Cloud タグは、Google Cloud リソース(プロジェクトや Spanner インスタンスなど)にアタッチできる Key-Value ペアです。タグを使用してインスタンスをグループ化し、整理できます。また、インスタンスに特定のタグがあるかどうかに基づいて、Identity and Access Management(IAM)アクセス ポリシーを条件付きで設定できます。Spanner インスタンス タグは、Google Cloud CLI または Google Cloud コンソールを使用して作成および管理できます。タグを作成したら、そのタグ バインディングを作成して Google Cloud リソースにタグを添付できます。タグ バインディングは、Google Cloud リソース階層に従ってリソースの子に継承されます。たとえば、プロジェクトにタグを適用すると、そのプロジェクト内のすべてのインスタンスがタグを継承します。ラベルを使用して Google Cloud リソースを整理することもできますが、ラベルを使用して IAM ポリシーの条件を設定することはできません。

タグの詳細については、タグの概要をご覧ください。

Spanner インスタンス タグの一般的なユースケース

タグの一般的なユースケースは次のとおりです。

  • Identity and Access Management(IAM)タグ: インスタンスに特定のタグがあるかどうかに基づいて、Identity and Access Management(IAM)ロールを付与します。タグ値の有無は、その IAM ポリシーの条件であり、Spanner インスタンスへのアクセスの制御に役立ちます。
  • 状態タグ: タグを作成してインスタンスの状態を指定、管理します。(例: state:activestate:todeletestate:archive)。
  • 環境タグ: Key-Value ペア(env:prodenv:devenv:test など)を作成して、インスタンスの本番環境、テスト環境、開発環境を指定します。

Spanner インスタンス タグを作成、管理する方法

タグは Key-Value ペアとして構成されます。組織リソースの下にタグキーを作成し、タグ値をタグキー(例えば、値 proddev を持つタグキー environment )に追加します。その後、タグ値をプロジェクトや Spanner インスタンスなどの Google Cloud リソースにリンクするタグ バインディングを作成できます。データベースにタグを割り当てることはできません。

必要な権限

必要な権限は、実行する必要があるアクションによって異なります。 詳細については、Resource Manager のドキュメントで必要な権限をご覧ください。

タグキーとタグ値を作成する

タグをインスタンスに接続するには、その前にタグを作成してその値を割り当てる必要があります。タグキーとタグ値を作成する方法については、タグの作成タグ値の追加をご覧ください。

インスタンスにタグを適用する

タグの Key-Value ペアを作成したら、タグ バインディングを作成して Spanner インスタンスに接続できます。

コンソール

  1. Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。

    Spanner インスタンスに移動

  2. タグを適用するインスタンスを選択します。

  3. [ タグ] をクリックします。

  4. 組織が [タグ] パネルに表示されない場合は、[スコープを選択] をクリックします。組織を選択して [開く] をクリックします。

  5. [タグ] パネルで、[タグを追加] を選択します。

  6. [キー] フィールドで、付加するタグのキーをリストから選択します。リストは、キーワードを入力してフィルタできます。

  7. [] フィールドで、付加するタグの値をリストから選択します。リストは、キーワードを入力してフィルタできます。

  8. さらにタグを付加する場合は、[タグを追加] をクリックして、それぞれのキーと値を選択します。

  9. [保存] をクリックします。

  10. [確認] ダイアログで、[確認] をクリックしてタグを付加します。

    タグが更新されたことは、通知によって確認します。

gcloud

タグ バインディングを作成してインスタンスに接続するには、次のコマンドを実行します。

gcloud resource-manager tags bindings create
--parent=//spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID
--tag-value=ORG_ID/KEY_NAME/VALUE_NAME
--location=LOCATION
  • PROJECT_ID: プロジェクトの ID。
  • INSTANCE_ID: インスタンスの ID。
  • ORG_ID: 組織の ID。
  • KEY_NAME: タグキーの表示名(短縮名)。例: env
  • VALUE_NAME: タグ値の表示(短縮)名。例: prod
  • LOCATION: インスタンスの場所。例: us-east1

たとえば、タグ Key-Value ペア env:prod を使用して Spanner インスタンス my-instance にタグ バインディングを作成するには、次のコマンドを実行します。

gcloud resource-manager tags bindings create
--parent=//spanner.googleapis.com/projects/my-project/instances/my-instance
--tag-value=123456789012/env/prod
--location=us-east1

IAM Conditions とタグ

タグと IAM 条件を使用して、条件付きでロール バインディングをユーザーに付与できます。条件付きロール バインディングを含む IAM ポリシーが適用されている場合、リソースに付加されたタグを変更または削除すると、そのリソースへのユーザー アクセスが削除されることがあります。

詳細については、IAM 条件の概要をご覧ください。

コンソール

タグを使用してユーザーにバインディングを条件付きで付与するには、タグへのアクセスの管理をご覧ください。

gcloud

タグベースの条件を IAM ポリシーに適用するには、必要な権限があることを確認してから、次のコマンドを実行します。

gcloud organizations add-iam-policy-binding ORG_ID
--role=roles/ROLE --member=PRINCIPAL
--condition=resource.matchTag('PROJECT_ID/KEY_NAME', 'VALUE_NAME')
  • ORG_ID: 組織の ID。
  • ROLE: プリンシパルに割り当てるロール名。ロール名は、事前定義ロールの完全なパス(roles/logging.viewer など)またはカスタムロールのロール ID(organizations/{ORG_ID}/roles/logging.viewer など)です。
  • PRINCIPAL: ロール バインディングを追加するプリンシパル。user|group|serviceAccount:email または domain:domain の形式で指定します。例: user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.com、または domain:example.domain.com
  • PROJECT_ID: プロジェクトの ID。
  • KEY_NAME: タグキーの表示名(短縮名)。例: env
  • VALUE_NAME: タグ値の表示(短縮)名。例: prod

このコマンドは、組織の IAM ポリシーに IAM ポリシー バインディングを追加します。ポリシー バインディングは、メンバー、ロール、省略可能な条件から構成されます。

たとえば、タグ env:prod を持つすべての 123456789012 プロジェクト リソースで spanner.backupAdmin ロールを条件付きで user1@example.com に付与するには、次のコマンドを実行します。

gcloud organizations add-iam-policy-binding my-project
--member=user1@example.com --role=roles/spanner.backupAdmin
--condition=resource.matchTag('123456789012/env', 'prod')

インスタンスに適用されているタグを一覧表示する

インスタンスに直接適用されている、またはインスタンスによって継承されたタグ バインディングのリストを表示できます。

gcloud

リソースに直接適用されたタグ バインディングのリストを取得するには、gcloud resource-manager tags bindings list コマンドを使用します。--effective フラグを追加すると、このリソースによって継承されたすべてのタグ バインディングも取得できます。

インスタンスに接続されているすべてのタグ バインディングを一覧表示するには、次のコマンドを実行します。

gcloud resource-manager tags bindings list
--parent=//spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID
--location=LOCATION
--effective
  • PROJECT_ID: プロジェクトの ID。
  • INSTANCE_ID: インスタンスの ID。
  • LOCATION: インスタンスの場所。例: us-east1

タグ バインディングを削除する

タグキーまたは値の定義を削除する場合は、インスタンスからタグの適用が解除されていることを確認してください。タグを削除する前に、既存のタグ バインディングを削除する必要があります。

コンソール

  1. Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。

    Spanner インスタンスに移動

  2. タグ バインディングを削除するインスタンスを選択します。

  3. [ タグ] をクリックします。

  4. [タグ] パネルで、切断するタグの横にある [項目を削除] をクリックします。

  5. [保存] をクリックします。

  6. [確認] ダイアログで、[確認] をクリックしてタグを切断します。

    タグが更新されたことは、通知によって確認します。

gcloud

タグ バインディングを削除するには、次のコマンドを実行します。

gcloud resource-manager tags bindings delete
--parent=//spanner.googleapis.com/projects/PROJECT_ID/instances/INSTANCE_ID
--tag-value=ORG_ID/KEY_NAME/KEY_VALUE
--location=LOCATION
  • PROJECT_ID: プロジェクトの ID。
  • INSTANCE_ID: インスタンスの ID。
  • ORG_ID: 組織の ID。
  • KEY_NAME: タグキーの表示名(短縮名)。例: env
  • VALUE_NAME: タグ値の表示(短縮)名。例: prod
  • LOCATION: インスタンスの場所。例: us-east1

タグを削除する

タグ バインディングを削除したら、タグを削除できます。タグキーとタグ値を削除するには、タグの削除をご覧ください。

次のステップ