このページでは、次のような Compute Engine 仮想マシン(VM)インスタンスの特別なネットワーク構成について説明します。
- VM に対する外部 HTTP 接続を設定する
- VM をネットワーク プロキシとして構成する
VM に対する外部 HTTP 接続を設定する
デフォルトのファイアウォール ルールでは、インスタンスへの HTTP または HTTPS 接続は許可されていません。ただし、そのような接続を許可するルールは簡単に追加できます。Virtual Private Cloud(VPC)ネットワークの外部からトラフィックを受信するには、VM に外部 IP アドレス(静的またはエフェメラル)が必要であるので注意してください。
gcloud
コマンドライン ツールか Google Cloud Console を使用して、HTTP または HTTPS 接続を許可するファイアウォール ルールを追加できます。また、API を使用してファイアウォール ルールを追加することもできます。
Cloud Console を使用して、VPC ネットワーク上のすべてのインスタンスに対する全体的なファイアウォール ルールを作成できます。または、個々のインスタンスの作成時に該当するオプションを選択すると、そのインスタンスが HTTP および HTTPS 接続へアクセスできるようになります。後者のオプションのほうが個別のインスタンスに対して細かく制御できるため、そちらを先に説明します。
- Cloud Console で、[VM インスタンス] ページに移動します。
- [インスタンスを作成] をクリックします。
- [ファイアウォール] で [HTTP トラフィックを許可する] と [HTTPS トラフィックを許可する] を選択します。
- [作成] をクリックしてインスタンスを作成します。
これらのチェックボックスをオンにすると、VPC ネットワークにより default-http
または default-https
ルールが自動的に作成されます。このルールは、http-server
タグか https-server
タグが付いたすべてのインスタンスに適用されます。新しいインスタンスには、チェックボックスの選択に応じて、適切なタグ付けが行われます。
default-http
および default-https
のファイアウォール ルールがすでにある場合は、インスタンスの詳細ページで [HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] オプションを有効にすることで、そのファイアウォール ルールを既存のインスタンスに適用できます。
- [VM インスタンス] ページに移動します。
- 目的のインスタンスの名前をクリックします。
- ページの上部にある [編集] ボタンをクリックします。
- [ファイアウォール] セクションまでスクロールします。
- 必要な VPC ネットワークで [HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] をオンにします。
- [保存] をクリックします。
同様に、片方または両方のチェックボックスをオフにすることで、VM の外部 HTTP アクセスや HTTPS アクセスを無効にできます。
すべてのインスタンスに適用される全体的なファイアウォール ルールを作成するのではなく、HTTP トラフィックと HTTPS トラフィックに対して特定のインスタンスがタグ付けされるようにすることで、プロジェクト内のすべての仮想マシンへの外部トラフィックが許可されるというセキュリティ上の問題が発生する可能性が Google Cloud で低減されます。ただし、すべての仮想マシン インスタンスへの HTTP または HTTPS トラフィックを許可するファイアウォール ルールを作成する場合は、次の手順で独自のファイアウォール ルールを作成できます。
- [VPC ネットワーク] ページに移動します。
- ファイアウォール ルールを適用する VPC ネットワークに選択します。
- [ファイアウォール ルール] セクションで [ファイアウォール ルールを追加] をクリックします。
- ファイアウォール ルールに名前を付け、[プロトコルとポート] ボックスに
tcp:80
を追加します。または、HTTPS トラフィックの場合はtcp:443
を追加します。 - [作成] をクリックします。
プロジェクトのすべての仮想マシンに対する HTTP トラフィックと HTTPS トラフィックを許可する場合には、次のコマンドを実行して、任意の場所からこの VPC ネットワークのインスタンスに送信される受信 HTTP / HTTPS リクエストを許可するファイアウォールを作成します。
gcloud compute firewall-rules create FIREWALL_RULE --allow tcp:80,tcp:443
**例**
gcloud compute firewall-rules create sample-http \ --description "Incoming http and https allowed." \ --allow tcp:80,tcp:443
gcloud compute firewall-rules describe sample-http
allowed:
- IPProtocol: tcp
ports:
- '80'
- '443'
creationTimestamp: '2014-06-13T13:27:12.206-07:00'
id: '5057780722612413546'
kind: compute#firewall
name: sample-http
network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/samplehttp
sourceRanges:
- 0.0.0.0/0
VM をネットワーク プロキシとして構成する
VPC ネットワークを設計するとき、VPC ネットワーク内の 1 つのインスタンスだけが外部にアクセスし、他のインスタンスはすべてそのインスタンスをプロキシ サーバーとして外部にアクセスするように構成できます。これは、VPC ネットワークに出入りするアクセスを制御したり、複数の外部 IP アドレスにかかる費用を抑えたりする場合に便利です。
この例では、Debian イメージを使用する VM インスタンスにネットワーク プロキシを設定する方法について説明します。ここでは、Squid プロキシ サーバーとしてゲートウェイ インスタンスを使用します。これはプロキシ サーバーを設定する唯一の方法です。
Squid プロキシ サーバーを設定するには:
- 外部(静的またはエフェメラル)IP アドレスを持つインスタンスを 1 つ設定します。この例では、インスタンスに
gateway-instance
という名前を付けます。 gcloud compute instances create ... --no-address
を指定して、外部 IP アドレスを持たないインスタンスを 1 つ以上設定します。この例では、このインスタンスhidden-instance
を呼び出します。- あるインスタンスから別のインスタンスに接続する方法を理解します。これは、内部専用のインスタンスには直接接続できないためです。
次のように、ポート 3128 での tcp トラフィックを許可するファイアウォールを追加します。
gcloud compute firewall-rules create [FIREWALL_RULE] --network [NETWORK] --allow tcp:3128
gateway-instance
に Squid をインストールし、VPC ネットワーク上の任意(有効なサブネット IP アドレス)のマシンからのアクセスを許可するように構成します。これは、gateway-instance
とhidden-instance
の両方が同じ VPC ネットワークに接続されていて、相互に接続可能であることを前提としています。user@gateway-instance:~$ sudo apt-get install squid3
ローカル ネットワーク上の任意のマシンが Squid3 サーバーを使用できるようにします。次の
sed
コマンドは、コメント化を解除し、ローカルのネットワークとマシン用の Squid 構成ファイル内にあるacl localnet src
エントリを有効にします。user@gateway-instance:~$ sudo sed -i 's:#\(http_access allow localnet\):\1:' /etc/squid/squid.conf
user@gateway-instance:~$ sudo sed -i 's:#\(http_access deny to_localhost\):\1:' /etc/squid/squid.conf
user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src 10.0.0.0/8.*\):\1:' /etc/squid/squid.conf
user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src 172.16.0.0/12.*\):\1:' /etc/squid/squid.conf
user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src 192.168.0.0/16.*\):\1:' /etc/squid/squid.conf
user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src fc00\:\:/7.*\):\1:' /etc/squid/squid.conf
user@gateway-instance:~$ sudo sed -i 's:#\(acl localnet src fe80\:\:/10.*\):\1:' /etc/squid/squid.conf
# Prevent proxy access to metadata server user@gateway-instance:~$ sudo tee -a /etc/squid/squid.conf <<'EOF' acl to_metadata dst 169.254.169.254 http_access deny to_metadata EOF
# Start Squid user@gateway:~$ sudo service squid start
gateway-instance
をプロキシとして使用するようにhidden-instance
を構成します。ssh を使用してhidden-instance
に接続し、次に示すように、プロキシ URL アドレスがポート 3128(Squid のデフォルトの構成)上のgateway-instance
を指すように定義します。user@gateway-instance:~$ ssh hidden-instance
user@hidden-instance:~$ sudo -s
root@hidden-instance:~# echo "export http_proxy=\"http://gateway-instance.$(dnsdomainname):3128\"" >> /etc/profile.d/proxy.sh
root@hidden-instance:~# echo "export https_proxy=\"http://gateway-instance.$(dnsdomainname):3128\"" >> /etc/profile.d/proxy.sh
root@hidden-instance:~# echo "export ftp_proxy=\"http://gateway-instance.$(dnsdomainname):3128\"" >> /etc/profile.d/proxy.sh
root@hidden-instance:~# echo "export no_proxy=169.254.169.254,metadata,metadata.google.internal" >> /etc/profile.d/proxy.sh
このような環境変数を通すように sudoers を更新します。
root@hidden-instance:~# cp /etc/sudoers /tmp/sudoers.new
root@hidden-instance:~# chmod 640 /tmp/sudoers.new
root@hidden-instance:~# echo "Defaults env_keep += \"ftp_proxy http_proxy https_proxy no_proxy"\" >>/tmp/sudoers.new
root@hidden-instance:~# chmod 440 /tmp/sudoers.new
root@hidden-instance:~# visudo -c -f /tmp/sudoers.new && cp /tmp/sudoers.new /etc/sudoers
sudo
を終了し、変数をロードして、hidden-instance
でapt-get
を実行します。この操作はゲートウェイをプロキシとして使用することで正常に動作します。ゲートウェイがプロキシとして機能していない場合、hidden-instance
がインターネットに直接接続されないため、apt-get
は動作しません。root@hidden-instance:~# exit
user@hidden-instance:~$ source ~/.profile
user@hidden-instance:~$ sudo apt-get update
VM を VPN ゲートウェイとして構成する
このコンテンツは非推奨となり、削除されました。マネージド VPN ソリューションについては、Cloud VPN のドキュメントをご覧ください。
VM を NAT ゲートウェイとして構成する
このコンテンツは非推奨となり、削除されました。マネージド NAT ソリューションについては、Cloud NAT のドキュメントをご覧ください。
高可用性かつ高帯域幅の NAT ゲートウェイを構築する
このコンテンツは非推奨となり、削除されました。マネージド NAT ソリューションについては、Cloud NAT のドキュメントをご覧ください。
次のステップ
- VPC ネットワークの詳細について、VPC ネットワークの概要で確認する。
- VPC ネットワークの作成、変更、削除について VPC ネットワークの使用で確認する。