G-gen の杉村です。 Google Cloud (旧称 GCP) のタグ (Tags) とラベル (Labels) の違いについて解説します。
タグとラベル
タグとラベルの概要
Google Cloud (旧称 GCP) には タグ (Tags) と ラベル (Labels) という、よく似ているが異なる概念が存在します。
タグとラベルはどちらもキー・バリューのペアであり Google Cloud リソースに紐づけることができます。しかしこれらは 全く別の機能 です。
タグとラベルの違いは、端的に述べると以下の通りです。
- タグは 権限管理 のための機能
- ラベルは リソース整理 や 課金整理 のための機能
利用例
タグの利用例は、以下です。
- 本番環境フォルダには
environment: prod
タグを、検証環境フォルダにはenvironment: test
タグを付与し IAM 条件で操作できるアカウントを制限する
一方でラベルの利用例は以下のようなものです。
- gcloud コマンドで VM インスタンスを list する際にラベルを指定してフィルタして特定サブシステムの VM だけを抽出する
タグとラベルの違い
比較表
参考 : タグとラベル
タグ | ラベル | |
---|---|---|
リソース構造 | Key、Value、Binding (紐づけ) はそれ自体がリソース | ラベル自体はリソースでなくリソースのメタデータ |
定義 | 組織レベルで定義 | 各リソースのメタデータとして定義 |
アクセス制御 | タグ管理のための独自 IAM 権限 | 付与対象リソースごとの IAM 権限 |
事前定義 | Key と Value を事前定義する | 事前定義なし |
継承 | Google Cloud 階層の子リソースに継承される | 子リソースに継承されない |
文字長 | 63 文字まで | 63 文字まで |
IAM ポリシー | IAM ポリシーの条件 (Condition) として利用可能 | IAM ポリシーから利用不可 |
組織ポリシー | 組織ポリシーの条件付き制約として利用可能 | 組織ポリシーから利用不可 |
Billing 連携 | ・ BigQuery に Cloud Billing データをエクスポートできる | ・ Cloud Billing の Web UI でラベルごとにリソースをフィルタリングできる ・ BigQuery に Cloud Billing データをエクスポートできる |
リソースとしての扱い
大きな違いとして タグはそれ自体がリソースである という一方でラベルはリソースに付与する メタデータである という点です。
タグは組織レベルで「キー・バリュー」のペアを事前定義します。それをリソースに紐づけます。紐づけ設定は bindings というリソースとして実体があります。
ラベルは、リソースのメタデータとして付与するのでそれ自体がリソースではありません。
またタグは継承の概念があります。例えばフォルダにタグを紐づけると、子のプロジェクトにも引き継がれます。
IAM や組織ポリシーでの利用
IAM
タグは主に権限管理のために用いられます。
Google Cloud の IAM bindings には条件 (condition) を書くことができ、例えば「◯時〜◯時の間だけ権限が有効」など条件をつけることができます。
その条件の一つとして「このタグがついていること」という条件を付与することができます。
例えば本番プロジェクトが入っているフォルダに environment
: prod
タグを、開発用プロジェクトが入っているフォルダに environment
: test
タグをつけ、 IAM binding の 条件 (condition) に「 environment
: test
タグ」を指定すれば「この Google グループは test
タグのついたプロジェクトにだけ権限が有効」のように制限することが可能です。
組織ポリシー
タグは 組織のポリシー の条件としても活用できます。
特定タグのついたプロジェクトにのみポリシーを適用する、といった条件付けが可能です。
参考 : タグを使用した組織のポリシーの設定
課金管理
課金明細への反映
課金管理のために用いることができるのは、ラベルの方です。
Google Cloud コンソールの請求先アカウントの課金レポート画面で、リソースに付与されたラベルによって「何にいくら利用料金がかかっているのか」を明細表示することができます。
例えば owner
: xxx
のようにオーナー部署のラベルを付与しておけば、利用料を社内請求するようなことも可能です。
なおラベル情報が課金に反映されるのは ラベルを付与した時より後の課金のみ です。ラベル付与前の課金情報にまで遡って反映されることはありませんので、ご注意ください。
課金情報の BigQuery エクスポート
請求先アカウントの課金明細は BigQuery にエクスポートすることができます。エクスポート内容にはラベル情報も含まれます。
BigQuery を用いて SQL により詳細に課金情報の分析を行う際に、ラベルを活用できます。
なお 2022 年 10 月のアップデートによりタグの情報も BigQuery エクスポートに 反映 されるようになりました。ただしリソースレベルで反映されるのは Compute Engine インスタンスの課金のみです。またタグ付与・削除から BigQuery エクスポートに反映されるまで最大 1 時間程度かかります。
タグの使い方
タグキー・バリューの作成
基本的なタグの使い方をご紹介します。
タグを使うにはまず タグキー・タグバリューを 組織レベル で予め作成しておく必要があります。
タグを作成するには組織レベルにて タグ管理者
( roles/resourcemanager.tagAdmin
) の IAM ロールが必要です。
コンソールの場合
Google Cloud コンソール > IAM と管理 > タグ
から + 作成
を押下することでキー・バリューを定義できます。定義すると、キーとバリューにはそれぞれ一意となる ID が払い出されます。
コマンドラインの場合
gcloud コマンドラインでは gcloud resource-manager tags keys create と gcloud resource-manager tags values create を用います。
キーを作成する際 parent
には organizations/${組織 ID}
を指定します。
gcloud resource-manager tags keys create test-tag-key \ --parent=organizations/1234567890 \ --description="This is my description"
バリューを作成する際 parent
には tagKes/
で始まる先ほど作成したキーの ID を指定します。
gcloud resource-manager tags values create test-value1 \ --parent=tagKeys/123456789012 \ --description="This is for test."
リソースへの紐づけ
フォルダ・プロジェクト
フォルダやプロジェクトに紐づけるには Google Cloud コンソール > Manage Resources (リソースの管理)
でリソースツリーを表示させます。
コンソールの場合
Google Cloud コンソールの「リソースの管理」画面へ遷移します。対象のフォルダやプロジェクトを選択して画面上部に表示される「タグ」ボタンを押下します。付与するタグキー・バリューを追加して、保存します。
コマンドラインの場合
また gcloud resource-manager tags bindings create コマンドラインも使用できます。このコマンドラインを見るとタグの binding (紐づけ) 自体も Resource Manager API の一つのリソースであるということが分かります。
対象リソースは parent
に指定しますが 完全なリソース名 を使って指定します。
gcloud resource-manager tags bindings create \ --tag-value=tagValues/123456789012 \ --parent=//cloudresourcemanager.googleapis.com/projects/my-project
個別リソース
またプロジェクト配下のリソースにも 対応しているサービス であればタグを付与できます。例として Compute Engine の VM はコンソールでのタグ紐づけできるほか、コマンドラインでも可能です。
コンソールの場合
コマンドラインの場合
基本はプロジェクトのときと同様ですがインスタンスはゾーン (ロケーション) の概念があるリソースのためロケーションを明示的に指定します。
gcloud resource-manager tags bindings create \ --tag-value=tagValues/123456789012 \ --parent=//compute.googleapis.com/projects/my-project/zones/asia-northeast1-c/instances/my-instance \ --location=asia-northeast1-c
トラブルシュート
タグの紐づけを行おうとした際に以下のようなメッセージが出るかもしれません。
ERROR: (gcloud.resource-manager.tags.bindings.create) PERMISSION_DENIED: The caller does not have permission
これは IAM 権限が不足していることを意味します。タグ作成時に付与した タグ管理者
の IAM ロールでは、実は紐づけはできません。
タグユーザー
(roles/resourcemanager.tagUser)
の IAM ロールが必要ですので、これを付与すれば解決します。
タグ紐づけの作成には resourcemanager.tagValueBindings.create
権限が必要なほか compute.instances.createTagBinding
のように各 API リソースごとのタグ紐づけ権限が必要です。
ラベルの使い方
ラベルの付与
ラベルは事前定義が必要ありません。
付与の方法はリソースごとに異なります。例として Compute Engine インスタンスであれば、新規インスタンス作成時に付与、またはインスタンス編集により付与できます。
コンソールの場合
コマンドラインの場合
インスタンスへのラベル付与の場合は gcloud compute instances add-labels を使います。コマンドラインを見て分かるように、ラベルそれ自体はリソースではありません。インスタンスというリソースに付与するメタデータです。
gcloud compute instances add-labels my-instance \ --zone=asia-northeast1-c \ --labels=my-test-label=value-01
ラベルによるフィルタ
Compute Engine を例に取ると、特定ラベルバリューがついたインスタンスのみをフィルタする、といった使い方もできます。
コンソール画面であればインスタンス一覧画面のテキストボックスに条件を指定できます。
コマンドラインであればフィルタ条件を --filter
オプションで指定します ( 参考 ) 。
gcloud compute instances list --filter="labels.my-test-label:value-01"
なお IAM 権限としてはインスタンスを管理できる IAM ロール (オーナー、 Compute 管理者等) があれば操作可能です。
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it