このページでは、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:active
、state:todelete
、state:archive
)。 - 環境タグ: Key-Value ペア(
env:prod
、env:dev
、env:test
など)を作成して、インスタンスの本番環境、テスト環境、開発環境を指定します。
Spanner インスタンス タグを作成および管理する方法
タグは Key-Value ペアとして構成されます。組織リソースの下にタグキーを作成し、タグ値をタグキー(例えば、値 prod
と dev
を持つタグキー environment
)に追加します。その後、タグ値をプロジェクトや Spanner インスタンスなどの Google Cloud リソースにリンクするタグ バインディングを作成できます。データベースにタグを割り当てることはできません。
必要な権限
必要な権限は、実行する必要があるアクションによって異なります。 詳細については、Resource Manager ドキュメントの必要な権限をご覧ください。
タグキーとタグ値を作成する
インスタンスにタグを適用する前に、タグを作成してその値を割り当てる必要があります。タグキーとタグ値を作成する方法については、タグの作成とタグ値の追加をご覧ください。
インスタンスにタグを適用する
タグ Key-Value ペアを作成したら、タグ バインディングを作成して Spanner インスタンスに適用できます。
コンソール
Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。
タグを適用するインスタンスを選択します。
[
タグ] をクリックします。組織が [タグ] パネルに表示されない場合は、[スコープの選択] をクリックします。組織を選択して [開く] をクリックします。
[タグ] パネルで、[タグを追加] を選択します。
[キー] フィールドで、付加するタグのキーをリストから選択します。リストは、キーワードを入力してフィルタできます。
[値] フィールドで、付加するタグの値をリストから選択します。リストは、キーワードを入力してフィルタできます。
さらにタグを付加する場合は、[
タグを追加] をクリックして、それぞれのキーと値を選択します。[保存] をクリックします。
[確認] ダイアログで、[確認] をクリックしてタグを付加します。
タグが更新されたことは、通知によって確認します。
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.com
、group:admins@example.com
、serviceAccount: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
タグ バインディングを削除する
タグキーまたは値の定義を削除する場合は、インスタンスからタグの適用が解除されていることを確認してください。タグを削除する前に、既存のタグ バインディングを削除する必要があります。
コンソール
Google Cloud コンソールで、[Spanner インスタンス] ページに移動します。
タグ バインディングを削除するインスタンスを選択します。
[
タグ] をクリックします。[タグ] パネルで、切断するタグの横にある
[項目を削除] をクリックします。[保存] をクリックします。
[確認] ダイアログで、[確認] をクリックしてタグを切断します。
タグが更新されたことは、通知によって確認します。
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
タグを削除する
タグ バインディングを削除したら、タグを削除できます。タグキーとタグ値を削除するには、タグの削除をご覧ください。
次のステップ
Google Cloud タグの詳細を確認する。
Resource Manager を使用して Spanner インスタンスでタグを作成および管理する方法を学習します。
Google Cloud リソースを整理する別の方法であるラベルの詳細を学習します。
条件付き IAM 許可ポリシーの作成方法を学習する。