2021/6/25 一部修正しました。
#はじめに
今回の記事ではAWS上での基本的なネットワーク環境の作成、EC2インスタンスの作成について記載します。
作成手順がベースとなりますが、随時補足しながら記載していきます。
#作業環境
macOS Big Sur バージョン 11.4
※リソースはすべて東京リージョンに作成します。
#VPC作成
#####VPC(Amazon Virtual Private Cloud)とは
- AWSにおけるネットワーク環境を定義する仮想ネットワークのサービス
- このネットワークにEC2などのAWSリソースを配置していく
- VPC自体の作成には料金は発生しない
#####リージョンを選択
Management Consoleにログインし、まずはリージョンを選択します。
画面右上のプルダウンから使用したいリージョンを選択します。
※ここでは「アジアパシフィック(東京)」リージョンを選択します。
#####VPCを作成
リージョンが選択できたら、VPCの作成に進みます。
画面上部の[サービス]を展開し、"ネットワーキングとコンテンツ配信"内の[VPC]をクリックします。
【別の方法】
検索バーを使用して、サービスを検索することも可能です。
VPC ダッシュボードが開きます。
画面左メニューで[VPC]をクリックします。
画面右ペインにVPCの一覧が表示されます。
ここで表示されるのは選択しているリージョンに作成されているVPCとなります。
[VPCを作成]をクリックします。
VPC作成ウィザードが開きます。
"名前タグ"にVPCの名前、"IPv4 CIDR ブロック"にVPCのIPv4アドレス範囲をCIDR形式で入力します。
"名前タグ"に入力したVPCの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[VPCを作成]をクリックします。
先ほどのVPC一覧画面で作成したVPCが表示されることを確認します。
VPCの作成は完了です。
続いてサブネットを作成していきます。
#パブリックサブネット作成
#####パブリックサブネットとは
- インターネットゲートウェイにルーティングされているサブネット
- VPCに紐づけて作成し、VPCのCIDR範囲内でサブネットのCIDRを指定
- サブネットの作成には料金は発生しない
#####インターネットゲートウェイとは
- VPCとインターネットとの通信を可能にするコンポーネント
- VPCに対して一つだけアタッチすることができる
- インターネットゲートウェイの作成には料金は発生しない
#####サブネットを作成
まずはパブリックサブネットとして構成するサブネットを作成します。
VPC画面の左メニューで[サブネット]をクリックします。
画面右ペインにサブネットの一覧が表示されます。
[サブネットを作成]をクリックします。
サブネット作成ウィザードが開きます。
"VPC ID"でサブネットを作成するVPCをプルダウンから選択します。
"アベイラビリティーゾーン"でサブネットを作成するアベイラビリティーゾーンをプルダウンから選択します。
【補足】
アベイラビリティーゾーン(AZ)とは複数のデータセンターから構成される単位となります。
各リージョンは複数のAZから構成されることで冗長性を確保しています。
東京リージョンは4つのAZで構成されていますが、通常使用できるのは以下の3つとなります。
- ap-northeast-1a
- ap-northeast-1c
- ap-northeast-1d
"IPv4 CIDR ブロック"にサブネットのIPv4アドレス範囲をCIDR形式で入力します。
IPv4アドレス範囲はVPCのアドレス範囲内となるように指定します。
また、"サブネット名"に入力したサブネットの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[サブネットを作成]をクリックします。
#####インターネットゲートウェイを作成・VPCへのアタッチ
サブネットが作成できたら、次にインターネットゲートウェイを作成していきます。
画面左メニューで[インターネットゲートウェイ]をクリックします。
画面右ペインにインターネットゲートウェイの一覧が表示されます。
[インターネットゲートウェイを作成]をクリックします。
インターネットゲートウェイ作成ウィザードが開きます。
"名前タグ"にインターネットゲートウェイの名前を入力します。
"名前タグ"に入力したインターネットゲートウェイの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[インターネットゲートウェイを作成]をクリックします。
インターネットゲートウェイが作成されます。
続けてVPCへのアタッチを実施するので、画面上部バーの[VPCへアタッチ]をクリックします。
"使用可能な VPC"で先ほど作成したVPCを選択し、[インターネットゲートウェイのアタッチ]をクリックします。
インターネットゲートウェイのアタッチが完了しました。
これでVPCとインターネットゲートウェイの紐付けが完了した状態となりますが、インターネットに接続するためにはサブネットに関連付いたルートテーブルにインターネットゲートウェイへのルートを追加する必要があります。
#####インターネットゲートウェイへのルートを追加
サブネット一覧画面から作成したサブネットを選択し、画面下ペインの[ルートテーブル]タブをクリックします。
その後、表示されたルートテーブルのIDをクリックします。
クリックしたルートテーブルが選択されている状態のルートテーブル一覧画面が表示されます。
画面下ペインで[ルート]タブをクリック後、[ルートを編集]をクリックします。
ルート編集画面が開きます。
インターネットゲートウェイへのルートが追加されていない状態なので、追加していきます。
[Add route]をクリックします。
新規追加された枠で"Destination"に「0.0.0.0/0」と入力し、"Target"で「Internet Gateway」を選択します。
自動的に"Target"に「igw-」と入力されるので、選択肢の中から先ほど作成したインターネットゲートウェイを選択し、[変更を保存]をクリックします。
インターネットゲートウェイへのルートが追加されます。
これでパブリックサブネットとして構成され、インターネットへの接続ができる状態となりました。
#####現状の構成図
続いてプライベートサブネットを作成していきます。
#プライベートサブネット作成
#####プライベートサブネットとは
- インターネットゲートウェイにルーティングされていないサブネット
- インターネットからプライベートサブネットにアクセスすることはできない
- プライベートサブネットからインターネットにアクセスするにはNATゲートウェイを構成する必要がある(NATゲートウェイについては後述する)
- VPCに紐づけて作成し、VPCのCIDR範囲内でサブネットのCIDRを指定
- サブネットの作成には料金は発生しない
#####サブネットを作成
「パブリックサブネット作成」のサブネット作成手順を参照します。
今回はパブリックサブネットと同じアベイラビリティーゾーン(AZ)にプライベートサブネットを作成します。
#####現状の構成図
EC2インスタンスを作成し、まずはパブリックサブネットに配置していきます。
#EC2インスタンス 作成
#####EC2(Amazon Elastic Compute Cloud)とは
- AWSが提供するIaaSサービスで、数分で構築可能な仮想インスタンス
- 作成や削除、スペック変更などを時間をかけずに柔軟に対応することが可能
- スペック(インスタンスタイプ)や購入オプションによって課金額が異なる
#####EC2インスタンスを作成
画面上部の[サービス]を展開し、"コンピューティング"内の[EC2]をクリックします。
EC2 ダッシュボードが開きます。
画面左メニューで[インスタンス]をクリックします。
画面右ペインにEC2インスタンスの一覧が表示されます。
[インスタンスを起動]をクリックします。
EC2インスタンス作成ウィザードが開きます。
EC2を作成する際にはインストールするOSやアプリケーションが構成されたイメージ(AMI)を選択します。
使用したいAMIイメージの右側の[選択]をクリックします。
次にインスタンスタイプを選択します。
選択するインスタンスタイプによってEC2インスタンスのCPUやメモリなどのスペックが変わります。
使用したいインスタンスタイプを選択し、[次のステップ: インスタンスタイプの詳細の設定]をクリックします。
次にインスタンスの詳細設定を行います。
インスタンスについての細かい設定をすることが可能ですが、今回は最低限のネットワーク設定のみ変更していきます。
"ネットワーク"でインスタンスを配置するVPC、"サブネット"でインスタンスを配置するサブネットを選択します。
まずはパブリックサブネットに配置するインスタンスを作成するため、"自動割り当てパブリックIP"で[有効]を選択し、[次のステップ: ストレージの追加]をクリックします。
次にストレージの追加画面が表示されます。
今回は特にストレージ追加は実施しないので、[次のステップ: タグの追加]をクリックします。
次にタグの追加を行います。
必須ではありませんが、今回は管理しやすくするためにNameタグを付けます。
[タグの追加]をクリックします。
"キー"に「Name」、"値"にインスタンスの名前を入力し、[次のステップ: セキュリティグループの設定]をクリックします。
次にセキュリティグループの設定を行います。
セキュリティグループとはインスタンスへのトラフィックのアクセス可否を制御するファイアウォール機能を提供するもので、インスタンス単位で適用することが可能です。
今回はハンズオンのため、新しいセキュリティグループを作成し、インターネット経由でSSHで接続できるような設定とします。
[新しいセキュリティグループを作成する]を選択します。
必要に応じて"セキュリティグループ名"にセキュリティグループの名前を入力します。
今回は自動で設定された名前を使用します。
また、インターネット(0.0.0.0/0)からのSSHを許可するルールが自動的に追加されており、そのままだとどこからでもSSH接続できるようになっています。
セキュリティ的によろしくないので、"ソース"で「マイ IP」を選択します。
「マイ IP」を選択すると、現在使用している端末がインターネットに接続する際に使用しているグローバルIPアドレスが自動的に入力されます。
※画像ではIPアドレスを塗りつぶしています。
※使用するグローバルIPアドレスが異なるネットワーク環境からのSSH接続はできません。
今まで設定した内容の確認画面となります。
設定内容を確認し問題なければ[起動]をクリックします。
インスタンスに接続するために必要となるキーペアの作成ウィンドウが表示されます。
キーペアはAWSが保存する「パブリックキー」とユーザーが保存する「プライベートキー」で構成されるものです。
後ほどSSHでインスタンスに接続する際に必要になりますので、新しく作成していきます。
[新しいキーペアの作成]を選択し、<キーペア名>にキーペアの名前を入力します。
[キーペアのダウンロード]をクリックし、プライベートキーファイルをダウンロードします。
ダウンロードが完了したら、[インスタンスの作成]をクリックします。
※[インスタンスの作成]をクリックするとインスタンス作成が開始し、インスタンスが起動するため、課金が発生します。
作成ステータス画面となります。
[インスタンスの表示]をクリックします。
インスタンス一覧画面が表示されます。
インスタンスが作成されていることを確認します。
#####現状の構成図
作成が確認できたら、作成したインスタンスにSSH接続してみます。
#SSH接続
インスタンスにSSH接続をしていきますが、ここではターミナルを使用します。
※SSH接続に使用するのはTera Term等のアプリケーションでも可能です。
まずはインスタンスに割り振られているパブリックIPアドレスをManagement Consoleから確認します。
インスタンス一覧画面でインスタンスを選択し、画面下部で[詳細]タブをクリックし、"パブリック IPv4 アドレス"の値を確認します。
IPアドレスの左のアイコンをクリックすることで、コピーすることも可能です。
ターミナルを開き、SSH接続をしていきます。
キーペア作成時にダウンロードしておいたプライベートキーファイルが必要になりますので、配置したパスを確認しておきます。
また、インスタンスにデフォルトで作成されるユーザーは「ec2-user」となりますので、SSH接続する際に使用するユーザーとして指定します。
$ cd <プライベートキーファイルを配置したパス>
$ ssh -i <プライベートキーファイル名> ec2-user@<インスタンスのパブリックIPアドレス>
実行すると以下のような接続確認をされるので、「yes」と入力し、Enterを入力します。
The authenticity of host '52.195.6.222 (52.195.6.222)' can't be established.
ECDSA key fingerprint is SHA256:4aV6w2T24e47JztHAm6VhAnwvoQzMXm1y+DjOvXDUnE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
プライベートキーへのパーミッションが緩すぎると以下のような警告が表示され、インスタンスへのSSH接続に失敗します。
Warning: Permanently added '52.195.6.222' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'ec2-test.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "ec2-test.pem": bad permissions
ec2-user@52.195.6.222: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
今回の場合は「Permissions 0644 for 'ec2-test.pem' are too open.」とあるように、プライベートキーファイル[ec2-test.pem]に対して、パーミッションが「644」では緩すぎるということになります。
ここではパーミッションを「400」に変更し、再度SSH接続をしてみます。
$ chmod 400 <プライベートキーファイル名>
$ ssh -i <プライベートキーファイル名> ec2-user@<インスタンスのパブリックIPアドレス>
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-1-126 ~]$
インスタンスにSSH接続することができました。
次にインターネット接続ができることを確認していきます。
#インターネット接続確認
www.google.co.jp に対して ping で疎通確認をし、インターネット接続を確認します。
インスタンス上で以下のコマンドを実行します。
[ec2-user@ip-10-0-1-126 ~]$ ping www.google.co.jp -c 3
PING www.google.co.jp (172.217.175.227) 56(84) bytes of data.
64 bytes from nrt12s29-in-f3.1e100.net (172.217.175.227): icmp_seq=1 ttl=105 time=3.83 ms
64 bytes from nrt12s29-in-f3.1e100.net (172.217.175.227): icmp_seq=2 ttl=105 time=3.86 ms
64 bytes from nrt12s29-in-f3.1e100.net (172.217.175.227): icmp_seq=3 ttl=105 time=3.79 ms
--- www.google.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.795/3.830/3.860/0.026 ms
疎通が取れ、インターネットに接続できていることを確認できました。
#NATゲートウェイ作成
#####NATゲートウェイとは
- プライベートサブネットからインターネットへのアクセスを可能にするコンポーネント
- NATゲートウェイ自体はパブリックサブネットに配置する
- NATゲートウェイは時間単位、処理データ1GB単位で料金が発生する
- 1時間あたりの料金:0.045USD (約4.95円)
- 処理データ1GBあたりの料金:0.045USD (約4.95円)
※1USD = 110円で計算
#####プライベートサブネットにEC2インスタンスを作成
「EC2インスタンス 作成」のインスタンス作成手順を参照します。
以下の設定を確認しながら、プライベートサブネットにインスタンスを作成します。
- サブネット:プライベートサブネットに配置
- 自動割り当てパブリックIP:無効
- セキュリティグループ:パブリックサブネットからのSSH接続を許可するように新規作成
- キーペア:パブリックインスタンスを同じものを使用
#####プライベートインスタンスのIPアドレスを確認
プライベートインスタンスに割り振られているプライベートIPアドレスをManagement Consoleから確認します。
インスタンス一覧画面でプライベートインスタンスを選択し、画面下部で[詳細]タブをクリックし、"プライベート IPv4 アドレス"の値を確認します。
IPアドレスの左のアイコンをクリックすることで、コピーすることも可能です。
#####パブリックインスタンスにプライベートキーファイルを転送
プライベートインスタンスにSSH接続していきます。
パブリックIPアドレスを持っていないため、パブリックインスタンスを踏み台としてSSH接続をする必要があります。
SSH接続をするためにパブリックインスタンスにプライベートキーファイルを転送します。
ここでは「/tmp」にプライベートキーファイルを転送します。
$ cd <プライベートキーファイルを配置したパス>
$ scp -i <プライベートキーファイル名> <転送するファイル名> ec2-user@<パブリックインスタンスのパブリックIPアドレス>:/tmp/
パブリックインスタンスにSSH接続し、/tmp にプライベートアクセスキーが配置されていることを確認します。
[ec2-user@ip-10-0-1-126 ~]$ ls /tmp
ec2-test.pem systemd-private-4e90d1f46c0d400cbabd5392018c68f4-chronyd.service-w4Hijj
#####プライベートインスタンスにSSH接続
パブリックインスタンスからプライベートインスタンスにSSH接続をします。
※同じVPC内のサブネット間の通信はデフォルトのルート設定によって許可されています。
[ec2-user@ip-10-0-1-126 ~]$ cd /tmp
[ec2-user@ip-10-0-1-126 tmp]$ ssh -i <プライベートキーファイル名> ec2-user@10.0.2.42
The authenticity of host '10.0.2.42 (10.0.2.42)' can't be established.
ECDSA key fingerprint is SHA256:jBtwGNVNXKDEfX/TqiyLUINu10Qq5gc8BLQR+ukt/Xk.
ECDSA key fingerprint is MD5:c3:bf:85:9f:96:3f:c8:ca:5b:cd:84:0f:65:cd:70:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.42' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-0-2-42 ~]$
#####インターネット接続を確認
www.google.co.jp に対して ping で疎通確認をし、インターネット接続を確認します。
[ec2-user@ip-10-0-2-42 ~]$ ping www.google.co.jp -c 3
PING www.google.co.jp (172.217.25.99) 56(84) bytes of data.
--- www.google.co.jp ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2040ms
現時点でプライベートインスタンスからインターネットにアクセスすることはできません。
NATゲートウェイを作成し、インターネットにアクセスできるようにしていきます。
#####NATゲートウェイを作成
NATゲートウェイを作成していきます。
VPC画面の左メニューで[NAT ゲートウェイ]をクリックします。
画面右ペインにNATゲートウェイの一覧が表示されます。
[NAT ゲートウェイを作成]をクリックします。
NATゲートウェイ作成ウィザードが開きます。
"名前"にNATゲートウェイの名前を入力します。
"サブネット"でNATゲートウェイを配置するパブリックサブネットを選択します。
"Connectivity type"はデフォルト値のまま「Public」とします。
"Elastic IP 割り当て ID"で使用するElastic IP アドレスを選択します。
Elastic IP アドレスとは固定で使用できるパブリックIPアドレスです。
事前に作成することも可能ですが、ここでは[Elastic IP の割り当て]をクリックし、自動で作成・割り当てをします。
※Elastic IP アドレスを別途作成する場合はインスタンス等に割り当てしていない状態だと課金されます。
"名前"に入力したNATゲートウェイの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[NAT ゲートウェイを作成]をクリックします。
次にプライベートサブネットに関連付いたルートテーブルに対して、NATゲートウェイへのルートを設定します。
#####NATゲートウェイへのルート設定
サブネット一覧画面でプライベートサブネットを選択し、画面下部の[ルートテーブル]タブをクリックします。
パブリックサブネットと同じルートテーブルが関連付けられているため、インターネットゲートウェイへのルートが設定されています。
プライベートサブネット用にルートテーブルを別途作成し、関連付けます。
画面左メニューで[ルートテーブル]をクリックします。
画面右ペインでルートテーブル一覧画面が表示されます。
[ルートテーブルを作成]をクリックします。
"VPC"でルートテーブルを関連付けるプライベートサブネットが所属するVPCを選択します。
"名前"に入力したルートテーブルの名前を値とした「Name」キーのタグが追加されています。
必要に応じてその他のタグを追加し、[ルートテーブルを作成]をクリックします。
ルートテーブルが作成されます。
[ルートを編集]をクリックします。
デフォルトでVPC内通信のためのルートのみが設定されているので、NATゲートウェイへのルートを追加します。
[Add route]をクリックします。
新規追加された枠で"Destination"に「0.0.0.0/0」と入力し、"Target"で「NAT Gateway」を選択します。
自動的に"Target"に「nat-」と入力されるので、選択肢の中から先ほど作成したNATゲートウェイを選択し、[変更を保存]をクリックします。
NATゲートウェイへのルートが追加されます。
次にこのサブネットをプライベートサブネットに関連付けていきます。
サブネット一覧画面でプライベートサブネットを選択し、[アクション]-[ルートテーブルの関連付けを編集]をクリックします。
ルートテーブルの関連付け編集画面が表示されます。
"ルートテーブル ID"で先ほど作成したルートテーブルを選択し、[保存]をクリックします。
プライベートサブネットに関連付けられたルートテーブルが変更されます。
これでプライベートサブネットからNATゲートウェイへのルートが設定されている状態になります。
プライベートインスタンスからインターネットアクセスの確認を行います。
#####再度インターネット接続を確認
プライベートインスタンスにSSH接続し、www.google.co.jp に対して ping で疎通確認をしてみます。
[ec2-user@ip-10-0-2-42 ~]$ ping www.google.co.jp -c 3
PING www.google.co.jp (172.217.161.35) 56(84) bytes of data.
64 bytes from nrt12s23-in-f3.1e100.net (172.217.161.35): icmp_seq=1 ttl=103 time=3.06 ms
64 bytes from nrt12s23-in-f3.1e100.net (172.217.161.35): icmp_seq=2 ttl=103 time=2.86 ms
64 bytes from nrt12s23-in-f3.1e100.net (172.217.161.35): icmp_seq=3 ttl=103 time=2.83 ms
--- www.google.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.836/2.921/3.061/0.108 ms
プライベートインスタンスがインターネットにアクセスできるようになりました。
#####構成図
最終的な構成図は以下の通りとなります。
インスタンスがインターネットにアクセスする際の経路も記載します。
#あとがき
この記事は CloudTech の課題として作成しました。
動画やハンズオン等で学習を進めることができるので、AWS初学者にはおすすめです。