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

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

Google Cloud タグは、プロジェクトや Spanner インスタンスなどの Google Cloud リソースにアタッチできる 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 ペアとして構成されます。まず、組織リソースの下にタグキーを作成し、それにタグ値(たとえば、environment というタグキーに proddev などの値)を関連付けます。その後、タグ バインディングを作成して、そのタグ値をプロジェクトや 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 の条件とタグ

タグと 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.comdomain: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

タグを削除する

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

次のステップ