ネットワーク タグの構成

ネットワーク タグは、Compute Engine 仮想マシン(VM)インスタンスに追加できるテキスト属性です。タグを使用して、特定の VM インスタンスに適用されるファイアウォール ルールルートを作成できます。

ネットワーク タグを追加できるのは、VM インスタンスまたはインスタンス テンプレートのみです。他の GCP リソースにタグを付けることはできません。ネットワーク タグは、インスタンスの新規作成時に割り当てることができます。割り当てられたタグセットは、後でいつでも編集できます。ネットワーク タグを編集する際に、インスタンスを停止する必要はありません。

仕様

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

権限

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

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

制限

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

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

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

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

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

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

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

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

ターゲットタグは、ルールが適用される GCP VM を定義します。これにより、一致するネットワーク タグを持つインスタンスのプライマリ内部 IP アドレスにルールが適用されるようになります。

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

  • 上りのルールは、VPC ネットワークに入るトラフィックに適用されます。上りのルールのターゲットは、GCP の宛先の VM です。

  • 下りのルールは、VPC ネットワークから送信されるトラフィックに適用されます。下りのルールのターゲットは、GCP のソースの VM です。

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

上りファイアウォール ルールのソースフィルタ

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

上りファイアウォール ルールのソースタグでは、一致するネットワーク タグを持つインスタンスのプライマリ内部 IP アドレスから送信されるトラフィックのソースを定義します。

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

ルートの操作

ルートを作成するときに、一致するネットワーク タグを持つインスタンスのプライマリ内部 IP アドレスから送信されたトラフィックにのみ適用されるようにタグを指定できます。

タグの追加と削除

タグの追加

Console

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

gcloud

新しいタグをインスタンスに割り当てるには、次の gcloud コマンドを使用します。[INSTANCE-NAME] をインスタンスの名前に、[ZONE] の部分はゾーンに、[TAGS] の部分は文字列のカンマ区切りリストに置き換えてください。

gcloud compute instances add-tags [INSTANCE-NAME] \
    --zone [ZONE] \
    --tags [TAGS]

詳しくは、gcloud のドキュメントをご覧ください。

タグの削除

Console

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

gcloud

インスタンスからタグを削除するには、次の gcloud コマンドを使用します。[INSTANCE-NAME] をインスタンスの名前に、[ZONE] の部分はゾーンに、[TAGS] の部分は削除するタグのカンマ区切りリストに置き換えてください。

gcloud compute instances remove-tags [INSTANCE-NAME] \
    --zone [ZONE] \
    --tags [TAGS]

詳しくは、gcloud のドキュメントをご覧ください。

直接 API リクエスト

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

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

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

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

    GET https://www.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="
    },
    ...
    }
    

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

    gcloud compute instances describe [INSTANCE-NAME] \
       --zone [ZONE] \
       --format="get(tags.fingerprint)"
  2. instance().setTags メソッドに対して POST リクエストを行います。リクエスト本文には、fingerprint 値とともに、インスタンスに関連付けるすべてのタグを含めてください。

    リクエストの例:

    POST https://www.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,
    ...
    }
    

次のステップ

このページは役立ちましたか?評価をお願いいたします。