VPC ブロックパブリックアクセスでインターネットからの受信だけを止める方法 ── イングレスのみモードと除外
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-3(大阪)- VPC BPA はリージョン内のアカウント全体に効きます。オンにすると、そのリージョンのほかの VPC の通信も止まります。この実践は、ほかのワークロードが動いていないリージョンで行ってください(本記事では大阪を使います)
- 以下のリソースが作成済みであること
まだ用意していない場合は、「作り方の参考」の記事の手順で作れます。リソース名は、この記事の名前に読み替えてください。
| リソース種別 | リソース名 | 内容 | 作り方の参考 |
|---|---|---|---|
| VPC | soa-bpa-vpc | 10.0.0.0/16。IPv6 CIDR ブロック(Amazon 提供)を関連付け済み | Amazon VPC で仮想ネットワークを構築しサブネットを設定する |
| サブネット | soa-bpa-public | 10.0.1.0/24。ルートテーブルで 0.0.0.0/0 を soa-bpa-igw に向ける | 同上 |
| サブネット | soa-bpa-private | 10.0.2.0/24 と IPv6 の /64。ルートテーブルで ::/0 を soa-bpa-eigw に向ける | 同上 |
| インターネットゲートウェイ | soa-bpa-igw | soa-bpa-vpc にアタッチ | 同上 |
| Egress-Only インターネットゲートウェイ | soa-bpa-eigw | soa-bpa-vpc 用 | ─ |
| EC2 インスタンス | soa-bpa-web | soa-bpa-public に配置。パブリック IPv4 アドレスあり。ポート 80 で簡単な Web ページを返す。セキュリティグループで HTTP(80)をインターネットから許可 | Amazon EC2 でインスタンスを起動しSSH接続する |
| EC2 インスタンス | soa-bpa-app | soa-bpa-private に配置。パブリック IPv4 アドレスなし、IPv6 アドレスあり | 同上 |
| EC2 Instance Connect エンドポイント | soa-bpa-eice | soa-bpa-private に配置。2 台のインスタンスにプライベート IP で SSH 接続するため | ─ |
※ soa-bpa-private には NAT ゲートウェイを置かず、IPv6 の送信だけを Egress-Only インターネットゲートウェイで外へ出します。
作成・変更するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| VPC BPA の設定(大阪リージョン) | ─ | イングレスのみモードでオンにする |
| VPC BPA の除外 | (soa-bpa-public を対象) | パブリックサブネットだけを双方向で除外する |
手順 1: BPA をオンにする前の状態を確かめる
AWS マネジメントコンソールにログインし、右上のリージョンを アジアパシフィック (大阪) ap-northeast-3 に切り替えます。上部の検索バーに EC2 と入力し、「EC2」を選択します。
左側ナビゲーションの「インスタンス」→「インスタンス」を選択し、soa-bpa-web の「パブリック IPv4 アドレス」を控えます。
ブラウザの新しいタブで http://<soa-bpa-web のパブリック IPv4 アドレス> を開きます。soa-bpa-web と書かれたページが表示され、インターネットから Web サーバーに届いていることが分かります。
手順 2: BPA をイングレスのみモードでオンにする
上部の検索バーに VPC と入力し、「VPC」を選択します。左側ナビゲーションの「設定」を選択します。「VPC 暗号化コントロール」「パブリックアクセスをブロック」などのタブが並ぶので、「パブリックアクセスをブロック」タブを開きます。
「パブリックアクセス設定を編集」をクリックし、以下を設定します。
- 「[パブリックアクセスをブロック]をオンにする」にチェック
- ブロックの方向: 「Ingress-only」(コンソールでは英語のまま表示されます。イングレスのみモードのことです)
「変更を保存」をクリックします。設定の反映には 2 分ほどかかります。画面を更新して、ステータスが「オン」、方向が「Ingress-only」になったことを確認します。
手順 3: インターネットからの受信が止まったことを確かめる
手順 1 で開いたブラウザのタブを再読み込みします。今度はページが表示されず、しばらく待つとタイムアウトします。soa-bpa-web のセキュリティグループもルートテーブルも変えていませんが、BPA がそれより優先してインターネットからの受信を止めています。
手順 4: Egress-Only インターネットゲートウェイ経由の送信が通ることを確かめる
EC2 コンソールの「インスタンス」で soa-bpa-app を選択し、「接続」をクリックします。接続方法のタイルから「EC2 Instance Connect エンドポイント」(プライベートサブネットアクセス)を選び、エンドポイントに soa-bpa-eice が選ばれていることを確認して「接続」をクリックします。
同じタブがブラウザのターミナルに切り替わったら、次のコマンドで IPv6 のインターネット上のサイトへ ping を送ります。
ping -6 -c 3 www.amazon.com
応答が 3 回返ってきます。soa-bpa-app からの送信は Egress-Only インターネットゲートウェイを通るため、イングレスのみモードでは止まりません。
手順 5: IGW 経由の送信は止まることを確かめる
同じ手順で soa-bpa-web に EC2 Instance Connect エンドポイント経由で接続し、次のコマンドを実行します。
ping -c 3 -W 2 www.amazon.com
-W 2 は応答を待つ秒数です。付けなくても結果は同じですが、終わるまでに時間がかかります。
応答は返らず、3 packets transmitted, 0 received のように表示されます。soa-bpa-web はパブリックサブネットにあり、送信は IGW を直接通ります。イングレスのみモードで許可されるのは NAT ゲートウェイと Egress-Only インターネットゲートウェイを通る通信だけなので、IGW から直接出る送信も止まります。
手順 6: パブリックサブネットだけを除外する
VPC コンソールの「設定」→「パブリックアクセスをブロック」タブに戻ります。「除外」の「除外を作成」をクリックし、以下を設定します。
- 許可の方向: 「双方向」(既定で選ばれています)
- 「利用可能なリソース」の表: VPC とサブネットが並ぶので、
soa-bpa-publicのチェックボックスを選択
「名前(オプション)」は空欄のままで構いません。
「除外を作成」をクリックします。除外の一覧で、作成した除外の「除外の状態」が「アクティブ」になるまで待ちます。「関連付けられたリソース」列には soa-bpa-public のサブネット ID が表示されます。
ブラウザで http://<soa-bpa-web のパブリック IPv4 アドレス> をもう一度開くと、ページが表示されるようになります。アカウントの BPA はオンのまま、除外したサブネットだけがインターネットとやり取りできる状態です。