リソースのタグを管理する

このガイドでは、Compute Engine リソースのタグを作成および管理する方法について説明します。タグは、Google Cloud リソースに適用できる Key-Value ペアです。タグは、次のような複数の目的で使用されます。

  • リソースに特定のタグがあるかどうかに基づいて、条件付きでポリシーを許可または拒否する。
  • グローバル ネットワークのファイアウォール ポリシーとリージョン ネットワークのファイアウォール ポリシーのソースとターゲットを定義する。
  • 論理的な方法でリソースを整理する。

タグを作成し、タグとリソースの両方に対する適切なアクセス権を付与したら、タグを Key-Value ペアとして付加できます。特定のキーのリソースに付加できる値は、1 つだけです。たとえば、environment: development タグを付加する場合、environment: production タグや environment: test タグは付加できません。各リソースには、最大 50 個の Key-Value ペアを付加できます。

リソースにタグを付加するには、タグ値を Google Cloud リソースにリンクするタグ バインディング リソースを作成する必要があります。タグとその仕組みの詳細については、タグの概要をご覧ください。

始める前に

  • Resource Manager ドキュメントのタグの概要を確認します。
  • Resource Manager ドキュメントのタグの作成と管理を確認します。
  • まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    2. Set a default region and zone.

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

Compute Engine リソースのタグの作成と管理に必要な権限を取得するには、組織またはプロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、Compute Engine リソースのタグの作成と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

Compute Engine リソースのタグを作成して管理するには、次の権限が必要です。

  • タグを表示する:
    • resourcemanager.tagKeys.get
    • resourcemanager.tagKeys.list
    • resourcemanager.tagValues.list
    • resourcemanager.tagValues.get
    • compute.instances.listTagBindings
    • compute.instances.listEffectiveTags
    • resourcemanager.projects.get
  • タグを作成する:
    • resourcemanager.tagKeys.create
    • resourcemanager.tagValues.create
    • resourcemanager.tagKeys.setIamPolicy
    • resourcemanager.tagValues.setIamPolicy
  • タグを管理する:
    • resourcemanager.tagKeys.update
    • resourcemanager.tagValues.update
    • resourcemanager.tagKeys.delete
    • resourcemanager.tagValues.delete
    • resourcemanager.tagKeys.getIamPolicy
    • resourcemanager.tagValues.getIamPolicy
    • resourcemanager.tagKeys.setIamPolicy
    • resourcemanager.tagValues.setIamPolicy
  • コンピューティング インスタンスのタグを追加または削除します。
    • compute.instances.createTagBinding
    • compute.instances.deleteTagBinding
    • resourcemanager.tagValueBindings.create
    • resourcemanager.tagValueBindings.delete

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

サポートされているリソース

Compute Engine では、次のリソースのタグ付けがサポートされています。

  • リソースの作成後のみ:

    • マネージド インスタンス グループ(MIG)
    • イメージ
    • スナップショット
    • ほとんどのネットワーキング リソース(ネットワーク、サブネットワーク、ファイアウォール、ヘルスチェックなどのリソース)。
  • リソースの作成中と作成後: 仮想マシン(VM)インスタンスとディスク

リソースにタグを追加する

既存のタグを特定のリソースに付加できます。リソースの作成後、次の手順に沿ってそのリソースにタグを付加します。

コンソール

リソースの種類によっては、正確な手順が異なる場合があります。たとえば、次の手順で VM にタグを付加します。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. プロジェクトを選択し、[続行] をクリックします。

  3. [名前] 列で、タグを追加する VM の名前をクリックします。

  4. [VM インスタンスの詳細] ページで、次の手順を実施します。

    1. [編集] をクリックします。
    2. [基本情報] セクションで [タグを管理] をクリックし、インスタンスに必要なタグを追加します。
    3. [保存] をクリックします。

gcloud

これらのフラグの使用方法については、Resource Manager ドキュメントのリソースへのタグ付けをご覧ください。

たとえば、次のコマンドにより VM にタグが付加されます。

gcloud resource-manager tags bindings create \
    --location LOCATION_NAME \
    --tag-value=tagValues/TAGVALUE_ID \
    --parent=//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID

次のように置き換えます。

  • LOCATION_NAME: ターゲット リソースを含むリージョン(この例では VM インスタンスのリージョン)
  • TAGVALUE_ID: タグ値の数値 ID
  • PROJECT_NUMBER: ターゲット リソースを含むプロジェクトの数値 ID
  • ZONE: ターゲット リソースを含むゾーン(この例では、VM インスタンスのゾーン)
  • VM_ID: VM インスタンス ID

REST

リソースにタグを付加するには、まず、タグ値の永続 ID または名前空間の名前と、リソースの永続 ID を含むタグ バインディングの JSON 表現を作成する必要があります。タグ バインディングの形式の詳細については、tagBindings リファレンスをご覧ください。

VM インスタンスなどのゾーンリソースにタグを付加するには、リソースが配置されているリージョン エンドポイントで tagBindings.create メソッドを使用します。例:

POST https://LOCATION_NAME-cloudresourcemanager.googleapis.com/v3/tagBindings

リクエスト本文は次の 2 つのオプションのいずれかです。

{
  "parent": "//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID",
  "tagValue": "tagValue/TAGVALUE_ID"
}
{
  "parent": "//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID",
  "tagValueNamespacedName": TAGVALUE_NAMESPACED_NAME
}

次のように置き換えます。

  • LOCATION_NAME: ターゲット リソースを含むリージョン(この例では VM インスタンスのリージョン)
  • PROJECT_NUMBER: ターゲット リソースを含むプロジェクトの数値 ID
  • ZONE: ターゲット リソースを含むゾーン(この例では、VM インスタンスのゾーン)
  • VM_ID: VM インスタンス ID
  • TAGVALUE_ID: 付加されるタグ値の永続 ID(例: 4567890123
  • TAGVALUE_NAMESPACED_NAME: 付加されるタグ値の名前空間名(形式は parentNamespace/tagKeyShortName/tagValueShortName

リソースの作成時にリソースにタグを追加する

状況によっては、リソースの作成後ではなく、リソースの作成時にリソースにタグを付ける場合があります。

コンソール

リソースの種類によっては、正確な手順が異なる場合があります。VM の場合、次の手順を実施します。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. プロジェクトを選択し、[続行] をクリックします。

  3. [インスタンスを作成] をクリックします。[インスタンスの作成] ページが表示され、[マシンの構成] ペインが表示されます。

  4. ナビゲーション メニューで、[詳細設定] をクリックします。表示された [詳細設定] ペインで、次の操作を行います。

    1. [タグとラベルを管理] セクションを開きます。
    2. [タグを追加] をクリックします。
    3. 開いた [タグ] ペインで、手順に沿ってインスタンスにタグを追加します。
    4. [保存] をクリックします。
  5. インスタンスの他の構成オプションを指定します。詳細については、インスタンス作成時の構成オプションをご覧ください。

  6. VM を作成して起動するには、[作成] をクリックします。

gcloud

リソースの作成時にタグをリソースに付加するには、それぞれの create コマンドで --resource-manager-tags フラグを追加します。たとえば、VM にタグを付加するには、次のコマンドを使用します。

  gcloud compute instances create INSTANCE_NAME \
      --zone=ZONE \
      --resource-manager-tags=tagKeys/TAGKEY_ID=tagValues/TAGVALUE_ID

次のように置き換えます。

  • INSTANCE_NAME: VM インスタンスの名前
  • ZONE: VM インスタンスを含むゾーン
  • TAGKEY_ID: タグキー番号の数値 ID
  • TAGVALUE_ID: 付加されているタグ値の永続的な数値 ID(例: 4567890123

複数のタグを指定する場合は、タグをカンマで区切ります(例: TAGKEY1=TAGVALUE1,TAGKEY2=TAGVALUE2)。

REST

次の URL に POST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances

次のリクエスト JSON 本文を含めます。

{
  "name": INSTANCE_NAME,
  "params": {
    "resourceManagerTags": {
      "tagKeys/TAGKEY_ID": "tagValues/TAGVALUE_ID",
    },
  }
  // other fields omitted
}

次のように置き換えます。

  • INSTANCE_NAME: VM インスタンスの名前
  • TAGKEY_ID: タグキー番号の数値 ID
  • TAGVALUE_ID: 付加されているタグ値の永続的な数値 ID(例: 4567890123

ファイアウォール ルールでタグを使用する

特定の Compute Engine インスタンスへのネットワーク トラフィックを安全に有効にするには、ネットワーク タグまたはセキュアタグをインスタンスに適用します。その後、そのタグをターゲットとするファイアウォール ルールを作成できます。これは、インスタンスへのアクセスを大規模に管理する場合に役立ちます。

たとえば、ウェブサーバーを実行するコンピューティング インスタンスがあり、標準の HTTP ポート(80)で一般公開する必要がある新しいウェブ アプリケーションを作成したとします。ネットワーク タグまたはセキュアタグを使用して、ウェブサーバーが実行されているコンピューティング インスタンスにのみ HTTP アクセスを許可するファイアウォール ルールを実装できます。

ファイアウォール ポリシーで使用するタグを作成する手順については、以下をご覧ください。

  • VPC ファイアウォール ルールでネットワーク タグを使用するには、ネットワーク タグを追加するをご覧ください。
  • 階層型ファイアウォール ポリシー、グローバルおよびリージョンごとのネットワーク ファイアウォール ポリシーでセキュアタグを使用する場合、または VPC ネットワーク ピアリングを使用して接続された送信元で使用する場合は、セキュアタグを作成して管理するをご覧ください。

サービス アカウントまたはネットワーク タグを使用してネットワーク上り(内向き)ルールのターゲットと送信元を定義するかどうかについては、サービス アカウントとネットワーク タグによるフィルタリングをご覧ください。

リソースのタグの取り外し

タグ バインディング リソースを削除すると、リソースからタグを取り外すことができます。

タグを取り外す方法については、Resource Manager ドキュメントのリソースのタグの取り外しをご覧ください。

コンソール

リソースの種類によっては、正確な手順が若干異なる場合があります。たとえば、次の手順で VM からタグを取り外します。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. プロジェクトを選択し、[続行] をクリックします。

  3. [名前] 列で、タグを削除するインスタンスの名前をクリックします。

  4. [VM インスタンスの詳細] ページで、次の手順を実施します。

    1. [編集] をクリックします。
    2. リソース マネージャーのタグの場合は、[基本情報] セクションで [タグを管理] をクリックします。インスタンスに必要なタグを削除します。削除できるのは、インスタンスに直接追加されたタグのみです。
    3. ネットワーク タグの場合は、[ネットワーキング] セクションで、[ネットワーク タグ] リストからタグを削除します。
    4. [保存] をクリックします。

gcloud

コンピューティング インスタンスからタグの適用を解除するには、resource-manager tags bindings delete コマンドを使用します。

gcloud resource-manager tags bindings delete \
    --location LOCATION_NAME \
    --tag-value=tagValues/TAGVALUE_ID \
    --parent //compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/INSTANCE_ID

次のように置き換えます。

  • LOCATION_NAME: ターゲット リソースのゾーン(例: us-central1-a
  • TAGVALUE_ID: タグキーの数値 ID
  • PROJECT_NUMBER: ターゲット リソースを含むプロジェクトの数値 ID
  • ZONE: ゾーン名(例: us-central1-a
  • INSTANCE_ID: コンピューティング インスタンスの数値 ID

既存のタグ バインディングを別のタグ バインディングに更新または置換するには、古いタグ バインディングを切断して新しいタグ バインディングをアタッチします。

REST

コンピューティング インスタンスなどのリソースに付加されているタグ バインディングを削除するには、リソースが配置されているリージョン エンドポイントで tagBindings.delete メソッドを使用します。

DELETE https://LOCATION-cloudresourcemanager.googleapis.com/v3/{name=TAGBINDINGS_NAME}

次のように置き換えます。

  • LOCATION: リソースのリージョン エンドポイント(例: us-central1
  • TAGBINDINGS_NAME は TagBinding の永続 ID(例: tagBindings/%2F%2Fcloudresourcemanager.googleapis.com%2Fprojects%2F1234567890/tagValues/567890123456

リソースに付加されたタグの表示

タグを一覧表示する方法の詳細な手順については、Resource Manager ドキュメントのリソースに付加されたタグの一覧表示をご覧ください。

コンソール

リソースの種類によっては、正確な手順が若干異なる場合があります。たとえば、VM のタグを表示する手順は、以下のとおりです。

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. プロジェクトを選択し、[続行] をクリックします。

  3. [名前] 列で、タグを表示する VM の名前をクリックします。

  4. [VM インスタンスの詳細] ページの [タグ] セクションで、目的のタグを探します。

gcloud

リソースに直接適用されたタグ バインディングのリストを取得するには、gcloud resource-manager tags bindings list コマンドを使用します。--effective フラグを追加すると、このリソースが継承するタグのリストも返されます。次に例を示します。

gcloud resource-manager tags bindings list \
    --location=LOCATION_NAME \
    --parent //compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID

次のように置き換えます。

  • LOCATION_NAME: ターゲット リソースのゾーン(例: us-central1-a
  • PROJECT_NUMBER: ターゲット リソースを含むプロジェクトの数値 ID
  • ZONE: ゾーン名(例: us-central1-a
  • VM_ID: VM インスタンスの ID

--effective フラグを tags bindings list コマンドに追加すると、このリソースが継承したすべてのタグのリストも返されます。

出力は次のようになります。

namespacedTagKey: 961309089256/environment
namespacedTagValue: 961309089256/environment/production
tagKey: tagKeys/417628178507
tagValue: tagValues/247197504380
inherited: true

リソースで評価されるすべてのタグが直接付加されている場合は、inherited フィールドが false となり省略されます。

REST

Compute Engine インスタンスなどのリージョン リソースに付加されているタグ バインディングを一覧表示するには、リソースが存在するリージョン エンドポイントで tagBindings.list メソッドを使用します。次に例を示します。

GET https://LOCATION_NAME-cloudresourcemanager.googleapis.com/v3/tagBindings

{
    "parent": "//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID"
}

次のように置き換えます。

  • LOCATION_NAME: ターゲット リソースのリージョン(例: us-central1
  • PROJECT_NUMBER: ターゲット リソースを含むプロジェクトの数値 ID
  • ZONE: ゾーン名(例: us-central1-a
  • VM_ID: VM インスタンスの ID

次のステップ