このページでは、 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:active
、state:todelete
、state:archive
- 環境タグ: Key-Value ペア(
env:prod
、env:dev
、env:test
など)を作成して、インスタンスの本番環境、テスト環境、開発環境を指定します。
Spanner インスタンス タグを作成して管理する方法
タグは Key-Value ペアとして構成されます。まず、組織リソースの下にタグキーを作成し、それにタグ値(たとえば、environment
というタグキーに prod
や dev
などの値)を関連付けます。その後、タグ バインディングを作成して、そのタグ値をプロジェクトや 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 の条件とタグ
タグと 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.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 許可ポリシーを作成する方法を学ぶ。