【初心者向け】EC2を立ててSSH接続してみよう

概要

本記事では、AWS (Amazon Web Services) における EC2 の立て方と、SSH接続してみるところまで解説します。

AWS はいろいろなサービスがありますが、EC2はその代表的なサービスの一つです。EC2の作成からSSH接続するまでには、いくつか初心者が躓くポイントがあるので、その点についても解説します。

AWSの各サービスは基本的に従量課金制です。本記事の内容を実際に行った場合、使用料金が発生する場合があるため注意してください。

前提

  • AWSアカウントを持っている
  • ターミナルアプリ (Mac: ターミナル, Windows: TeraTermなど)をインストールしている

EC2とはなにか

EC2は、正確にはAmazon Elastic Compute Cloud (Amazon EC2)という仮想サーバーをクラウド上で提供するAWSのサービスです。これを使うことによって、AWS上に仮想サーバ(EC2インスタンス)を立てることができます。

メリットとして、物理的なサーバを持つ必要がなく、インターネットにアクセスできる環境さえあれば、Web上から該当のEC2インスタンスのスペックをある程度自由に設定することが可能です。また、場合によってはオートスケールといった機能を使うことにより、負荷状況によってEC2インスタンスのコピーを作って処理を分散させたりもできます。

EC2についてもっと詳しく知りたい方は、以下のAWS公式のドキュメントを読むことをおすすめします。

Amazon EC2 とは - Amazon Elastic Compute Cloud

EC2を立ててみよう

まず、自身のAWSアカウントにログインします。

ログインしたあと、右上に現在のリージョンが出てきていると思います。特別な理由がない場合は「アジアパシフィック (東京)」としておきましょう。

以降でやることは、次の2つです。

  • VPC (Virtual Private Cloud)の作成
  • EC2 (Elastic Compute Cloud)の作成

これらについてですが、VPCは土地EC2はその土地の上に立つ家とイメージしてもらうとわかりやすいと思います。

まず、土地にあたるVPCの作成に入りたいと思います。

VPCの作成

上部の検索窓に「VPC」と入力し検索します。そうすると、以下のような画面が出てくるかと思います。

ここで、上部にある [VPC を作成] をクリックします。そうすると、VPC作成において必要な設定を入力する画面が出てきます。

はじめに「VPCのみ」と「VPCなど」のどちらかを選ぶ必要がありますが、デフォルトで選択されている「VPCなど」のままにしておきましょう。

「VPCのみ」を選択すると、サブネット、ルートテーブル、インターネットゲートウェイ等を自分で作成する必要があります。手動で作成するほうが勉強になりますが、本記事ではEC2を立てるというのが目標のため、ここでは省略します。

ここで、自身で入力・選択する必要がある項目を以下に記します。

  • 名前タグの自動生成
    • 自動で作成されるリソースの最初につける文字列の指定です。ここでは「ec2-test」としています
  • IPv4 CIDR ブロック
    • VPC内のプライベートIPアドレスの範囲を指定します。
  • アベイラビリティゾーン (AZ) の数
    • 作成するサブネットを配置するアベイラビリティゾーンの数です。今回はあまり関係ないですが、災害が起こることを想定して2つにしておいたほうが無難です。
  • パブリックサブネットの数、プライベートサブネットの数
    • 名前の通り、外部に公開するサブネットと非公開のサブネットの数です。デフォルトのままでOKです
  • NAT ゲートウェイの数
    • 配置するNATゲートウェイの数を指定します。NATゲートウェイは、グローバルIPを持たせたくないけどインターネットに接続させたいサーバがある場合は、VPC内に配置する必要があります。今回は「なし」でOKです。
  • VPCエンドポイント
    • VPC内からS3に接続できるようになります。今回は必要ないので「なし」にしてます。

以上が設定できたら、下部にある[VPC を作成]をクリックします。

エラー等が発生しなければ、左ペインの「お使いのVPC」をクリックすると以下のように作成したVPCが表示されます。

以上で、EC2を設置するための土地が手に入りました。次に、その土地の上に立つ家(EC2)を立てていきましょう。

EC2の作成

上部検索窓に「EC2」と入力し検索します。すると、以下のEC2のサービス画面に遷移します。

右上にある[インスタンスを起動]をクリックします。EC2の作成に必要なパラメータを入力する画面に移るので、以下の必要事項を記入します。

  • 名前
    • 作成するインスタンスの名前です。今回は「ec2-test」にしています。
  • アプリケーション及び OS イメージ (Amazon マシンイメージ)
    • 作成するインスタンスのOSです。今回は標準的なAmazon Linuxを選択しています。
  • インスタンスタイプ
    • インスタンスの性能を決める部分です。CPUやメモリの数によってタイプが変わりますが、今回はテスト用なので無料利用枠が適用される「t3.micro」を選択しています。
  • キーペア
    • SSH接続に必要なキーペア(公開鍵と秘密鍵)を作成します。キーペア名を入力し、タイプについてはデフォルトのRSA、プライベートキーファイル形式についても、今回はOpenSSHでSSH接続するので.pemでOKです。
    • [キーペアを作成]をクリックすると、手元のPCにSSH接続に必要な秘密鍵がダウンロードされます。次の章で必要になるので、削除しないようにしてください。

次にネットワーク設定ですが、ここは少し複雑なので詳しめに説明します。

  • VPC
    • 事前に作成したVPCを選択
  • サブネット
    • 作成した4つのサブネットの内、パブリックサブネットを選択。

プライベートサブネットは、外部からのアクセスを許可していないため、SSH接続などを許可するためにはパブリックサブネットにEC2を配置する必要があります。

  • パブリック IP の自動割り当て
    • 有効化にしておきます(これをしないと外部からアクセスするために必要なパブリックIPが付与されないため)
  • ファイアウォール(セキュリティグループ)
    • 「セキュリティグループを作成」にチェックを入れ、セキュリティグループ名、説明、インバウンドセキュリティグループのルールを設定します。

セキュリティグループの設定は非常に大事です。今回はSSH接続するためだけのEC2を作るので、インバウンドルールとしては自分が使っているグローバルIPアドレスからのSSH接続のみ許可します。
ちなみに「インバウンドルール」とは、EC2から見て外部から自身への通信としてどういうものを許可するかという設定です。SSH接続以外にも、WebサーバであればHTTP、HTTPS通信を許可する必要がありますし、DB(MySQL)サーバであれば外部からの3306番ポートを用いた通信を許可する必要があります。

以上の設定が終われば、画面右にある[インスタンスを起動]をクリックします。

問題なければ以下の画面が表示されます

以上でEC2を立てることができたので、次は実際に手元のPCからSSH接続してみましょう。

手元のPCからSSH接続してみよう

キーペアを作成でダウンロードされた秘密鍵を使います。手元のターミナルアプリで、秘密鍵が必要なディレクトリまで移動し、以下のコマンドを実行してください。

Bash
ssh -i ec2-test.pem ec2-user@xxx.xxx.xxx.xxx

以下補足です。

  • sshコマンドの -i オプションで秘密鍵を指定しています。
  • xxx.xxx.xxx.xxxは作成したEC2のパブリックIPです。
  • ec2-user は、Amazon Linuxの初期ユーザです。

さて、これを実行すると以下のような出力を得ます。

Bash
$ ssh -i ec2-test.pem ec2-user@xxx.xxx.xxx.xxx
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
ED25519 key fingerprint is SHA256:8yN4FMudISTMjhhfUGwuduUtuGXEeoOEsu2nl5Bne9U.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'xxx.xxx.xxx.xxx' (ED25519) 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@54.178.181.214: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

何やらエラーが出てきました。ここで大事なのは以下のメッセージです。

Permissions 0644 for ‘ec2-test.pem’ are too open.
It is required that your private key files are NOT accessible by others.

これは日本語訳すると以下になります。

‘ec2-test.pem’ のパーミッション 0644 は開放しすぎです。
秘密鍵ファイルは他者からアクセスできないようにする必要があります。

実際、秘密鍵ファイルのパーミッションを見てみると以下になってます。

Bash
-rw-r--r--@ 1 user  staff  1678  9  4 22:05 ec2-test.pem

自身が所属するstaffグループと、staffグループ以外についても読み取り権限が入っているため、エラーが出ているようですね。

そのため、秘密鍵ファイルについては、自分以外に読み取り権限を付与させない 600 等のパーミッションにする必要があります。
今回は、以下のコマンドでパーミッションを設定し直しました。

Bash
$ chmod 600 ec2-test.pem
$ ls -l ec2-test.pem
-rw-------@ 1 user  staff  1678  9  4 22:05 ec2-test.pem

もう一度sshコマンドを実行すると、今度はちゃんとEC2に接続できました。

Bash
$ ssh -i ec2-test.pem ec2-user@xxx.xxx.xxx.xxx
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-10-0-0-13 ~]$

以上で、SSH接続まで完了しました。お疲れ様でした。

今回作ったEC2やVPCについては、今後使う予定がなければ料金が発生するかもしれないので削除しておきましょう。

まとめ

今回はAWSを学び始めた人が最初にやるであろうEC2を立ててからSSH接続するまでを解説しました。AWSにはEC2やVPC以外にも様々なサービスがあり、それらを組み合わせることで複雑なシステムを構築することができます。各サービスの特徴を理解するには、実際に使ってみることが一番なので、今後もこういう記事は書いていこうと考えています。

それではここまで読んでいただきありがとうございました!

ABOUT US
ルート数学博士 × インフラエンジニア
インフラエンジニアとして日々邁進中。業務で得た知識やIT初級者に役立つ記事、はたまたIT技術の裏に潜む数学理論を解説します。