助け合いフォーラム

AWS

AWS ソリューションアーキテクト - アソシエイト(SAA-C02)
問題ID : 24741
問題を開く
パブリックサブネット上のEC2インスタンスで稼働するWebサーバーに対して、インターネットからHTTP(80番ポート)でアクセスできるようにしたい。
以下の状態の時、必要な設定はどれか。(3つ選択)
・インスタンスにはデフォルト設定のセキュリティグループが割り当てられている
・インスタンスが所属するサブネットのネットワークACLは、全ての通信を拒否するように設定されている

正解

セキュリティグループのインバウンドルールに「送信元:0.0.0.0/0」、「ポート範囲:80」、「許可」の設定を追加する

ネットワークACLのインバウンドルールに「送信元:0.0.0.0/0」、「ポート範囲:80」、「許可」の設定を追加する

ネットワークACLのアウトバウンドルールに「宛先:0.0.0.0/0」、「ポート範囲:すべて」、「許可」の設定を追加する

解説

セキュリティグループとネットワークACLの特徴はそれぞれ以下の通りです。

■セキュリティグループ
VPC上でネットワークアクセスをインスタンスごとに制御するファイアウォールです。設定は許可ルールのみ指定し、拒否ルールは指定できません。デフォルトの設定では、すべてのインバウンド通信(外部から内部への通信)を拒否、すべてのアウトバウンド通信(内部から外部への通信)を許可しているので、インスタンスへのインバウンド通信には許可ルールを設定する必要があります。
セキュリティグループは通信の状態を管理する「ステートフル」なファイアウォールです。インバウンドまたはアウトバウンドで許可されている通信に関連する後続の通信(リクエストに対応するレスポンスなど)は、明示的に許可設定をしなくても通信が許可されます。

■ネットワークACL
VPC上でネットワークアクセスをサブネットごとに制御するファイアウォールです。IPアドレスを元に許可ルールと拒否ルールの両方を設定可能です。ルールはユーザーが付与したルール番号の順番に評価され、ルール間で矛盾がある場合は小さい数字のルールが適用されます。デフォルトの設定ではインバウンド通信(外部から内部への通信)、アウトバウンド通信(内部から外部への通信)ともにすべての通信が許可されています。
ネットワークACLは通信の状態を管理しない「ステートレス」なファイアウォールです。通信の関連を考慮しないので、インバウンド/アウトバウンド両方に許可設定が必要になります。例えば、インバウンドで特定のリクエストの受付を許可していても、アウトバウンドでレスポンスの送信を許可していない場合は、正常に通信できないことになります。

各選択肢を確認していきます。

・セキュリティグループのインバウンドルールに「送信元:0.0.0.0/0」、「ポート範囲:80」、「許可」の設定を追加する
セキュリティグループのデフォルトの設定では、すべてのインバウンド通信を拒否しているので、許可設定を追加する必要があります。
インターネットからWebサーバーにHTTPでアクセスさせるには、インバウンドルールに「送信元IP:0.0.0.0/0」、「ポート番号:80」、「許可」の設定が必要です。正しい選択肢です。

・ネットワークACLのインバウンドルールに「送信元:0.0.0.0/0」、「ポート範囲:80」、「許可」の設定を追加する
ネットワークACLでは全ての通信を拒否するように設定されているので、インバウンド通信、アウトバウンド通信ともに許可設定を追加する必要があります。
インターネットからWebサーバーにHTTPでアクセスさせるには、インバウンドルールに「送信元IP:0.0.0.0/0」、「ポート番号:80」、「許可」の設定が必要です。正しい選択肢です。

・ネットワークACLのアウトバウンドルールに「宛先:0.0.0.0/0」、「ポート範囲:すべて」、「許可」の設定を追加する
ネットワークACLでは全ての通信を拒否するように設定されているので、インバウンド通信、アウトバウンド通信ともに許可設定を追加する必要があります。アウトバウンド通信が許可されなければ、Webサーバーからレスポンスを送れません。
インターネットからWebサーバーにHTTPでアクセスさせるには、アウトバウンドルールに「宛先IP:0.0.0.0/0」、「ポート番号:すべて」、「許可」の設定が必要です。正しい選択肢です。

・セキュリティグループのアウトバウンドルールに「宛先:0.0.0.0/0」、「ポート範囲:すべて」、「許可」の設定を追加する
セキュリティグループのデフォルトの設定では全てのアウトバウンド通信を許可しているので、アウトバウンドルールに許可設定を追加する必要はありません。誤った選択肢です。

・セキュリティグループのインバウンドルールに「送信元:0.0.0.0/0」、「ポート範囲:すべて」、「拒否」の設定を追加する
セキュリティグループのデフォルトの設定では全てのインバウンド通信を拒否しています。また、セキュリティグループでは拒否設定を追加できません。誤った選択肢です。

・ネットワークACLのインバウンドルールに「送信元:0.0.0.0/0」、「ポート範囲:すべて」、「許可」の設定を追加する
ネットワークACLではインバウンド通信、アウトバウンド通信ともに許可設定を追加する必要がありますが、ポート番号の設定が不適切です。
「ポート番号:80」に指定しなければ、SSHなどHTTP以外の通信ができてしまうので、セキュリティに問題が発生します。誤った選択肢です。

参考

【Amazon VPC(Virtual Private Cloud)】
Amazon VPC(Virtual Private Cloud)は、AWS上で動作する仮想ネットワーク環境を提供するサービスです。VPCでネットワーク空間を作成し、その中にインスタンスなどのAWSリソースを配置します。なお、VPCのサービスで作成したネットワーク空間もVPCといいます。
VPCは一つのリージョンに複数作成できます。一つのVPCはリージョン内すべてのAZにまたがって存在します。VPCのサービスで作成するネットワーク空間はVPCごとに論理的に切り離されたプライベートネットワークなので、デフォルトの状態では他のVPCやインターネットとは通信できません。


【サブネット】
サブネットはVPCを論理的に分割したネットワーク空間です。サブネットは一つのAZに属し、一つのAZ内に複数のサブネットを作成できます。
インターネットから直接通信があるサブネットはパブリックサブネット、インターネットから直接通信がないサブネットはプライベートサブネットといいます。サブネットの設定にパブリックサブネットやプライベートサブネットという選択はなく、インターネットゲートウェイへのルーティング設定があるサブネットは、パブリックサブネットの役割を持ちます。


【CIDR(Classless Inter-Domain Routing)ブロック】
CIDR(Classless Inter-Domain Routing)とは、ネットワークの範囲を指定するIPアドレスの設定方法のことです。CIDRはIPアドレスを「172.16.0.100/24」のように表記します。この「/24」をプレフィックス長と言い、IPアドレスとプレフィックス長によって所属するネットワークが決まります。プレフィックス長が「/24」の場合、IPアドレスを2進数表記にした時に左から24ビット目までの範囲がプレフィックスです。プレフィックスに該当するIPアドレスの部分がネットワークアドレスとなり、このネットワークアドレスの範囲を「CIDRブロック」といいます。


[CIDRブロックのイメージ]


VPCを利用するには最初にVPCを作成し、その後にサブネットを作成します。VPCとサブネットの作成時に、それぞれネットワークアドレスの範囲をCIDRブロックで指定します。
VPCの中にサブネットが存在するので、サブネットのCIDRブロックはVPCのCIDRブロックの範囲内で作成する必要があります。(例:VPCが172.16.0.0/18のCIDRブロックで、サブネットが10.0.0.0/22や172.16.0.0/16のCIDRブロックは作成できない。)


[CIDRブロックの設定例]


VPCとサブネットそれぞれに指定したCIDRブロックによって、VPC内のサブネット数と1つのサブネット当たりに利用できるIPアドレス数が決まります。
VPCでは各サブネットCIDRブロック内で、最初の4つのIPアドレスと最後のIPアドレスの合計5つのIPアドレスが予約されています。予約されたIPアドレスはAWSリソースに割り当てることができないため、利用できないIPアドレス分を考慮してCIDRブロックを指定する必要があります。

CIDRブロックが「172.16.0.0/24」の予約IPアドレス(利用できないIPアドレス)
・172.16.0.0 … ネットワークアドレス
・172.16.0.1 … VPCルーター用
・172.16.0.2 … DNSサーバー用
・172.16.0.3 … 将来の利用のためにAWSで予約
・172.16.0.255… ネットワークブロードキャストアドレス

CIDRブロックが「172.16.0.0/18」のVPCに「172.16.0.0/24」のサブネットを作成した場合、VPC内のサブネット数と1つのサブネット当たりに利用できるIPアドレスは、以下のようになります。
・サブネット数 = 2^(サブネットのプレフィックス長 - VPCのプレフィックス長) = 2^(24-18) = 64
・1サブネット当たりのIPアドレス数 = 2^(32 - サブネットのプレフィックス長)-5 = 2^(32-24)-5 = 251

VPCではCIDRブロックのプレフィックス長を/16から/28の間で指定します。AWSは次のプライベートIPv4アドレス範囲から、CIDRブロックを指定することを推奨しています。
・10.0.0.0 ~ 10.255.255.255
・172.16.0.0 ~ 172.31.255.255
・192.168.0.0 ~ 192.168.255.255

【IPアドレスの種類】
○プライベートIPアドレス
VPC内のリソース間の通信に使用し、インターネットとは通信不可のIPアドレスです。プライベートIPアドレスを持つAWSリソースは、VPC内でのみ名前解決が可能なプライベートDNSホスト名が割り当てられます。プライベートIPアドレスは、パブリックサブネットとプライベートサブネットにあるEC2やRDSなど、すべてのインスタンスに割り当てられます。
プライベートIPアドレスは、AWSリソースを停止・起動しても同一のIPアドレスが使われ、AWSリソースの削除時にIPアドレスが解放されます。

○パブリックIPアドレス
インターネットと通信可能なIPアドレスです。パブリックIPアドレスを持つAWSリソースは、パブリックDNSホスト名が割り当てられます。パブリックDNSホスト名は、名前解決要求がVPC外からであればAWSリソースのパブリックIPアドレスに解決され、VPC内からであればプライベートIPアドレスに解決されます。
後述するElastic IPアドレスではないパブリックIPアドレスは、AWSリソースが停止する時にIPアドレスが解放され、AWSリソースが起動する時に新規のIPアドレスが割り当てられます。

○Elastic IPアドレス
インターネットと通信可能な固定のパブリックIPアドレスです。Elastic IPアドレスを割り当てたAWSリソースが削除されても同一のIPアドレスが保有され、別のAWSリソースに再び割り当てることができます。Elastic IPアドレスを割り当てたAWSリソースはパブリックDNSホスト名も固定になり、Elastic IPアドレスへ名前解決されます。
Elastic IPアドレスは割り当てられているAWSリソースが起動している時は無料で利用できますが、AWSリソースが停止していたり、割り当てられていない時は料金が発生します。

【ルートテーブル】
VPC内の通信に対してどこへデータを転送するかを定義する機能です。ルートテーブルに従って、送信先ごとに指定したターゲットへデータを転送することを「ルーティング」といいます。各サブネットは1つのルートテーブルを紐付けることができ、ルートテーブルの紐付けがないサブネットはVPC全体に適用される「メインルートテーブル」に従ってルーティングを行います。
ルートテーブルはVPCからインターネットへ接続する時にも使用します。ターゲットを後述するインターネットゲートウェイに設定すると、サブネット内に発生した送信先がVPC外への通信をインターネットゲートウェイへ転送して、インターネットへ接続できるようになります。

[パブリックサブネットからインターネットへ接続する時のイメージ]


【インターネットゲートウェイ】
インターネットとVPC内のAWSリソースを接続する機能です。インターネットゲートウェイを利用するには、VPCにインターネットゲートウェイを作成し、インターネットへアクセスさせたいリソースが配置されたサブネットのルートテーブルに、ターゲットがインターネットゲートウェイのルーティングを設定します。
インターネットゲートウェイへのルーティングが設定されたサブネットは、パブリックサブネットになります。パブリックサブネットでは、インターネットとサブネット両方からの接続開始要求を通します。インターネットゲートウェイは一つのVPCに一つしか作成できないので、複数のパブリックサブネットで共有して利用します。

[インターネットゲートウェイ向けルートテーブルの例]


【NATゲートウェイ】
プライベートサブネットからインターネットへの通信を可能にするIPv4専用の機能です。NAT(Network Address Translation)とは、IPアドレスを別のIPアドレスに変換する機能のことです。プライベートサブネット内にあるAWSリソースのプライベートIPアドレスを、NATゲートウェイのパブリックIPアドレス(Elastic IPアドレス)に変換し、インターネットへ接続します。
NATゲートウェイを利用するには、Elastic IPアドレスを割り当てたNATゲートウェイをパブリックサブネット内に作成し、プライベートサブネットのルートテーブルにターゲットがNATゲートウェイのルーティングを設定します。
NATゲートウェイはプライベートサブネット内リソースからインターネットへの接続開始要求は通しますが、インターネットからプライベートサブネット内リソースへの接続開始要求は通しません。


[NATゲートウェイ向けルートテーブルの例]


NATゲートウェイはAWSによってAZ内で冗長化されており、NATゲートウェイの機器障害時やトラフィック増加時でも継続して利用できます。ただし、AZに障害が発生した場合には利用できなくなるため、さらに可用性を高める場合は複数のAZにそれぞれNATゲートウェイを配置する必要があります。

【NATインスタンス】
NATゲートウェイと同じく、プライベートサブネットからインターネットへの通信を可能にするIPv4専用の機能です。NATゲートウェイはマネージドサービスなのに対し、NATインスタンスはEC2インスタンスから作成するため、ユーザーが障害対応などの運用管理を実施する必要があります。
NATインスタンスを利用するには、パブリックサブネットにパブリックIPアドレスまたはElastic IPアドレスを割り当てたNATインスタンスを作成した後、プライベートサブネットのルートテーブルにターゲットがNATインスタンスのルーティングを設定します。
NATインスタンスはNATゲートウェイと同じく、プライベートサブネット内リソースからインターネットへの接続開始要求は通しますが、インターネットからプライベートサブネット内リソースへの接続開始要求は通しません。


NATインスタンスは運用管理が必要ですが、NATゲートウェイでは利用できないポート転送機能を設定できたり、VPC外からプライベートサブネット内へ接続する際の踏み台サーバーとして利用できます。ポート転送は、インターネットからNATインスタンスの特定のポート番号に接続した時、プライベートサブネット内にあるインスタンスの特定のポートへ転送する機能です。踏み台サーバーは、例えばインターネットからプライベートサブネット内にあるサーバーの保守をしたい場合に、一旦NATインスタンスへSSH接続をした後、NATインスタンスから目的のサーバーへ再度SSH接続をすることで、VPC外からは直接接続できないプライベートサブネット内のサーバーへの接続を可能にするものです。

【Egress-Onlyインターネットゲートウェイ】
VPCでIPv6 CIDRブロックを割り当てる際には、AWS保有もしくはユーザーが保有するアドレスレンジから割り当てますが、このアドレスはインターネットから到達可能な「グローバルユニキャストアドレス」というものになります。そのため、IPv6 CIDRブロックを持つパブリックサブネット内のリソースは、無条件にインターネットからアクセス可能になってしまいます。しかし、NATゲートウェイはIPv6には対応しないため、IPv6アドレスを利用するリソースを保護する目的では使えません。

Egress-Onlyインターネットゲートウェイは、NATゲートウェイとインターネットゲートウェイの特徴を併せ持つ機能です。
Egress-Onlyインターネットゲートウェイは、インターネットからVPCへ(Ingress)の接続開始要求は通さずVPCからインターネットへ(Egress)の接続開始要求は通す、IPv6専用のインターネットゲートウェイです。

Egress-Onlyインターネットゲートウェイを利用するには、VPCにEgress-Onlyインターネットゲートウェイを作成し、プライベートサブネットのルートテーブルに、送信先が「::/0(デフォルトルート)」、ターゲットが「Egress-OnlyインターネットゲートウェイID」となるルートを追加します。

[Egress-Onlyインターネットゲートウェイ向けルートテーブルの例]


【ENI(Elastic Network Interface)】
AWSリソースのネットワークインターフェイスです。オンプレミス環境におけるNIC(Network Interface Card)と同じ役割を持ち、VPC内のEC2インスタンスやNATゲートウェイなどに割り当てて利用します。

【VPCエンドポイント】
S3やDynamoDBなどインターネットから直接利用できるVPC外のAWSサービスへアクセスは、VPC内のAWSリソースからインターネットゲートウェイを経由して通信します。VPCエンドポイントは、セキュリティ上の制約でインターネットとの通信が制限されているプライベートサブネット内のAWSリソースから、インターネットゲートウェイを経由せずにVPC外のAWSサービスへアクセス可能にする機能です。

VPCエンドポイントにはゲートウェイ型とAWS PrivateLink(インターフェイス型)の2種類があり、それぞれ利用できるAWSサービスが異なります。

■ゲートウェイ型
Amazon S3とAmazon DynamoDBで利用できます。
S3やDynamoDBへ接続したいリソースが配置されているVPCにVPCエンドポイントを割り当て、ルートテーブルにターゲットがVPCエンドポイントのルーティングを設定します。DynamoDBはゲートウェイ型のみ利用できますが、S3はゲートウェイ型とPrivateLinkの両方で利用できます。

[VPCエンドポイント(ゲートウェイ型)でS3やDynamoDBにアクセスする時のイメージ]


[VPCエンドポイント(ゲートウェイ型)向けルートテーブルの例]


■AWS PrivateLink(インターフェイス型)
Amazon CloudWatch LogsやAmazon SNS、AWS CloudFormationなど多数のサービスで利用できます。
サービスへ接続したいリソースが配置されているサブネットにプライベートIPアドレスを持つENIを作成し、ENIとサービスをリンクさせます。

[AWS PrivateLinkでAmazon CloudWatch LogsやAmazon SNSにアクセスする時のイメージ]


【VPCエンドポイントポリシー】
VPCエンドポイントを作成すると、VPC内のリソースはVPCエンドポイントからVPC外のAWSサービスへアクセスできるようになります。VPCエンドポイントからの接続先を制限するには「VPCエンドポイントポリシー」を使用します。VPCエンドポイントポリシーは、VPCエンドポイントのゲートウェイ型とAWS PrivateLink(インターフェイス型)の両方で利用できます。
VPCエンドポイントポリシーを設定するには、許可/拒否する接続先のAmazonリソース名(ARN)を指定します。

[VPCエンドポイントポリシーの設定画面]
下記の設定では、S3バケットの「A-bucket」への通信を許可しています。


【VPCピアリング】
VPC間のルーティングを可能にする機能です。他のAWSアカウントのVPCや異なるリージョンのVPC、同一アカウントの異なるVPCでも、同一のプライベートネットワーク内に存在しているかのように、相互に通信できます。


【AWS Transit Gateway】
複数のVPCや複数のオンプレミスネットワークを相互に接続するハブ機能を持つサービスです。VPCピアリングはVPCを1対1で接続するサービスなのに対し、Transit Gatewayは複数のVPC同士を1つのハブで相互に接続できるので、ネットワーク経路を簡素化できます。

[VPCピアリングを使用したVPC同士の接続]


[Transit Gatewayを使用したVPC同士の接続]


Transit GatewayはVPC間の他に、AWS Direct ConnectやAWS VPNで接続されたオンプレミスネットワークとも接続できます。AWS Direct ConnectとAWS VPNはともに、オンプレミスなどAWS外のネットワークとAWS内のネットワークをセキュアに接続するサービスです。

【VPCでのセキュリティ】
VPCにはネットワークアクセスを制御する機能が2種類あります。

■セキュリティグループ
VPC上でネットワークアクセスをインスタンスごとに制御するファイアウォールです。設定は許可ルールのみ指定し、拒否ルールは指定できません。デフォルトの設定では、すべてのインバウンド通信(外部から内部への通信)を拒否、すべてのアウトバウンド通信(内部から外部への通信)を許可しているので、インスタンスへのインバウンド通信には許可ルールを設定する必要があります。
セキュリティグループは通信の状態を管理する「ステートフル」なファイアウォールです。インバウンドまたはアウトバウンドで許可されている通信に関連する後続の通信(リクエストに対応するレスポンスなど)は、明示的に許可設定をしなくても通信が許可されます。
セキュリティグループでは送信元や宛先にIPアドレスの範囲を指定する他、別のセキュリティグループも指定できます。指定したセキュリティグループに所属するインスタンスからの通信を一括して許可できるので、送信元や宛先のインスタンス台数が変化する場合に有用です。

■ネットワークACL
VPC上でネットワークアクセスをサブネットごとに制御するファイアウォールです。IPアドレスを元に許可ルールと拒否ルールの両方を設定可能です。ルールはユーザーが付与したルール番号の順番に評価され、ルール間で矛盾がある場合は小さい数字のルールが適用されます。デフォルトの設定ではインバウンド通信(外部から内部への通信)、アウトバウンド通信(内部から外部への通信)ともにすべての通信が許可されています。
ネットワークACLは通信の状態を管理しない「ステートレス」なファイアウォールです。通信の関連を考慮しないので、インバウンド/アウトバウンド両方に許可設定が必要になります。例えば、インバウンドで特定のリクエストの受付を許可していても、アウトバウンドでレスポンスの送信を許可していない場合は、正常に通信できないことになります。

セキュリティグループとネットワークACLには下記の違いがあります。


【VPCフローログ】
VPC内のENIで通信するネットワークトラフィック情報をキャプチャする機能です。キャプチャしたデータはAmazon CloudWatch LogsまたはS3へ保存されます。
VPCフローログには、送信元/送信先IPアドレス、送信元/送信先ポート番号、プロトコル番号、通信の許可/拒否の結果などが記録されます。VPCフローログを利用することでVPC内のリソースが受信した不審な通信や、VPC内のリソースから発信された不要な通信の発見に繋がります。

[VPCフローログの中身]
上に戻る

[VPC] 軽微な誤りの報告

投稿日 2022/08/09

「解説」のところにて、

[誤] Pアドレスを元に許可ルールと拒否ルールの両方を設定可能です。
[正] IPアドレスを元に許可ルールと拒否ルールの両方を設定可能です。

スタッフからの返信

s staff_satomi

2022/08/09 11:24

tnishita2様 ご指摘の点を修正いたしました。 ご報告下さり、誠にありがとうございます。

この投稿に対して返信しませんか?