変更されない固定外部 IP アドレスが仮想マシン(VM)インスタンスに必要な場合、次のいずれかのオプションを使用してインスタンスの静的外部 IP アドレスを取得できます。
- 静的外部 IP アドレスを予約して、そのアドレスを新しい VM インスタンスに割り当てます。
- 既存のエフェメラル外部 IP アドレスを昇格させて静的外部 IP アドレスにします。
内部 Compute Engine ネットワーク上の静的 IP アドレスが必要な場合は、静的内部アドレスの予約をご覧ください。
Compute Engine では、各 VM インスタンスが複数のネットワーク インターフェースを持つことができます。各インターフェースは、内部 IP アドレスと外部 IP アドレスの両方を持つことができます。転送ルールには、外部負荷分散のための外部 IP アドレスや、内部負荷分散のための内部アドレスを指定できます。IP アドレスについて詳しくは、IP アドレスのドキュメントをご覧ください。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- IP アドレスをお読みください。
新しい静的外部 IP アドレスの予約
静的外部 IP アドレスはプロジェクト用に予約される外部 IP アドレスであり、解放するまで予約されたままになります。お客様やユーザーがサービスにアクセスする際に利用する IP アドレスがある場合、該当プロジェクトでのみ使用できるようにその IP アドレスを予約できます。また、エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させることもできます。
次の 2 種類の外部 IP アドレスを予約できます。
- リージョン IP アドレス。ネットワーク インターフェースを 1 つ以上備えた VM インスタンスや、ネットワーク ロードバランサで使用可能。
- グローバル IP アドレス。HTTP(S)、SSL プロキシ、TCP プロキシのグローバル ロードバランサで使用可能。
静的外部 IP アドレスを予約するには gcloud
コマンドライン ツールまたは API を使用します。予約したアドレスは、インスタンスの作成時に割り当てるか、既存のインスタンスに割り当てます。
制限事項
一度に複数のリソースが同じ静的外部 IP アドレスを使用することはできません。
IP アドレスをリソースに割り当てた後に静的アドレスかエフェメラル アドレスかを確認するには、そのプロジェクトに予約されている静的外部 IP アドレスのリストで調べる以外に方法はありません。プロジェクトで使用可能な静的外部 IP アドレスのリストを表示するには、
addresses list
サブコマンドを使用します。各 VM インスタンスは複数のネットワーク インターフェースを持つことができますが、各インターフェースはエフェメラルか静的である外部 IP アドレスを 1 つだけ持つことができます。
注: ネットワーク インターフェースは複数の転送ルールからトラフィックを受信できますが、ルールの中には他の外部 IP アドレスを対象とするものもあります。任意の数の外部 IP アドレスがこれらの転送ルールを介してネットワーク インターフェースを参照できますが、各ネットワーク インターフェースはパケットをインターフェースの内部 IP アドレスに変換する外部 IP アドレスを 1 つだけ持つことができます。
負荷分散と転送ルールの詳細については、負荷分散のドキュメントをご覧ください。
Console
Cloud Console で、[静的アドレスの予約] ページに移動します。
新しいアドレスの名前を指定します。
このアドレスが
IPv4
かIPv6
かを指定します。IPv6
アドレスは、グローバルのみになり、グローバル HTTP(S)、SSL プロキシ、TCP プロキシのロードバランサでのみ使用できます。この IP アドレスがリージョン アドレスかグローバル アドレスかを選択します。インスタンスまたはネットワーク ロードバランサ用に静的 IP アドレスを予約する場合は、[リージョン] を選択します。HTTP(S)、SSL プロキシ、TCP プロキシのロードバランサ用に静的 IP アドレスを予約する場合は、[グローバル] を選択します。
リージョン IP アドレスの場合は、アドレスを作成するリージョンを選択します。
省略可。IP アドレスを割り当てるリソースを選択します。
[予約] をクリックして IP アドレスを予約します。
gcloud
gcloud compute
を使用して静的外部 IP アドレスを予約するには、compute addresses create
コマンドを使用します。
グローバル IP アドレスを予約する場合は、--global
フィールドと --ip-version
フィールドを使用します。--ip-version
フィールドには IPV4
または IPV6
を指定します。IPv6
アドレスは、グローバルのみになり、グローバル HTTP(S)、SSL プロキシ、TCP プロキシのロードバランサでのみ使用できます。
ADDRESS_NAME
は、このアドレスに付ける名前に置き換えます。
gcloud compute addresses create ADDRESS_NAME \ --global \ --ip-version [IPV4 | IPV6]
リージョン IP アドレスを予約する場合は、--region
フィールドを使用します。
gcloud compute addresses create ADDRESS_NAME \ --region REGION
次のように置き換えます。
ADDRESS_NAME
: このアドレスに付ける名前。REGION
: リクエストの目的の IP アドレス。これは、IP アドレスを割り当てるリソースと同じリージョンにする必要があります。すべてのリージョン IP アドレスはIPV4
です。
結果を表示するには、compute addresses describe
コマンドを使用します。
gcloud compute addresses describe ADDRESS_NAME
API
リージョン IPv4 アドレスを作成するには、リージョン addresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
リクエスト本文は次のようにします。
{ name: "ADDRESS_NAME" }
次のように置き換えます。
ADDRESS_NAME
: アドレスに付ける名前。REGION
: このリクエストのリージョン名。PROJECT_ID
: このリクエストのプロジェクト ID。
グローバル静的 IPv4 アドレスの場合は、globalAddresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
リクエスト本文は次のようにします。
{ name: "ADDRESS_NAME" }
グローバル静的 IPv6 アドレスの場合は、globalAddresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
リクエスト本文は次のようにします。
{ "name": "ADDRESS_NAME", "ipVersion": "IPV6" }
addresses.get
メソッドを使用して結果を確認します。
新しい VM インスタンスへの静的外部 IP アドレスの割り当て
VM インスタンスを作成するとき、エフェメラル外部 IP アドレスが自動的に割り当てられます。エフェメラル外部 IP アドレスを使用したくない場合は、明示的に静的外部 IP アドレスをインスタンスに割り当てることができます。
Console
- Cloud Console で、[VM インスタンス] ページに移動します。
- [インスタンスを作成] をクリックします。
- [新しいインスタンスの作成] ページで、インスタンスのプロパティを入力します。
- [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションを展開します。
- [ネットワーキング] をクリックします。
- [ネットワーク インターフェース] で、デフォルトのネットワーク インターフェースをクリックして編集します。
- [外部 IP] セクションの下で、プルダウン メニューから予約した静的外部 IP アドレスを選択します。
- [完了] をクリックして、デフォルトのネットワーク インターフェースの変更を終了します。
- [作成] をクリックしてインスタンスを作成します。
gcloud
静的外部 IP アドレスを割り当てるには、インスタンス作成時に --address
フラグを使用し、静的外部 IP アドレスを指定します。
gcloud compute instances create INSTANCE_NAME --address IP_ADDRESS
次のように置き換えます。
INSTANCE_NAME
: インスタンスの名前。IP_ADDRESS
: インスタンスに割り当てる IP アドレス。アドレス名ではなく IP アドレスを使用してください。
API
新しいインスタンスを作成するリクエストで、networkInterfaces[].accessConfigs[].natIP
プロパティと、使用する外部 IP を明示的に指定します。例:
{ "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "networkInterfaces": [{ "accessConfigs": [{ "type": "ONE_TO_ONE_NAT", "name": "External NAT", "natIP": "IP_ADDRESS" }], "network": "global/networks/default" }], "disks": [{ "autoDelete": "true", "boot": "true", "type": "PERSISTENT", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/v20150818" } }] }
既存のインスタンスへの外部 IP アドレスの割り当てまたは変更
既存のインスタンスに外部 IP アドレス(エフェメラルまたは静的のいずれか)を割り当てる、またはそれを変更するには、インスタンスのアクセス構成を変更します。
インスタンスは複数のインターフェースを持つことができ、各インターフェースは外部 IP アドレスを持つことができます。インスタンスにすでに外部 IP アドレスが与えられている場合は、最初に古いアクセス構成を削除してアドレスを除去する必要があります。その後、新しい外部 IP アドレスを含む新しいアクセス構成を追加します。
Console
- Cloud Console で、[VM インスタンス] ページに移動します。
- 外部 IP アドレスを割り当てるインスタンスの名前をクリックします。インスタンスの詳細ページが表示されます。
インスタンスの詳細ページで、次の手順を実行します。
- [編集] をクリックします。
[ネットワーク インターフェース] で [編集] ボタンをクリックします。
[外部 IP] で、インスタンスに割り当てるエフェメラルまたは静的な外部 IP アドレスを選択します。
[完了] をクリックします。
[保存] をクリックします。
gcloud
(省略可)静的外部 IP アドレスを予約します。
静的外部 IP アドレスを割り当てる場合は、他のリソースで使用されていないアドレスを取得するため、アドレスを予約する必要があります。必要であれば、手順に沿って新しい静的外部 IP アドレスを予約するか、静的外部 IP アドレスの割り当てを解除します。
エフェメラル外部 IP アドレスを使用する場合は、この手順をスキップします。エフェメラル外部 IP アドレスは Compute Engine によってランダムに割り当てられます。
既存のアクセス構成を削除します。
インスタンスごとに 1 つのアクセス構成を設定できます。新しいアクセス構成をインスタンスに割り当てる前に、
gcloud compute instances describe
リクエストを発行してインスタンスにアクセス構成が存在するかどうかを確認します。gcloud compute instances describe INSTANCE_NAME
既存のアクセス構成がある場合は、次の形式で表示されます。
networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: external-nat natIP: 130.211.181.55 type: ONE_TO_ONE_NAT
新しいアクセス構成を追加する前に、
instances delete-access-config
サブコマンドを使用して既存のアクセス構成を削除する必要があります。gcloud compute instances delete-access-config INSTANCE_NAME \ --access-config-name "ACCESS_CONFIG_NAME"
次のように置き換えます。
INSTANCE_NAME
: インスタンスの名前。ACCESS_CONFIG_NAME
: 削除するアクセス構成。引用符の中に完全な名前を指定してください。
新しい外部 IP アドレスを追加します。
instances add-access-config
サブコマンドを使用して新しい外部 IP アドレスを追加します。注:IP_ADDRESS
を静的 IP の名前に置き換えないでください。実際の IP アドレスを指定する必要があります。gcloud compute instances add-access-config INSTANCE_NAME \ --access-config-name "ACCESS_CONFIG_NAME" --address IP_ADDRESS
次のように置き換えます。
INSTANCE_NAME
: インスタンスの名前。ACCESS_CONFIG_NAME
: このアクセス構成の名前。引用符の中に完全な名前を指定してください。IP_ADDRESS
: 追加する IP アドレス。
Compute Engine で静的外部 IP アドレスを使用せずにエフェメラル外部 IP アドレスを割り当てる場合は、
--address IP_ADDRESS
プロパティを省略します。gcloud compute instances add-access-config INSTANCE_NAME \ --access-config-name "ACCESS_CONFIG_NAME"
エフェメラル外部 IP アドレスの昇格
インスタンスにエフェメラル外部 IP アドレスが割り当てられいる場合、その IP アドレスを永続的にプロジェクトに割り当てるには、エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させます。エフェメラル外部 IP アドレスを予約済みに昇格しても、Google Cloud ではインスタンスに送信されたパケットは破棄されません。これは、インスタンスに直接送信されたパケットとロードバランサによって送信されたパケットの両方に当てはまります。
Console
- Cloud Console で、[外部 IP アドレス] ページに移動します。
- 昇格する IP アドレスの [タイプ] 列で、アドレスタイプを [静的] に変更します。
- 新しい静的 IP アドレスの名前を指定して [予約] をクリックします。
gcloud
エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させるには、--addresses
フラグにエフェメラル外部 IP アドレスを指定して compute addresses create
コマンドを実行します。エフェメラル リージョン IP アドレスを昇格させる場合は region
フラグ、エフェメラル グローバル IP アドレスを昇格させる場合は global
フラグを使用します。
gcloud compute addresses create ADDRESS_NAME \ --addresses IP_ADDRESS \ [--region REGION | --global]
次のように置き換えます。
ADDRESS_NAME
: このアドレスに付ける名前。IP_ADDRESS
: 昇格させる IP アドレス。REGION
: リージョン IP アドレスが属するリージョン。
API
エフェメラル リージョン IP アドレスを昇格させるには、addresses.insert
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
リクエスト本文は次のようにします。
{ name: "ADDRESS_NAME", address: "IP_ADDRESS" }
次のように置き換えます。
ADDRESS_NAME
: このアドレスに付ける名前。IP_ADDRESS
: 昇格させる IP アドレス。REGION
: IP アドレスが属するリージョン。PROJECT_ID
: このリクエストのプロジェクト ID。
エフェメラル グローバル IP アドレスを昇格させるには、次の URI に POST
リクエストを送信します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
リクエスト本文は次のようにします。
{ name: "ADDRESS_NAME", address: "IP_ADDRESS" }
次のように置き換えます。
ADDRESS_NAME
: このアドレスに付ける名前。IP_ADDRESS
: 昇格させる IP アドレス。PROJECT_ID
: このリクエストのプロジェクト ID。
静的外部 IP アドレスに昇格した外部 IP アドレスは、その後も同じインスタンスにとどまります。新しく昇格した静的外部 IP アドレスを別のリソースに割り当てる場合は、既存のインスタンスから静的外部 IP アドレスを割り当て解除します。
静的外部 IP アドレスの一覧表示
プロジェクに予約されている静的外部 IP アドレスを一覧表示するには、addresses list
を実行するか、API に GET
リクエストを発行します。
Console
Cloud Console で、[外部 IP アドレス] ページに移動し、プロジェクトの IP アドレスのリストを表示します。
gcloud
compute addresses list
コマンドを使用します。
gcloud compute addresses list
API
addresses.list
メソッドを呼び出します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
次のように置き換えます。
REGION
: このリクエストのリージョン名。PROJECT_ID
: このリクエストのプロジェクト ID。
すべてのリージョンのアドレスを一覧表示するには、aggregatedList
メソッドを呼び出します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses
静的外部 IP アドレスの詳細情報の取得
静的外部 IP アドレスに関する情報を取得するには、Console、gcloud
ツール、または API を使用します。
Console
- Cloud Console で、[外部 IP アドレス] ページに移動します。
- 詳細情報を取得する IP アドレスをクリックします。
gcloud
addresses describe
コマンドを使用します。ADDRESS_NAME
は、指定する外部 IP アドレスの名前に置き換えます。
gcloud compute addresses describe ADDRESS_NAME
API
addresses.get
メソッドを呼び出します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
次のように置き換えます。
ADDRESS_NAME
: IP アドレスの名前。REGION
: このリクエストのリージョン名。PROJECT_ID
: このリクエストのプロジェクト ID。
静的外部 IP アドレスの割り当て解除
静的外部 IP アドレスの割り当てを解除するには、インスタンスを削除するか、そのアドレスを使用しているインスタンスに関連付けられたアクセス構成を削除します。静的外部 IP アドレスの割り当てを解除すると、その静的外部 IP アドレスを別のリソースに再割り当てできます。
IP アドレスの割り当てを解除すると、その IP アドレスはリソースから削除されますが、引き続きプロジェクトに予約されたままになります。静的 IP アドレスが使用中かどうかを確認するには、gcloud compute addresses list
リクエストを実行します。
gcloud compute addresses list
次のようなレスポンスが返されます。
NAME REGION ADDRESS STATUS example-address REGION 130.211.160.207 RESERVED example-address-new REGION 130.211.114.137 IN_USE
この例では、example-address-new
は現在使用中です。
インスタンスのアクセス構成を削除して静的外部 IP アドレスの割り当てを解除する手順は次のとおりです。
削除するアクセス構成の名前を取得します。名前を取得するには、
gcloud compute instances describe
コマンドを使用します。INSTANCE_NAME
は、インスタンス名で置き換えます。gcloud compute instances describe INSTANCE_NAME
アクセス構成は次の形式で表示されます。
networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: external-nat natIP: 130.211.181.55 type: ONE_TO_ONE_NAT
アクセス構成を削除します。
instances delete-access-config
コマンドを使用します。gcloud compute instances delete-access-config INSTANCE_NAME \ --access-config-name "ACCESS_CONFIG_NAME"
次のように置き換えます。
INSTANCE_NAME
: インスタンスの名前。ACCESS_CONFIG_NAME
: 削除するアクセス構成の名前。引用符の中に完全な名前を指定してください。
静的外部 IP アドレスのステータスが
IN_USE
からRESERVED
に変わり、使用可能になったことを確認します。gcloud compute addresses list
例:
NAME REGION ADDRESS STATUS example-address REGION 130.211.160.207 RESERVED example-address-new REGION 130.211.114.137 RESERVED
これで指定の静的外部 IP アドレスが使用可能になったので、別のインスタンスに割り当てることができます。
静的外部 IP アドレスの解放
静的外部 IP アドレスが不要になったら、そのアドレスを解放できます。解放するとその IP アドレスは一般 IP プールに戻され、Compute Engine の他のユーザーが使用できるようになります。
Console
- Cloud Console で、[外部 IP アドレス] ページに移動します。
- 解放する IP アドレスの横のチェックボックスをオンにします。
- [IP アドレスを解放] をクリックします。
gcloud
compute addresses delete
コマンドを使用します。ADDRESS_NAME
は、解放する IP アドレスの名前に置き換えます。
gcloud compute addresses delete ADDRESS_NAME
API
addresses.delete
メソッドを呼び出します。
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
次のように置き換えます。
ADDRESS_NAME
: IP アドレスの名前。REGION
: このリクエストのリージョン名。PROJECT_ID
: このリクエストのプロジェクト ID。
外部 IP アドレスを特定の VM インスタンスに制限する
特定のワークロードでは、セキュリティやネットワークに関する制限など、基本的な要件が必要になることがあります。たとえば、特定の VM インスタンスのみが使用できるように外部 IP アドレスを制限できます。このオプションは、データの引き出しの防止や、ネットワーク分離の維持に役立ちます。組織ポリシーを使用すると、外部 IP アドレスを特定の VM インスタンスに制限し、組織内またはプロジェクト内の VM インスタンスに対する外部 IP アドレスのアクセスを制御できます。
VM インスタンスの外部 IP アドレスを制御するための制約は次のとおりです。
constraints/compute.vmExternalIpAccess
制約を使用するには、外部 IP アドレスを持つことができる VM インスンスが allowedList
に設定されたポリシーを指定します。ポリシーを指定しない場合、すべての VM インスタンスで、すべての外部 IP アドレスが許可されます。ポリシーを指定すると、allowedValues
リストに含まれる VM インスタンスにのみに対して、外部 IP アドレス(エフェメラルまたは静的のいずれか)が割り当てられます。ポリシー内で明示的に定義されていない組織またはプロジェクトの他の Compute Engine の VM インスタンスは、外部 IP アドレスの使用が禁止されています。
許可リストと拒否リストでは、次のようなインスタンスの URI を使用して VM を指定します。
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
仕様
- このリスト型制約は VM インスタンスのみに適用できます。
- 過去にさかのぼって制約を適用することはできません。ポリシーが有効になる前に外部 IP アドレスを持っていたすべての VM インスタンスは、そのまま外部 IP アドレスを保持します。
- この制約には、
allowedList
またはdeniedList
のいずれか一方を指定できます。両方を同一のポリシーに指定することはできません。 - インスタンスのライフサイクルと整合性の管理と維持は、適切な権限を持つユーザーまたは管理者の責任です。制約ではインスタンスの URI のみが検証され、許可リストに指定された VM の変更、削除、再作成を防ぐことはできません。
権限
制約をプロジェクトまたは組織レベルで設定するには、組織での orgpolicy.policyAdmin
役割が付与されている必要があります。
組織レベルでのポリシー制約の設定
外部 IP アクセスの制約を設定するには、組織 ID が必要です。
自分の組織 ID を確認する
コンソール
ID は Google Cloud Console でも次の方法で確認できます。
- Google Cloud Console にログインします。
プロジェクト セレクタをクリックします。
組織を選択し、組織 ID を探します。
gcloud
organizations list
コマンドを実行してレスポンスの ID を調べると、数値 n を確認できます。
gcloud organizations list
gcloud
ツールは次のような結果を返します。
DISPLAY_NAME ID example-organization 29252605212
ポリシーの制約を設定する
Console
- [組織のポリシー] ページに移動します。
- 必要に応じて、組織をプロジェクト プルダウン メニューから選択します。
- [VM インスタンスに対して許可されている外部 IP を定義する] をクリックします。
- [編集] をクリックして外部 IP ポリシーを編集します。[編集] ツールにアクセスできない場合は、正しい権限が割り当てられていないことを意味します。
[CPU プラットフォームと GPU] を選択し、特定の VM インスタンスに固有の組織のポリシーを設定します。
[ポリシーの適用] と [ポリシーの種類] で目的の値を選択します。
[ポリシーの値] で [カスタム] を選択します。
VM インスタンスの URI を入力し、Enter キーを押します。URI は、次の形式にする必要があります。
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
必要に応じて VM インスタンスの入力を続けます。
[保存] をクリックして、変更を保存します。
gcloud
gcloud beta resource-manager org-policies set-policy
コマンドを使用してポリシーを設定します。JSON ファイルでポリシーを指定する必要があります。次のような JSON ファイルを作成します。
{ "constraint": "constraints/compute.vmExternalIpAccess", "listPolicy": { "allowedValues": [ "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME", "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME", "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME" ] } }
次のように置き換えます。
PROJECT_ID
。このリクエストのプロジェクト ID(example-project
など)。これは、組織のポリシーを設定するときとは異なります。組織のポリシーの場合は組織の数値 ID が必要です。ZONE
: インスタンスのゾーン。INSTANCE_NAME
: インスタンス名。
また、外部 IP アドレスの取得を明示的に禁止する VM インスタンスを示す deniedValues
リストを指定できます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues
または deniedValues
のどちらか一方だけ指定できます。
次に、リクエストでこのファイルを渡します。
gcloud beta resource-manager org-policies set-policy MY_POLICY.JSON --organization ORGANIZATION_ID
ORGANIZATION_ID
は、組織の数値 ID に置き換えます。
外部 IP アクセスを必要としないインスタンスの場合は、allValues
設定のポリシーを DENY
に設定できます。
{ "constraint": "constraints/compute.vmExternalIpAccess", "listPolicy": { "allValues": "DENY" } }
API
setOrgPolicy()
API を使用して制約を定義します。allowedValue
リストに指定した VM は外部 IP アドレスを持つことが許可されます。また、外部 IP アドレスの取得を明示的に禁止する VM インスタンスを示す deniedValues
リストを指定できます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues
または deniedValues
のどちらか一方だけ指定できます。
次の例では、組織内の特定のプロジェクトの VM インスタンスが外部 IP アドレスを持つことができるように、compute.vmExternalIpAccess
制約を組織に設定するリクエストです。
POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:setOrgPolicy
ORGANIZATION_ID
は組織の数値 ID です。
次に、リクエスト本文の中で、この制約に必要なポリシーを指定します。
{ "policy": { "constraint": "constraints/compute.vmExternalIpAccess", "listPolicy": { "allowedValues": [ "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME", "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME", "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME" ] } } }
外部 IP アクセスを必要としないインスタンスの場合は、allValues
設定のポリシーを DENY
に設定できます。
{ "policy": { "constraint": "constraints/compute.vmExternalIpAccess", "listPolicy": { "allValues": "DENY" } } }
プロジェクト レベルでのポリシーの設定
プロジェクト レベルでポリシーを設定すると、そのポリシーは組織レベルのポリシーよりも優先されます。たとえば、組織レベルでは allowedValues
リストに example-vm-1
があるが、プロジェクト レベルのポリシーでは、同じ VM が deniedValues
リストにある場合、VM インスタンスに外部 IP アドレスを割り当てることはできません。
コンソール
組織レベルでのポリシー制約の設定と同じ手順を行いますが、プロジェクト セレクタで組織ではなくプロジェクトを選択してください。
gcloud
gcloud beta resource-manager org-policies set-policy
コマンドを使用してポリシーを設定します。JSON ファイルでポリシーを指定する必要があります。次のような JSON ファイルを作成します。
{ "constraint": "constraints/compute.vmExternalIpAccess", "listPolicy": { "allowedValues": [ "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME" ] } }
次のように置き換えます。
PROJECT_ID
: このリクエスト(example-project
など)のプロジェクト ID。これは、組織のポリシーを設定するときとは異なります。組織のポリシーの場合は組織の数値 ID が必要です。ZONE
: インスタンスのゾーン。INSTANCE_NAME
: インスタンス名。
また、外部 IP アドレスの取得を明示的に禁止する VM インスタンスの deniedValues
リストを指定できます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues
または deniedValues
のどちらか一方だけ指定できます。
次に、リクエストでこのファイルを渡します。
gcloud beta resource-manager org-policies set-policy MY_POLICY.JSON --project example-project
API
setOrgPolicy()
API を使用して制約を定義します。allowedValue
リストに指定した VM は外部 IP アドレスを持つことが許可されます。また、外部 IP アドレスの取得を明示的に禁止する VM インスタンスを示す deniedValues
リストを指定できます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues
または deniedValues
のどちらか一方だけ指定できます。
次の例は、特定の VM インスタンスが外部 IP アドレスを持つことを許可するように compute.vmExternalIpAccess
制約をプロジェクトに設定するリクエストです。
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setOrgPolicy
PROJECT_ID
は、このリクエストのプロジェクト ID で置き換えます。
リクエストの本文にはこの制約のポリシーを格納します。
{ "policy": { "constraint": "constraints/compute.vmExternalIpAccess", "listPolicy": { "allowedValues": [ "projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME" ] } } }
おすすめの方法
この制約では
deniedValues
リストの使用を避けることをおすすめします。deniedValues
リストの定義を行った場合、deniedValues
リストで指定された VM インスタンスは、外部 IP アドレスの使用が制限されることになります。外部 IP アドレスを持つことのできるインスタンスを厳密に制御したい場合、これはセキュリティ上問題になる可能性があります。特定のインスタンスをallowedValues
リストから削除する場合、そのインスタンスを下位階層のdeniedValues
リストに配置しないで、そのインスタンスをallowedList
から削除するように、既存のポリシーを更新します。あるポリシーを設定してリソース階層の大部分に適用する一方、特定のプロジェクトを適用対象から除外する場合は、
setOrgPolicy
メソッドを使用してデフォルトのポリシーを復元します。restoreDefault
オブジェクトを指定すると、その特定のプロジェクト内のすべての VM に外部 IP アドレスとの関連付けが許可されます。プロジェクトに現在適用されているポリシーは、このデフォルトの設定によって影響を受けることはありません。この組織ポリシーと IAM の役割を組み合わせて使用することにより、環境をより適切に管理できます。このポリシーは VM インスタンスにのみ適用されますが、ネットワーク デバイスの外部 IP アドレスを適切に制御して制限するには、
compute.networkAdmin
役割を適切な関係者に付与します。組織またはプロジェクト内の Compute Engine 上で実行されており、ポリシーが有効になっているすべてのサービスとプロダクトは、この組織ポリシーによって影響を受けます。特に、Google Kubernetes Engine、Dataflow、Dataproc、Cloud SQL などのサービスは、このポリシーの影響を受けます。これによって問題が生じる場合は、組織ポリシーが適用されない別のプロジェクト内に別のサービスやプロダクトをセットアップし、必要に応じてクロスプロジェクト ネットワークを使用することをおすすめします。
次のステップ
- IP アドレスについて学ぶ
- ネットワークとファイアウォールについて学ぶ
- 内部 DNS を使用して VM インスタンスを参照する方法を学ぶ
- VPC の料金を確認する