AWSを触るとき、最低限知っておきたいネットワークのこと
AWSでネットワークを作る
AWSでネットワークを構築する際には、さまざまな要素を理解しておくことが重要です。
ここでは、AWSでネットワークを作るために最低限知っておきたい主要なコンポーネントとその説明を紹介します。
必要な前提知識は後述にまとめましたので、必要であれば確認してください。
参考
AWS上に作成したネットワークのイメージ図
VPC(後述)に作成したネットワーク内にあるリソースのマップ
VPC(Virtual Private Cloud)
AWSクラウド内に論理的に分離されたネットワークを作成するためのサービスです。
AWSアカウントを作成すると、デフォルトVPCがすでに作成されていますが、一般的にはシステム単位でVPCを作成し、そのVPCの中にネットワークを作成していきます。
VPCエンドポイント
VPC内からAWSサービスに対してインターネットゲートウェイやNATデバイスを経由せずに安全に接続するためのエントリポイントです。
VPCエンドポイントには、ゲートウェイ型とプライベートリンク型の2種類があります。
インターフェースエンドポイントはプライベートリンクを使用し、ゲートウェイエンドポイントはAmazon S3やDynamoDBにアクセスする際に使用されます。
VPC Peering
VPC Peeringは、異なるVPC間でネットワークを相互接続するための方法です。
同じAWSアカウント内、または異なるAWSアカウント間でVPCを接続できます。
異なるVPC内のリソース間で通信が可能となりますが、ネットワークアドレスが重複していると接続ができないので注意が必要です。
リージョン
AWSのデータセンターが地理的に分散している場所を指します。
各リージョンは独立しており、データのレプリケーションや冗長性が確保されています。
AWSでは、特定のリージョンを選択してリソースをデプロイすることができます。
AWSを少しでも触ったことがある方なら、見たことあるかもしれません。
「us-east-1」とか「ap-northeast-1」とかいう名前がついてるものになります。
日本にいる方だと「ap-northeast-1 アジアパシフィック(東京)」を使用することが多いですが、使用するAWSサービスによってはリージョンが固定されている場合もあります。
AZ(Availability Zone)
各リージョン内にある独立したデータセンター群です。
AZは物理的に分離されており、冗長性と高可用性を提供します。
VPC内でリソースを作成する際には、複数のAZに分散して配置することで、障害に対する耐性を高めることができます。
AWS CLIを使って「ap-northeast-1 アジアパシフィック(東京)」リージョンで使用できるAZを表示してみます。
$ aws ec2 describe-availability-zones --region ap-northeast-1
{
"AvailabilityZones": [
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1a",
"ZoneId": "apne1-az4",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1",
"ZoneType": "availability-zone"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1c",
"ZoneId": "apne1-az1",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1",
"ZoneType": "availability-zone"
},
{
"State": "available",
"OptInStatus": "opt-in-not-required",
"Messages": [],
"RegionName": "ap-northeast-1",
"ZoneName": "ap-northeast-1d",
"ZoneId": "apne1-az2",
"GroupName": "ap-northeast-1",
"NetworkBorderGroup": "ap-northeast-1",
"ZoneType": "availability-zone"
}
]
}
今現在、「ap-northeast-1a」「ap-northeast-1c」「ap-northeast-1d」の3つのAZを使用できることがわかります。[1]
サブネット
サブネットは、VPC内に作成されるIPアドレスの範囲を持つ論理的な区画です。
サブネットにはパブリックサブネットとプライベートサブネットがあり、それぞれ異なるセキュリティ要件に応じてAWSリソースを配置できます。
パブリックサブネットはインターネットゲートウェイを通じてインターネットと通信可能であり、プライベートサブネットはNATゲートウェイを通じてインターネットにアクセスします。
サブネットのネットワークアドレスを設定すると、予約済みアドレスが発行されるので注意が必要です。
- /24の場合
- .0 ネットワークアドレス
- .1 VPCルータ
- .2 Amazon提供のDNSサービス
- .3 AWSで予約されているアドレス
- .255 ブロードキャスト
ネットワークゲートウェイ
ネットワークゲートウェイには、インターネットゲートウェイ (IGW) とNATゲートウェイ (NATGW) があります。
IGWはVPCをインターネットに接続するためのゲートウェイであり、NATGWはプライベートサブネット内のインスタンスがインターネットにアクセスする際に使用されますが、外部からのトラフィックはブロックされます。
最初に登場した図にも登場しているので、確認してみてください。
ルートテーブル
VPC内のネットワークトラフィックのルーティングを制御するための設定です。
ルートテーブルには、特定のIPアドレス範囲に対するルーティングルールが含まれており、これによりトラフィックの行き先を決定します。
各サブネットは一つのルートテーブルに関連付けられます。
セキュリティグループ
EC2インスタンスなどのAWSリソースに対する仮想ファイアウォールの役割を果たします。
セキュリティグループを使用して、インバウンドおよびアウトバウンドのトラフィックを制御できます。ルールはステートフルであり、許可されたトラフィックに対しては自動的にレスポンスが許可されます。
セキュリティグループのルールにセキュリティグループを設定することもできます。
セキュリティグループはEC2インスタンスなどのAWSリソースに設定可能ですが、そのセキュリティグループが設定されたインスタンスからのみ通信を許可したいといった場合、セキュリティグループを使用して通信を許可することができます。
つまり、インスタンスAからインスタンスBへの通信を許可したいときに、インスタンスAにセキュリティグループAが紐づいている場合は、インスタンスBのセキュリティグループのインバウンドルールにセキュリティグループAを設定すればいいということです。
サブネット上に作成したEC2インスタンスに接続できないといったトラブルは大体セキュリティグループの設定が間違っていることが多いです。
いったん全開放して疎通できるか確認してみると手っ取り早いです...が全開放した設定を戻すことを絶対に! 忘れないようにしてください。
ネットワークACL(Access Control List)
サブネットレベルでのトラフィック制御を行うステートレスなファイアウォールです。
ネットワークACLは、許可および拒否ルールを設定し、サブネット内のリソースに対するトラフィックを制御します。
セキュリティグループとは異なり、ルールはステートレスであり、インバウンドとアウトバウンドの両方のトラフィックについて個別に設定する必要があります。
セキュリティグループはトランスポート層レベルでの制御を行うのに対して、ネットワークACLはネットワーク層レベルで制御をするイメージになります。[2]
前提知識
ありがとう、ChatGPT
IPアドレス
IPアドレスとは?
IPアドレスは、インターネットやネットワーク上でデバイス(コンピュータ、スマートフォン、プリンターなど)を識別するためのユニークな番号です。これは、インターネットの「住所」のようなもので、データがどこに送られるべきかを決定するのに役立ちます。
IPアドレスの形式
IPアドレスには主に2種類あります:
-
IPv4アドレス
- 例: 192.168.1.1
- 32ビットの番号で、4つの10進数(0〜255)で表現されます。各10進数はドットで区切られます。
- 現在、IPv4アドレスは枯渇しつつあります。
-
IPv6アドレス
- 例: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 128ビットの番号で、8つの16進数(0〜FFFF)で表現されます。各16進数はコロンで区切られます。
- IPv4の代替として導入され、非常に多くのアドレスを提供します。
ネットワークアドレス
ネットワークアドレスとは?
ネットワークアドレスは、特定のネットワークを識別するためのアドレスです。IPアドレスの一部で、そのネットワークに属するすべてのデバイスに共通する部分です。
ネットワークとホスト
IPアドレスは、通常次の2つの部分で構成されています:
-
ネットワーク部(ネットワークアドレス)
- ネットワーク全体を識別する部分です。
- 例: 192.168.1.0/24 では、「192.168.1」がネットワーク部です。
-
ホスト部
- ネットワーク内の個々のデバイス(ホスト)を識別する部分です。
- 例: 192.168.1.1 では、「1」がホスト部です。
サブネットマスク
サブネットマスクは、ネットワーク部とホスト部を区別するために使用されます。サブネットマスクは、ネットワーク内のどの部分がネットワークアドレスで、どの部分がホストアドレスであるかを示します。
- 例: 255.255.255.0 は、ネットワーク部が最初の3つのオクテット(192.168.1)であり、最後のオクテット(0)がホスト部であることを示します。
CIDR
CIDR(Classless Inter-Domain Routing)とは?
CIDR(Classless Inter-Domain Routing)は、IPアドレスの割り当てとルーティングの方法を柔軟にするための方式です。CIDRは、ネットワークをより効率的に管理し、IPアドレスの浪費を減らすために使われます。
CIDR表記
CIDRは、IPアドレスとその後にスラッシュ(/)と数字で構成されます。この数字は、ネットワークプレフィックスの長さ(ビット数)を示します。
- 例:192.168.1.0/24
- ここで、192.168.1.0はネットワークアドレス、/24はネットワークプレフィックスの長さを示します。
- /24は、最初の24ビットがネットワークアドレスで、残りの8ビットがホストアドレスであることを意味します。
サブネットマスクとCIDR
CIDR表記は、サブネットマスクと同じ役割を果たしますが、よりシンプルに表現できます。
- サブネットマスク:255.255.255.0
- CIDR表記:/24
これらは同じ意味で、ネットワーク部が最初の24ビット、ホスト部が残りの8ビットであることを示します。
CIDRの利点
-
柔軟性の向上:
- CIDRを使用することで、ネットワークの分割(サブネット化)が容易になります。たとえば、/24のネットワークを複数の/26ネットワークに分割することができます。
-
IPアドレスの効率的な利用:
- 固定のクラス(A、B、C)にとらわれず、必要なサイズのネットワークを割り当てることができます。これにより、無駄なアドレスの割り当てを避けられます。
-
ルーティングの簡素化:
- CIDRを使用することで、ルーティングテーブルが簡素化され、より少ないエントリで広範囲のネットワークをカバーできるようになります。これを「ルート集約(スーパーネット化)」と言います。
CIDRの具体例
例えば、192.168.1.0/24のネットワークを以下のように小さなサブネットに分割できます:
- 192.168.1.0/26(64アドレス、ホスト部分62)
- 192.168.1.64/26(64アドレス、ホスト部分62)
- 192.168.1.128/26(64アドレス、ホスト部分62)
- 192.168.1.192/26(64アドレス、ホスト部分62)
各サブネットは、独立した小さなネットワークとして機能します。
NAT
NAT(Network Address Translation)とは?
NAT(Network Address Translation)は、ネットワーク内のプライベートIPアドレスとインターネット上のパブリックIPアドレスを相互に変換する技術です。これにより、複数のデバイスが1つのパブリックIPアドレスを共有してインターネットに接続できるようになります。
NATの目的と利点
-
IPアドレスの節約:
- インターネットに接続するためのパブリックIPアドレスの数を減らすことができます。内部のプライベートネットワークでは、たくさんのデバイスがそれぞれユニークなプライベートIPアドレスを持ち、外部に出る際には1つのパブリックIPアドレスを共有します。
-
セキュリティの向上:
- 内部ネットワークのデバイスのプライベートIPアドレスは外部から直接アクセスできないため、セキュリティが向上します。
-
簡単なネットワーク管理:
- プライベートIPアドレスを使用することで、内部ネットワークの管理が容易になります。ネットワークの変更が外部に影響を与えにくくなります。
NATの種類
-
静的NAT(Static NAT):
- 1つのプライベートIPアドレスを1つのパブリックIPアドレスに固定的に対応させる方法です。
- 例: 192.168.1.10 (プライベートIP) ⇔ 203.0.113.10 (パブリックIP)
-
動的NAT(Dynamic NAT):
- 複数のプライベートIPアドレスを、利用可能なパブリックIPアドレスプールから動的に割り当てる方法です。
-
PAT(Port Address Translation):
- 1つのパブリックIPアドレスを複数のプライベートIPアドレスで共有する方法です。異なるポート番号を使って識別します。これをオーバーロードNATとも言います。
- 例: 192.168.1.10:12345 (プライベートIP:ポート) ⇔ 203.0.113.10:54321 (パブリックIP:ポート)
NATの動作
-
送信時:
- 内部ネットワークのデバイスからインターネットにアクセスする際、ルーターやファイアウォールがプライベートIPアドレスをパブリックIPアドレスに変換します。同時に、元のポート番号も変換されることがあります(PATの場合)。
-
受信時:
- インターネットから戻ってくるデータは、パブリックIPアドレス宛に送信されます。ルーターやファイアウォールはこのパケットを元のプライベートIPアドレスとポート番号に変換し、適切な内部デバイスに転送します。
NATの具体例
-
内部から外部への通信:
- デバイスA (192.168.1.2) がウェブサイト(例えば、example.com)にアクセスする。
- ルーターは、192.168.1.2のプライベートIPアドレスを203.0.113.5のパブリックIPアドレスに変換してデータを送信。
- example.comからの応答が203.0.113.5に送られると、ルーターはそのデータを192.168.1.2に戻す。
-
外部から内部への通信(ポートフォワーディング):
- ルーターの設定により、特定のポートへのアクセスを内部の特定のデバイスに転送することができます。
- 例えば、203.0.113.5のポート8080へのアクセスは192.168.1.2のポート80に転送される。
EC2
EC2について
Amazon Elastic Compute Cloud (EC2)は、AWSが提供するスケーラブルなコンピューティング能力を提供するサービスです。EC2を使用することで、物理サーバーを購入して維持することなく、仮想マシン(インスタンス)を迅速にデプロイし、さまざまなアプリケーションを実行できます。
EC2インスタンス
EC2インスタンスは、仮想サーバーとして機能し、任意のソフトウェアを実行できます。インスタンスにはさまざまなタイプがあり、異なるCPU、メモリ、ストレージ、ネットワーク性能を提供します。
OSI基本参照モデル
OSI基本参照モデルとは
コンピューターネットワークにおける通信プロトコルの設計と説明を標準化するために策定されたモデルです。このモデルは7つの階層(レイヤー)から成り立ち、それぞれが特定の通信機能を担当しています。以下に各階層の役割と具体例を示します。
OSI基本参照モデルの階層
-
物理層(Physical Layer)
- 物理的なデータ転送を管理し、データのビットストリームを送受信する階層です。
- 具体的な技術: Ethernet、Wi-Fi、光ファイバーなど
-
データリンク層(Data Link Layer)
- 直接接続されたノード間のデータ転送を管理し、誤り検出・訂正を行う層です。
- 具体的な技術: MACアドレス、イーサネット、PPP(Point-to-Point Protocol)など
-
ネットワーク層(Network Layer)
- 異なるネットワーク間の経路選択と転送を行う層です。ルーティングを担当します。
- 具体的な技術: IP(Internet Protocol)、ICMP(Internet Control Message Protocol)、ルーターなど
-
トランスポート層(Transport Layer)
- エンドツーエンドの通信を管理し、データの信頼性や整合性を確保します。
- 具体的な技術: TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)など
-
セッション層(Session Layer)
- エンドツーエンドの通信セッションの管理を行い、通信の確立、維持、終了を管理します。
- 具体的な技術: RPC(Remote Procedure Call)、NetBIOSなど
-
プレゼンテーション層(Presentation Layer)
- データの形式や表現方法を定義し、アプリケーション層が理解できる形式に変換します。
- 具体的な技術: JPEG、MPEG、ASCII、EBCDICなど
-
アプリケーション層(Application Layer)
- 最上位の階層で、ユーザーが直接操作するアプリケーションに通信サービスを提供します。
- 具体的な技術: HTTP、FTP、SMTP、DNSなど
-
AWS CLI、AWS CloudShellのどちらかでコマンドを実行できますが、AWSアカウントがある場合はCloudShellを使用するのが手っ取り早いです。 ↩︎
-
トランスポート層、ネットワーク層といった用語はOSI基本参照モデルを参考にしています。 ↩︎
Discussion