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

このページでは、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 Conditions を使用すると、条件付きでロール バインディングをユーザーに付与できます。条件付きロール バインディングを含む 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

タグを削除する

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

次のステップ