AWS EC2インスタンスを作成してSSH接続するまでの手順

AWS の仮想サーバ(Amazon EC2 インスタンス)を作り、手元の PC から SSH で接続するまでの手順を確かめます。VPC、サブネット、ルートテーブル、インターネットゲートウェイは前の記事で作ったものを使い、パブリックサブネットに Amazon Linux 2 のインスタンスを1台作ります。

この記事でわかること
  1. EC2 インスタンスをパブリックサブネットに作る手順(AMI、インスタンスタイプ、ネットワーク、セキュリティグループ)
  2. キーペア(秘密鍵と公開鍵)と、SSH で接続するまでの流れ
  3. パブリック IP の割り当てと、インスタンスの状態の見方
  4. インスタンスからインターネットへの疎通確認

前提条件

インスタンスを置くネットワークは、次の記事で作っておきます。インスタンスを置く public-subnet-1a(10.0.1.0/24)のルートテーブルでは、0.0.0.0/0 がインターネットゲートウェイに向いています。

この記事の構成です。インスタンスには Amazon Linux 2 を使い、作業 PC(Mac)から SSH で接続したあと、インスタンスからインターネットに ping を打ちます。

VPC 10.0.0.0/16(MyVPC)public-subnet-1a 10.0.1.0/24(ap-northeast-1a)ルートテーブル送信先ターゲット10.0.0.0/16local0.0.0.0/0internet-gwSSH(TCP 22)ping 8.8.8.8作業 PC(Mac)InternetインターネットゲートウェイEC2-public(Amazon Linux 2)プライベート IP:10.0.1.100パブリック IP:自動割り当てセキュリティグループ:SSH を許可
図1 この記事の構成
現在の状況

検証時(2021年8月)のコンソールでは、インスタンスの作成が「ステップ 1」から「ステップ 7」までの画面に分かれていました。今のコンソールでは、名前とタグ、AMI、インスタンスタイプ、キーペア、ネットワーク設定、ストレージを1つの画面で設定します。設定する項目の意味は同じなので、この記事では検証時の画面の順に説明します。

また、Amazon Linux 2 は 2026年6月30日でサポートが終わっています。これから作る場合は Amazon Linux 2023 を選んでください。Amazon Linux 2023 でも、SSH で接続するユーザー名は ec2-user です。

EC2 インスタンスの作成

コンソール上部の検索欄に EC2 と入れて EC2 の画面を開き、EC2 ›› インスタンス ›› インスタンスを起動 をクリックします。

AMI(Amazon マシンイメージ)を選ぶ

AMI は、インスタンスの起動に使う OS などのイメージです。ここでは、無料利用枠の対象になっていた Amazon Linux 2 を選びます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。AWS のコンソールは画面の構成や表記がよく変わるので、今の画面とは違います。AMI、インスタンス、サブネットなどの ID は省いています。

EC2 コンソール(ステップ 1: Amazon マシンイメージ)画面イメージ
1Amazon Linux 2 AMI (HVM), SSD Volume Type無料利用枠の対象
ルートデバイスタイプ: ebs 仮想化タイプ: hvm ENA 有効: はい
2アーキテクチャ◉ 64 ビット (x86)○ 64 ビット (Arm)
3選択
図2 AMI の選択(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1AMIAmazon Linux 2 AMI (HVM), SSD Volume Type を使います。
2アーキテクチャ64 ビット (x86) を選びます。Arm を選ぶと、次の画面で Arm(Graviton)用のインスタンスタイプを選ぶことになります。
3選択クリックすると、インスタンスタイプの画面に進みます。

インスタンスタイプを選ぶ

インスタンスタイプは、vCPU やメモリなどのサーバの性能を決めるものです。ここでは、無料利用枠の対象だった t2.micro(vCPU 1、メモリ 1 GiB)を選び、「次のステップ: インスタンスの詳細の設定」をクリックします。

EC2 コンソール(ステップ 2: インスタンスタイプの選択)画面イメージ
ファミリータイプvCPUメモリ
(GiB)
インスタンス
ストレージ (GB)
ネットワーク
パフォーマンス
☐t2t2.nano10.5EBS のみ低から中
1☑t2t2.micro
無料利用枠の対象
11EBS のみ低から中
図3 インスタンスタイプの選択(実際の画面ではなく、設定項目のポイントを示したイメージです)

インスタンスタイプは、インスタンスを停止すればあとから変えられます。検証では小さいタイプで始め、足りなければ変えれば十分です。

無料利用枠の現在の状況

AWS の無料利用枠の仕組みは検証時から変わっています。今の無料プランはクレジット制で、EC2 で対象になるインスタンスタイプは t3.micro、t3.small、t4g.micro、t4g.small、c7i-flex.large、m7i-flex.large です。作成時の画面で、対象のタイプを確かめてください。

ネットワークを設定する

インスタンスの詳細の設定では、インスタンスを置く VPC とサブネットを決めます。インターネットから SSH で接続するので、インターネットゲートウェイへのルートがあるパブリックサブネットに置き、パブリック IP アドレスを自動で割り当てます。

EC2 コンソール(ステップ 3: インスタンスの詳細の設定)画面イメージ
1ネットワークMyVPC
2サブネットpublic-subnet-1a | ap-northeast-1a
251 個の IP アドレスが利用可能
3自動割り当てパブリック IP有効
⋮ (中略)
ネットワークインターフェイス
4eth0 のプライマリ IP新しいネットワークインターフェイス 10.0.1.100
図4 インスタンスの詳細の設定(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1ネットワークインスタンスを置く VPC です。前の記事で作った MyVPC を選びます。
2サブネットインターネットゲートウェイへのルートがあるパブリックサブネット public-subnet-1a を選びます。/24 のサブネットなので、使える IP アドレスは 251 個と表示されます。
3自動割り当てパブリック IP有効 にすると、インスタンスにパブリック IPv4 アドレスが割り当てられ、インターネットから届くようになります。
4プライマリ IPサブネット 10.0.1.0/24 の中から、プライベート IP アドレスを 10.0.1.100 に固定します。空欄なら自動で割り当てられます。

インスタンス自身が知っているのはプライベート IP アドレス(10.0.1.100)だけです。インターネットとやり取りするときは、インターネットゲートウェイがプライベート IP とパブリック IP を1対1で変換します。

VPCEC210.0.1.100Internet送信元 10.0.1.100送信元パブリック IP1対1 の NATインスタンスを停止して起動すると、自動割り当てのパブリック IP は変わる同じアドレスを使い続けたいときは Elastic IP アドレスを割り当てる
図5 プライベート IP とパブリック IP
パブリック IPv4 アドレスの料金

今の AWS では、実行中のインスタンスに割り当てたパブリック IPv4 アドレスも、Elastic IP アドレスも、料金がかかります。検証が終わったらインスタンスを停止するか終了し、使わない Elastic IP アドレスは解放してください。

ストレージを確かめる

ストレージは、デフォルトのまま進めます。検証時のデフォルトは、ルートボリューム(/dev/xvda)が汎用 SSD(gp2)の 8 GiB で、「終了時に削除」にチェックが入っていました。終了時に削除が有効なので、インスタンスを終了するとこのボリュームも削除されます。確認したら「次のステップ: タグの追加」をクリックします。

タグで名前を付ける

タグを追加し、キー Name、値 EC2-public を入れます。キー Name の値は、インスタンス一覧の Name 列に表示されるので、複数のインスタンスを見分けやすくなります。

セキュリティグループを設定する

セキュリティグループは、インスタンスに出入りする通信を許可するルールです。ここでは「新しいセキュリティグループを作成する」を選び、名前を EC2-public にします。インバウンドルールには、SSH(TCP 22)を許可するルールが最初から入っています。

EC2 コンソール(ステップ 6: セキュリティグループの設定)画面イメージ
1セキュリティグループの割り当て◉ 新しいセキュリティグループを作成する
○ 既存のセキュリティグループを選択する
セキュリティグループ名EC2-public
説明launch-wizard-1 created 2021-08-18T18:02:53.036+09:00
タイププロトコルポート範囲ソース
2SSHTCP22カスタム 0.0.0.0/0
図6 セキュリティグループの設定(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1セキュリティグループの割り当て新しく作り、名前を EC2-public にします。
2インバウンドルールタイプ SSH(TCP 22)のルールです。ソースが 0.0.0.0/0 なので、どこからでも SSH で接続できます。
SSH のソースは絞る

ソースが 0.0.0.0/0 のままだと、インターネットのどこからでも SSH のポートに接続を試みられます。検証でも、ソースは作業 PC のグローバル IP アドレス(「マイ IP」)などに絞るのが安全です。

先にセキュリティグループを作っておいた場合は、「既存のセキュリティグループを選択する」を選び、一覧から選びます。検証時の一覧には、次の記事で作った WebSV-SG のほか、default(default VPC security group)などがありました。

設定したら「確認と作成」をクリックし、確認画面で内容を確かめて「起動」をクリックします。

キーペアを作ってインスタンスを作成する

起動をクリックすると、SSH の接続に使うキーペアを選ぶ画面が出ます。キーペアは秘密鍵と公開鍵の組で、公開鍵はインスタンスの ec2-user に登録され、秘密鍵は手元に保存します。SSH で接続するときに秘密鍵を使うので、パスワードなしでログインできます。

作業 PChirotano-key.pem秘密鍵(chmod 400)EC2公開鍵ec2-user の設定に登録ssh -i “hirotano-key.pem” ec2-user@パブリック IP秘密鍵と公開鍵が組になっていれば、パスワードなしでログインできる
図7 キーペアと SSH の接続
EC2 コンソール(キーペアの選択)画面イメージ
1キーペア新しいキーペアの作成
Key pair type◉ RSA○ ED25519
2キーペア名hirotano-key
3キーペアのダウンロードキャンセル4インスタンスの作成
図8 キーペアの作成(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1キーペア「新しいキーペアの作成」を選びます。既存のキーペアを使うこともできます。
2キーペア名任意の名前です。この記事では hirotano-key にします。
3キーペアのダウンロード秘密鍵(hirotano-key.pem)をダウンロードし、安全な場所に保管します。秘密鍵をダウンロードできるのはこのときだけです。
4インスタンスの作成ダウンロードが終わったらクリックします。「インスタンスは現在作成中です」と表示されます。

インスタンスの状態を確かめる

「インスタンスの表示」をクリックすると、インスタンス一覧で状態を確かめられます。作成した直後は、インスタンスの状態は「実行中」でも、ステータスチェックは「初期化しています」です。しばらく待つと「2/2 のチェックに合格しました」になります。

EC2 コンソール(インスタンス)画面イメージ
Nameインスタンスの状態インスタンスタイプステータスチェック
作成直後EC2-public 実行中t2.micro1 初期化しています
しばらく後EC2-public 実行中t2.micro2 2/2 のチェックに合格しました
図9 インスタンスの状態とステータスチェック(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1初期化しています(灰色)起動したばかりで、ステータスチェックがまだ終わっていません。
22/2 のチェックに合格しました(緑)システムステータスチェック(AWS 側の基盤)とインスタンスステータスチェック(OS やネットワークの設定)の両方に合格しています。

今のコンソールでは、Nitro ベースのインスタンスに、アタッチした EBS ボリュームのステータスチェックも加わります。そのため、チェックの数が検証時と違って表示されることがあります。

インスタンスを選び、「ネットワーキング」タブを開くと、自動で割り当てられたパブリック IPv4 アドレスと、指定したプライベート IPv4 アドレス(10.0.1.100)を確かめられます。

EC2 コンソール(インスタンス: EC2-public)画面イメージ
詳細 セキュリティ ネットワーキング ストレージ ステータスチェック
1パブリック IPv4 アドレス(伏せています)| オープンアドレス
2プライベート IPv4 アドレス10.0.1.100
図10 インスタンスの IP アドレス(実際の画面ではなく、表示のポイントを示したイメージです)
No.表示意味
1パブリック IPv4 アドレスSSH の接続先になるアドレスです。自動割り当てなので、インスタンスを停止して起動すると変わります。
2プライベート IPv4 アドレスSTEP 3 で指定した 10.0.1.100 です。

インスタンスを選んで「接続」をクリックし、「SSH クライアント」タブを開くと、接続の手順が表示されます。秘密鍵のパーミッションを chmod 400 hirotano-key.pem で絞ることと、ユーザー名 ec2-user で接続することが書かれています。同じ画面には、ブラウザから接続できる「EC2 Instance Connect」や「セッションマネージャー」のタブもあります。

仮想インスタンスへアクセス

SSH で接続する

Mac のターミナルで、秘密鍵を保存したデスクトップに移動し、秘密鍵のパーミッションを 400(自分だけが読める)にしてから、ssh -i で秘密鍵を指定して接続します。パーミッションが広いままだと、SSH が秘密鍵を使わず、接続できません。

作業 PC(Mac のターミナル)

mac:~ hirotano$ cd Desktop/
mac:Desktop hirotano$ chmod 400 hirotano-key.pem
mac:Desktop hirotano$ ssh -i "hirotano-key.pem" ec2-user@xx.xxx.xxx.xx
The authenticity of host 'xx.xxx.xxx.xx (xx.xxx.xxx.xx)' can't be established.
ECDSA key fingerprint is SHA256:jLIi62VYQ+eN9ZXqbTg+sA36dJFHi4kKz9+TwSF6uqg.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xx.xxx.xxx.xx' (ECDSA) to the list of known hosts.


       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|


4 package(s) needed for security, out of 16 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-100 ~]$
表示意味
chmod 400 hirotano-key.pem秘密鍵を、所有者だけが読める状態にします。
ssh -i “hirotano-key.pem” ec2-user@…秘密鍵を指定し、ユーザー ec2-user でパブリック IP アドレスに接続します。
Are you sure you want to continue connecting (yes/no)?初めて接続するホストなので、ホスト鍵の確認を求められています。yes と入れると、ホスト鍵が known_hosts に登録されます。
[ec2-user@ip-10-0-1-100 ~]$ログインできました。ホスト名はプライベート IP(10.0.1.100)から付いています。

表示された ECDSA のフィンガープリントは、本来はインスタンスのものと同じかを確かめてから yes と答えます。インスタンスのフィンガープリントは、インスタンスのシステムログ(コンソール出力)で確かめられます。違っていた場合は、途中で別のホストに接続させられている(中間者攻撃)おそれがあります。

インターネットへの疎通を確かめる

インスタンスを置いたサブネットのルートテーブルでは 0.0.0.0/0 がインターネットゲートウェイに向いているので、インスタンスからインターネットにも出られます。Google の DNS サーバ(8.8.8.8)に ping を打って確かめます。

EC2(Amazon Linux 2)

[ec2-user@ip-10-0-1-100 ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=104 time=2.56 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=104 time=2.60 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=104 time=2.56 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.565/2.577/2.602/0.044 ms

3回送って3回とも応答が返り(0% packet loss)、インスタンスからインターネットに出られることが確かめられました。応答が返るのは、セキュリティグループが通信の状態を覚えていて(ステートフル)、送った ping への応答を通すためです。

うまくいかないとき

状態よくある原因確認すること
ssh が応答せずタイムアウトするセキュリティグループで TCP 22 を許可していない、ソースに作業 PC のアドレスが入っていない、パブリック IP がない、サブネットにインターネットゲートウェイへのルートがないインバウンドルール、インスタンスのパブリック IPv4 アドレス、サブネットのルートテーブル
UNPROTECTED PRIVATE KEY FILE と表示される秘密鍵のパーミッションが広いchmod 400 を実行したか
Permission denied (publickey) と表示されるユーザー名や秘密鍵が違うユーザー名 ec2-user、インスタンスに設定したキーペア
昨日つながったのに今日はつながらない停止と起動でパブリック IP が変わったネットワーキングタブのパブリック IPv4 アドレス

まとめ

項目この記事の設定ポイント
AMIAmazon Linux 2(64 ビット x86)今は Amazon Linux 2023 を選ぶ
インスタンスタイプt2.micro停止すればあとから変えられる
ネットワークMyVPC、public-subnet-1a、プライベート IP 10.0.1.100、パブリック IP 自動割り当てインターネットゲートウェイへのルートがあるサブネットに置く
タグName = EC2-public一覧の Name 列に表示される
セキュリティグループEC2-public(SSH を許可)ソースは作業 PC のアドレスに絞る
キーペアhirotano-key秘密鍵は作成時にだけダウンロードできる

EC2 インスタンスは、置くサブネット、パブリック IP、セキュリティグループ、キーペアの4つがそろって、はじめて SSH で接続できます。つながらないときは、この4つを順に確かめます。

コメント