ネットワーク タグを追加する

タグは、Compute Engine 仮想マシン(VM)インスタンスやインスタンス テンプレートなどのリソースのタグフィールドに追加される文字からなる文字列です。タグは個別のリソースではないため、個別に作成することはできません。その文字列を持つすべてのリソースには、そのタグがあると考えられます。タグを使用して、特定の VM インスタンスに適用されるファイアウォール ルールルートを作成できます。

新しい VM の作成時にネットワーク タグを割り当てることも、割り当てたタグのセットを後からいつでも編集することもできます。VM を停止せずにネットワーク タグを編集できます。

仕様

インスタンスに割り当てたネットワーク タグは、インスタンスのすべてのネットワーク インターフェースに適用されます。ネットワーク タグは、インスタンスのネットワーク インターフェースに直接接続されている VPC ネットワークにのみ適用されます。この仕組みは、VPC ネットワーク ピアリングについても当てはまります。ピアリングされたネットワークも、やはり別のネットワークであるためです。したがってネットワーク タグが意味を持つのも、インスタンスのネットワーク インターフェースが接続されているネットワーク内に限られます。

ネットワーク タグは小文字で始まる必要があり、小文字、数字、ハイフンを使用できます。タグの末尾は小文字または数字にしてください。

権限

このページで説明するタスクを実行するには、次の IAM 役割が必要です。詳しくは、Compute Engine IAM の役割をご覧ください。

タスク 必要な役割
インスタンスを新規作成するときにネットワーク タグを割り当てる プロジェクトのオーナーまたは編集者あるいはインスタンス管理者
既存のインスタンスのネットワーク タグを追加または削除する
ファイアウォール ルールを追加、削除、編集する プロジェクトのオーナーまたは編集者あるいはセキュリティ管理者

上限

ネットワーク タグには次の制限が適用されます。

制限 説明
VM ごとの最大タグ数 64 VM のすべてのタグは一意でなければなりません。VM ごとに異なるタグを最大 64 個割り当てることができます。
各タグの最大文字数 63
タグに使用できる文字 小文字、数字、ダッシュ さらに
• タグの先頭は小文字にする必要があります。
• タグの末尾は数字または小文字のいずれかにする必要があります。

ファイアウォール ルールとルート

ネットワーク タグを使用すると、特定のインスタンスまたは一連のインスタンスにファイアウォール ルールとルートを適用できます。

  • ターゲットタグとソースタグを使用して、特定のインスタンスに適用されるファイアウォール ルールを作成します。

  • タグを使用して、特定のインスタンスに適用されるルートを作成します。

ファイアウォール ルールのターゲット

Google Cloud のすべてのファイアウォール ルールには、適用先のインスタンスを定義するターゲットを含める必要があります。デフォルトのターゲットはネットワーク内のすべてのインスタンスですが、ターゲットタグまたはターゲット サービス アカウントのいずれかを使用することで、特定のインスタンスをターゲットとして指定できます。

ターゲットタグは、ルールが適用される Google Cloud VM を定義します。ルールは特定の VPC ネットワークに適用されます。これは、一致するネットワーク タグを持つ VPC ネットワークに接続されているインスタンスのネットワーク インターフェースに関連付けられているプライマリ内部 IP アドレスに適用されます。

ターゲットは、上りおよび下りのどちらのファイアウォール ルールにも設定できます。

  • 上り(内向き)のルールは、VPC ネットワークに入るトラフィックに適用されます。 上り(内向き)のルールの場合、ターゲットは Google Cloud の宛先の VM です。

  • 下り(外向き)のルールは、VPC ネットワークから送信されるトラフィックに適用されます。下り(外向き)のルールの場合、ターゲットは Google Cloud のソースの VM です。

たとえば、TCP ポート 80 ですべてのソースからのトラフィックを許可する上り(内向き)のファイアウォール ルールについて考えてみましょう。このルールのターゲットタグは http-server です。このルールは、http-server ネットワーク タグを持つインスタンスにのみ適用されます。つまり、ポート 80 で受信されたトラフィックは、これらのインスタンスに送信できます。

上り(内向き)ファイアウォール ルールのソースフィルタ

上り(内向き)ファイアウォール ルールを作成するときは、ソースを指定する必要があります。ソースを定義するには、内部 IP アドレスまたは外部 IP アドレスの範囲を使用するか、特定のインスタンスを指定します。インスタンスを指定する場合は、ソースタグまたはソース サービス アカウントを使用します。

VPC ネットワークに適用された上り(内向き)ファイアウォール ルールのソースタグは、一致するネットワーク タグを持つインスタンスの VPC ネットワークに接続されたネットワーク インターフェースに関連付けられているプライマリ内部 IP アドレスからのトラフィックのソースを定義します。

IP 範囲とソースタグの組み合わせ、または IP 範囲とソース サービス アカウントの組み合わせを使用できます。ただし、同一のルール内でネットワーク タグとサービス アカウントの両方を使用することはできません。ソースタグとサービス アカウントについて詳しくは、サービス アカウントによるフィルタリングとネットワーク タグによるフィルタリングをご覧ください。

考慮事項

ソースタグ付きの上り(内向き)のファイアウォール ルールを使用すると、反映されるのが遅れる場合があります。通常は数秒ですが、まれに数分程度になることがあります。次の変更を行うと、上り(内向き)のファイアウォール ルールは関連付けられたインスタンスに適用されるか、削除されます。

  • ルールのソースタグに関連付けられたタグを含むインスタンスを起動または停止する
  • ルールのターゲットタグに関連付けられたタグを持つインスタンスを起動する
  • ルールのソースまたはターゲット フィールドにタグが使用されている場合に、インスタンスからタグを追加または削除する
  • ルールにソースタグまたはターゲットタグを追加または削除する

この反映遅延は、ソースタグを使用する上り(内向き)のルールにのみ適用されます。その他のファイアウォール ルールはすべて、インスタンスですぐに有効になります。たとえば、ソース IP アドレス範囲とターゲットタグを使用する上り(内向き)のルールでは、反映遅延はありません。

静的ルートの操作

静的ルートを作成するときに VPC ネットワークを指定します。その後、指定した VPC ネットワークに一致するネットワーク タグを持つ VM から送信されたトラフィックにのみルートが適用されるように、タグを指定できます。

タグの追加、表示、削除

VM インスタンスの作成時にネットワーク タグを指定できます。既存の VM に対してタグの追加と削除を行うこともできます。

VM 作成時にタグを追加する

コンソール

  1. [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [インスタンスを作成] をクリックします。
  3. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックしてそのセクションを開きます。
  4. [ネットワーキング] タブをクリックします。
  5. [ネットワーク タグ] フィールドで、1 つ以上のタグをカンマで区切って指定します。
  6. VM の他のフィールドにデータを入力します。
  7. [作成] をクリックします。

gcloud

新しいタグをインスタンスに割り当てるには、次の gcloud コマンドを実行します。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --tags TAGS \
    ...other parameters as needed.

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

  • INSTANCE_NAME: インスタンスの名前。
  • ZONE: インスタンスのゾーン。
  • TAGS: タグのカンマ区切りリスト。

詳細については、gcloud のドキュメントをご覧ください。

Terraform

Terraform リソースを使用して、ネットワーク タグを持つ VM インスタンスを作成できます。

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace this with your project ID in quotes
  zone         = "southamerica-east1-b"
  name         = "backend-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network = "default"
  }
  tags = ["health-check", "ssh"]
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

既存の VM にタグを追加する

コンソール

  1. [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. インスタンス名をクリックします。
  3. [VM インスタンスの詳細] ページで、[編集] をクリックします。
  4. [ネットワーク タグ] セクションで、1 つ以上のタグをカンマで区切って指定します。
  5. [保存] をクリックします。

gcloud

新しいタグをインスタンスに割り当てるには、次の gcloud コマンドを実行します。

gcloud compute instances add-tags INSTANCE_NAME \
    --zone ZONE \
    --tags TAGS

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

  • INSTANCE_NAME: インスタンスの名前。
  • ZONE: インスタンスのゾーン。
  • TAGS: タグのカンマ区切りリスト。

詳細については、gcloud のドキュメントをご覧ください。

タグを表示する

コンソール

  1. [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. [ネットワーク タグ] 列でタグを確認します。

    必要に応じて、[列表示オプション] をクリックして [ネットワーク タグ] 列を追加します。

  3. 特定のタグが付いているインスタンスを表示するには、フィルタで [ネットワーク タグ] プロパティを選択し、フィルタするタグを入力します。

gcloud

タグとそのインスタンスをリストするには、次のコマンドを実行します。

gcloud compute instances list --format='table(name,status,tags.list())'

特定のタグが付いているインスタンスのリストを表示するには、次のコマンドを実行します。

gcloud compute instances list --filter='tags:TAG_EXPRESSION'

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

  • TAG_EXPRESSION: フィルタする式。例: tag1tag1 OR tag2tag1 AND tag2出力のフィルタリングの詳細については、gcloud topic filter をご覧ください。

タグを削除する

コンソール

  1. [VM インスタンス] ページに移動します。
    [VM インスタンス] ページに移動
  2. インスタンス名をクリックします。
  3. [VM インスタンスの詳細] ページで、[編集] をクリックします。
  4. [ネットワーク タグ] セクションで、削除(X)をクリックしてタグを削除します。
  5. [保存] をクリックします。

gcloud

タグをインスタンスから削除するには、次の gcloud コマンドを実行します。

gcloud compute instances remove-tags INSTANCE_NAME \
    --zone ZONE \
    --tags TAGS

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

  • INSTANCE_NAME: インスタンスの名前。
  • ZONE: インスタンスのゾーン。
  • TAGS: タグのカンマ区切りリスト。

詳細については、gcloud のドキュメントをご覧ください。

直接 API リクエスト

インスタンスに関連付けられたネットワーク タグを設定するには、直接 API リクエストを実行します。Google Cloud コンソールや gcloud コマンドの使用とは異なり、直接 API リクエストによるタグの更新では、既存のタグは保持されません。この方法でタグを更新する場合は、必ずインスタンスに関連付けられるタグの完全なセットを指定するようにしください。

直接 API リクエストを使用してタグを更新するには:

  1. タグに関連付けられている最新のフィンガープリントを特定します。フィンガープリントは、同時 API リクエストによる衝突を防ぐために使用されます。インスタンスのネットワーク タグを更新するプロセスは、インスタンスのメタデータを更新するプロセスと似ています。

    インスタンスに対して GET リクエストを実行します。次に例を示します。

    GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance
    

    回答の tags.fingerprint プロパティを探します。

    200 OK
    {
    ...
    "tags": {
     "items": [
     "http-server",
     "db-client"
     ],
     "fingerprint": "MW8EqhxILtc="
    },
    ...
    }
    

    また fingerprint を取得するには、次の例のように、gcloud コマンドを使用することもできます。

    gcloud compute instances describe INSTANCE_NAME \
       --zone ZONE \
       --format="get(tags.fingerprint)"
  2. instance().setTags メソッドに POST リクエストを送信します。リクエスト本文には、fingerprint 値とともに、インスタンスに関連付けるすべてのタグが含まれている必要があります。

    リクエストの例:

    POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/setTags
    {
     "items": [
      "http-server",
      "db-client",
      "allow-internet-access"
      ],
     "fingerprint": "MW8EqhxILtc="
    }
    

    レスポンスの例:

    200 OK
    {
          "kind": "compute#operation",
          "id": "9251830049681941507",
          "name": "operation-1442414898862-51fde63aa57b1-422323e0-c439fb04",
          "zone": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f",
          "operationType": "setTags",
          "targetLink": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance",
          "targetId": "4392196237934605253",
          "status": "PENDING",
          "user": "user@example.com",
          "progress": 0,
    ...
    }
    

次のステップ