ネットワーク タグの構成

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

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

仕様

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

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

権限

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

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

制限

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

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

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

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

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

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

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

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

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

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

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

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

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

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

上り(内向き)ファイアウォール ルールを作成するときは、ソースを指定する必要があります。ソースを定義するには、内部 IP アドレスまたは外部 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 リクエストを実行します。Cloud 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="
        },
        ...
        }
        

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

        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,
        ...
        }
        

次のステップ