システムの環境

システムを構築していく際、1つの環境で完結するのではなく、環境を移しながら構築を進めていく。より細かい分類もできるけど、大まかには開発環境、テスト環境、本番環境の順に環境を移していくことになる。
開発環境は、システムの開発で使う環境のこと。いきなり高性能な環境を使うことはせず、簡単に用意できる環境で開発を進めるよ。
システムを開発したら、それをテスト環境に渡します。テスト環境は、名前の通り、テストで使う環境のこと。テストを進める中でバグが見つかれば、開発環境に戻して作り直すことになる。
これを何回か繰り返し、バグがなくなったら、いよいよ本番環境に移すよ。本番環境は、システムの提供に使う環境のこと。実際のユーザーに使ってもらう、高性能な環境だよ。
ネットワークとインターネット
ネットワークやインターネットによって、遠くの人や物が繋がることができるようになった。日常的には、ネットワークとインターネットを同じ意味で使うと思う。でも、より理解を深めるため、ここからはネットワークとインターネットを分けて考えることにするよ。

ネットワークとインターネットは、どちらも何かと何かを繋ぐものだけど、厳密には異なるよ。
ネットワークは、企業、学校、家庭など拠点内のコンピュータを繋ぐもの。例えば、社内ネットワークであれば、企業内のパソコンやプリンターを繋ぐ接続になる。ネットワークは、接続できる人や物が限定されているので、セキュリティが高い点が特徴だよ。身分証明書を印刷する時など、家内ネットワークで繋がったパソコンやプリンターであれば、安心して印刷することができる。また、回線が混雑することがなく、接続が安定している点も長所だよ。
一方、インターネットは、ネットワーク同士を繋ぐもの。外出先から会社への接続、自宅から動画サイトへの接続、オンプレからAWSへの接続は、インターネットが使われている。不特定多数の人が使うため、紛れているハッカーに攻撃されやすく、セキュリティが低いといえる。直感的にも、身分証明書をインターネットにアップロードすることに抵抗を感じると思う。セキュリティ面に加えて、回線が混雑すれば接続が不安定になる点も短所だよ。
まとめると、グループ内を繋ぐものがネットワーク、グループ同士を繋ぐものがインターネットになる。インターネットよりネットワークの方が、セキュリティが高く、安定しているよ。
Amazon VPC
Amazon VPCは、AWS内のネットワークを分割するAWSリソース。AWS内のネットワークは、アプリ、サービス、組織、部署、環境(開発環境、テスト環境、本番環境)ごとに分けるよ。
なぜ分ける必要があるのかというと、それぞれを適切に管理するため。少し大げさな例えだけど、世界はいくつかの国に分かれている。もしそうではなかったら、大きすぎて管理できなかったと思う。
Amazon VPCでネットワークを分ける理由もこれと同じ。Amazon VPCは、国のようにネットワークを分けて、他国または国内の繋がりを作る。
大きなネットワークを小さなネットワーク分けることによって、管理しやすくなり、必要な接続を作ることができるよ。

Amazon VPCで分けたネットワークは、サブネットでさらに小さく分ける。Amazon VPCを国に例えるなら、サブネットは都道府県に当たるよ。
Amazon VPCやサブネットに、IPアドレスを割り振る。分けられた土地の名前や住所を分かるようにするためだよ。
Amazon VPCは、1つのアベイラビリティゾーンに作成することができ、複数のアベイラビリティゾーンを跨いで作ることもできる。
サブネットは、1つのアベイラビリティゾーンに作成することができ、複数のアベイラビリティゾーンを跨いで作ることができない。
Amazon VPCの機能
Amazon VPCには、主に3つの機能があるよ。

Amazon VPCやサブネットは、最初はどことも通信できないように設定されている。そのため、他の国とやり取りする場合は通信の許可を行う必要がある。通信の許可をすることによって、特定のAmazon VPCやサブネットを、インターネットなどに繋げることができるよ。
他の国に当たる、インターネットやオンプレと接続するには、ゲートウェイが必要になる。
ゲートウェイは、Amazon VPCの外と内を隔てる門のこと。主なゲートウェイは3種類あるよ。
- インターネットゲートウェイ
- NAT(Network Address Translator)ゲートウェイ
- 仮想プライベートゲートウェイ
インターネットゲートウェイとNATゲートウェイは、Amazon VPCをインターネットに繋げるための門。
仮想プライベートゲートウェイは、Amazon VPCをオンプレに繋げるための門。
これらの門が空いていれば、インターネットやオンプレに到達することができる。逆に、門を作らなければ、インターネットやオンプレに到達できない設定になるよ。

ルートテーブルは、インターネットやネットワークの地図のようなもの。ルートテーブルには、IPアドレスとゲートウェイを書いておく。
左の例だと、192.168.0.0/28はインターネットゲートウェイへと書かれている。
こうすることで、このIPアドレスはこのゲートウェイに向かってほしい、そのゲートウェイからはそのIPアドレスに向かってほしいといった、道案内をすることができるよ。

パブリックサブネットは、インターネットに繋がっているサブネット。
パブリックサブネットのIPアドレスは、ルートテーブルでインターネットゲートウェイに向けられている。インターネットに繋がっているため、ユーザーに公開されていて、ハッカーから狙われやすい部分になるよ。
プライベートサブネットは、インターネットに繋がっていないサブネット。
プライベートサブネットのIPアドレスは、ルートテーブルでインターネットゲートウェイに向けられていないよ。インターネットに繋がっていないため、非公開で安全な部分になる。
プライベートサブネットは、顧客情報など大事なデータを置く場合に適しているよ。
ゲートウェイの詳細
それぞれのゲートウェイの詳細はこちら。
- インターネットゲートウェイとNATゲートウェイの違い
インターネットゲートウェイとNATゲートウェイは、どちらもAmazon VPCをインターネットに繋げるための門。
特に、インターネットゲートウェイはパブリックサブネットをインターネットに繋ぐための門だよ。パブリックサブネットからインターネットにアクセスすることができ、インターネットからパブリックサブネットにアクセスすることもできる。
一方、NATゲートウェイは、プライベートサブネッットをインターネットに繋ぐための門だよ。プライベートサブネットからインターネットにアクセスすることができるけと、インターネットからプライベートサブネットにアクセスすることはできないよ。
プライベートサブネットは、大事なものを隠すように置く場所なので、インターネットと繋がっていない方が望ましい。
でも、どうしてもプライベートサブネットをインターネットに繋がなければならない場合があるよ。仮に、プライベートサブネットにAmazon EC2を配置したとする。Amazon EC2は、一部アンマネージドサービスなので、定期的にソフトウェアの更新を行わなければならない。ソフトウェアの更新は、インターネットに繋がなければ行えない作業だよ。
そういった事情で、プライベートサブネットをインターネットに少しだけ繋ぎたい時、NATゲートウェイを踏み台にする。具体的には、NATゲートウェイをパブリックサブネットに配置して、NATゲートウェイを経由してインターネットと繋ぐ。
この配置を取ることで、NATゲートウェイを踏み台、言い換えれば身代わりにすることができる。もしハッカーに攻撃されても、被害はNATゲートウェイのあるパブリックサブネットに留まり、プライベートサブネットに及ぶことはないよ。
NATゲートウェイを踏み台にすることにより、プライベートサブネットをインターネットで繋いで、安全にソフトウェアの更新などを行うことができる。
- NATゲートウェイとNATインスタンスの違い
NATゲートウェイと同じく、踏み台の役割を果たすものにNATインスタンスというものがある。
NATゲートウェイとNATインスタンスの違いはこちら。
NATゲートウェイ NATインスタンス 管理 マネージドサービス 一部アンマネージドサービス 単一障害点 ならない なる カスタマイズ性 なし あり コスト 高い 安い
NATゲートウェイはマネージドサービス。管理をAWS側で行うため、単一障害点になることはない。カスタマイズ性が低く、料金はやや高め。
NATインスタンスはAmazon EC2で作成する。Amazon EC2が一部アンマネージドサービスなので、何もしなければ単一障害点になってしまう。NATインスタンスを複数台用意して、複数のアベイラビリティゾーンに配置するなど、単一障害点にならないよう工夫する必要があるよ。また、カスタマイズ性があり、コストを抑えることができる点が長所。
NATインスタンスを作る時の注意点として、送信元/送信先チェックの無効化が挙げられる。送信元/送信先チェックが有効になっていると、上手く通信できない可能性があるので、忘れずに無効化するよ。
- NATゲートウェイとEgress-Onlyインターネットゲートウェイの違い
もう1つ、NATゲートウェイと同じ踏み台の役割を果たすものに、Egress-Onlyインターネットゲートウェイというものがある。
NATゲートウェイとEgress-Onlyインターネットゲートウェイは、扱えるIPアドレスが異なる。NATゲートウェイはIPv4のIPアドレスを扱えるのに対し、Egress-OnlyインターネットゲートウェイはIPv6のIPアドレスを扱うことができるよ。
以前はIPv4のIPアドレスしかなかったけれど、IPアドレスが使われていくにつれて、だんだんと不足していった。そこで、その不足を補うために、IPv6のIPアドレスが作られた。
NATゲートウェイは、プライベートサブネットからIPv4のIPアドレスでインターネットに繋ぐ。それに対し、Egress-Onlyインターネットゲートウェイは、プライベートサブネットからIPv6のIPアドレスでインターネットに繋ぐよ。- 仮想プライベートゲートウェイ
-
仮想プライベートゲートウェイは、Amazon VPCをオンプレに繋げるための門。ルートテーブルで、行先を仮想プライベートゲートウェイに指定すると、オンプレに接続することができる。
AWS Direct ConnectとAWS VPNは、Amazon VPCとオンプレ間を接続する専用線のこと。
カスタマーゲートウェイは、仮想プライベートゲートウェイと同じ役割を持つもので、Amazon VPCとオンプレを接続する門。
カスタマーゲートウェイと仮想プライベートゲートウェイは、配置場所が異なるだけ。仮想プライベートゲートウェイはAWS側に、カスタマーゲートウェイはオンプレ側に配置するよ。
VPCピアリング
VPCピアリングは、2つのAmazon VPCをネットワークで接続するもの。異なるリージョンや、異なるAWSアカウントにあるAmazon VPC同士を、インターネットを介さずに接続することができる。

VPCピアリングは、間接的に繋ぐことができない。
上では、VPC①とVPC②、VPC②とVPC③はVPCピアリングで接続されている。
しかし、これでVPC①とVPC③が繋がったことにはならない。VPC①とVPC③を繋ぐのであれば、VPC①とVPC③で直接VPCピアリングを行う必要がある。
プロトコルとポート番号

ゲートウェイやVPCピアリングは、他国との繋がりを作るもの。ここからは、国内の繋がりを作る話に移るよ。
前提知識として、プロトコルとポート番号というものがある。
プロトコルは、通信する時の決まりごと。IPアドレスが住所なら、プロトコルは配送方法のこと。車、船、飛行機など様々な配送方法があるように、通信する方法にも種類があり、それをプロトコルという。
プロトコルには、それぞれ番号が割り振られている。その番号のことを、ポート番号というよ。
ポート番号 | プロトコル | 正式名称 | 用途 |
---|---|---|---|
20、21 | FTP | File Transfer Protocol | ファイルの送受信 |
22 | SSH | Secure Shell | リモート(遠隔)操作 |
23 | Telnet | Telnet | リモート(遠隔)操作 |
25 | SMTP | Simple Mail Transfer Protocol | メールの送信 |
53 | DNS | Domain Name System | 名前解決 |
80 | HTTP | Hypertext Transfer Protocol | インターネットでの通信(内容の暗号化なし) |
110 | POP3 | Post Office Protocol version 3 | メールの受信 |
143 | IMAP4 | Internet Mail Access Protocol version 4 | メールの受信 |
443 | HTTPS | Hypertext Transfer Protocol Secure | インターネットでの通信(内容の暗号化あり) |
445 | SMB | Server Message Block | ファイルやプリンター共有 |
1433 | SQL Server | Microsoft SQL Server | Microsoft社のデータベースとの通信 |
1521 | Oracle Database | Oracle Database | オラクル社のデータベースとの通信 |
2049 | NFS | Network File System | ネットワークを経由したファイルシステムの通信 |
3306 | MySQL、 Amazon Aurora |
MySQL、Amazon Aurora | MySQLやAmazon Auroraとの通信 |
3389 | RDP | Remote Desktop Protocol | デスクトップのリモート(遠隔)操作 |
5432 | PostgreSQL | PostgreSQL | PostgreSQLとの通信 |
5439 | Redshift | Amazon Redshift | Amazon Redshiftとの通信 |
もっと見る
名前解決は、IPアドレスとドメイン名を変換すること。IPアドレスとドメイン名は、イコールの関係にある。IPアドレスはコンピュータ向け、ドメイン名は人向けの住所の書き方だよ。
MySQLとPostgreSQLは、データベースエンジンと呼ばれるもので、今のところはデータベースの種類と思ってほしい。
Amazon AuroraとAmazon Redshiftは、データベース関連のAWSリソース。
アクセス管理
Amazon VPCで分けたネットワークの内側は、セキュリティグループとネットワークAccess Control List(ACL)で管理する。
これらでアクセス管理をする時、セキュリティの観点から、最小限の許可に留めることが望ましい。必要な通信のみ許可して、不要な通信は排除するよう心掛けるよ。
セキュリティグループとネットワークACLの違いについてはこちら。
セキュリティグループ | ネットワークACL | |
---|---|---|
対象 | インスタンスの通信 | サブネットの通信 |
方向 | インバウンドとアウトバウンドで制御 | インバウンドとアウトバウンドで制御 |
ステート | ステートフル | ステートレス |
デフォルト | 全てのインバウンドを拒否、同じセキュリティグループ内のインスタンスのアウトバウンドのみ許可 | 全てのインバウンドとアウトバウンドを許可 |
順序性 | 全てのルールを適用 | 数字が低い方から適用 |
インスタンスは、何らかの実物のことで、例えばAmazon EC2やAmazon RDSのこと。
インバウンドは、外部からAmazon VPC内へ入ってくる内向きの制御のこと。
アウトバウンドは、Amazon VPC内から外部に出ていく外向きの制御のこと。
ステートフルは、状態を維持すること。行きのトラフィックが許可されれば、戻りのトラフィックも許可される。
ステートレスは、状態を維持しないこと。行きのトラフィックが許可されても、戻りのトラフィックも許可しない限り遮断される。
ステートフルとステートレスの違いはこちら。
0 / 0


エンドポイント
エンドポイントは、Amazon VPC内からAmazon VPC外のAWSリソースに、ネットワークで接続するもの。基本的にAWSリソースはVPC内に配置するけど、例外的にVPC外に配置することもある。Amazon VPC外のAWSリソースと接続する場合、エンドポイントを介する必要があるよ。
エンドポイントには、ゲートウェイ型とプライベートリンク型の2つがある。ゲートウェイ型は、Amazon VPC内からAmazon S3とAmazon DynamoDBに接続することができる。プライベートリンク型は、Amazon VPC内からその他全てのAWSリソースに接続することができるよ。

AWS PrivateLinkは、ネットワークで接続するAWSリソース。
ENI(Elastic Network Interface)は、物理的な環境におけるNIC(Network Interface Card)のこと。NICは、インターネットと接続するための有線(LANケーブル)を挿す、PCにある穴だよ。
VPCフローログ
VPCフローログは、Amazon VPC内の通信のログを取るもの。ENIごとに、どのような通信が行われていたかを記録するよ。
VPCフローログで取得されるログは、IPアドレス、ポート番号、プロトコル、データ量など。障害が起きた時や、不正アクセスがされた際に、VPCフローログを分析すれば原因の特定に役立つよ。