【初心者向け】AWSで、EC2インスタンス(Amazon Linux 2)にSSH接続する【無料枠範囲内】

# 目的
* AWSアカウントを作成し、EC2インスタンス（Amazon Linux 2）を立てて、任意のユーザでSSH接続する

# 環境
* Hardware
    * MacBook Pro (2018 13-inch Four Thunderbolt3 Ports)
    * 2.7GHz QuadCore Intel core i7
    * 8 GB 2133 MHz LPDDR3
* Software
    * macOS Monterey ver12.2

# AWSアカウントを作成する
* まずは、AWSにアカウントを作成しましょう。
    * AWSアカウントは、[AWS新規アカウント作成ページ](https://portal.aws.amazon.com/billing/signup#/start)から作成できます。必要項目を入力したら続行をボタンを押します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/7b05c957-0987-8bed-252b-231e4e25f774.png)
    * 次に氏名や住所などの個人情報を入力します。
    ![スクリーンショット 2022-02-22 8.46.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/3a06d9c3-a78d-4c06-fdaa-1985024288f3.png)
    * 次にクレジットカード情報を入力します。キャプチャにもある通り、AWS無料利用枠の制限内の利用であれば費用は発生しません。
    ![スクリーンショット 2022-02-22 8.48.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/7bd26865-d3d3-a3d5-c6aa-4b8cc6174ff6.png)
    * 次に本人確認をします。私は音声通話だとうまく認証できませんでしたので、テキストメッセージにて認証を行います。
    ![スクリーンショット 2022-02-22 8.49.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/229f4721-3693-197e-4f58-7641fd504242.png)
    * 送られてきた認証コードを入力して、続行ボタンを押します。
    ![スクリーンショット 2022-02-22 8.50.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/84b8cf2e-7eb7-8e31-0ec7-df1aeeeccbe7.png)
    * 次にサポートプランを選択します。ベーシックサポートプランを選択して、サインアップを完了ボタンを押します。
    ![スクリーンショット 2022-02-22 8.50.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/fd2078e3-c088-0865-bd5c-fc3415372da1.png)
    * この画面が出てきたら全ての手続きは完了です。AWSマネジメントコンソールへ進むボタンを押して、AWSマネジメントコンソールへログインしましょう。
    ![スクリーンショット 2022-02-22 8.51.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/a373bb6c-02db-8834-d105-a2fda31b5488.png)
    * ログインすると右上がこのように、リージョン名とアカウント名が表示されていますが、稀にリージョンの選択が最寄りのリージョンになっていない場合がありますので、使用したいリージョンを選択してください。
    ![スクリーンショット 2022-02-22 8.52.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/82b5f3b3-6280-6f44-8c8f-d9609d80c69c.png)

# IAMユーザーを作成する
* アカウント作成直後は、ルートユーザのみが作成された状態ですので、別途実行用のIAMユーザを作成します。以降は追加したIAMユーザでログインして作業を行なっていきます。
    * IAM>ユーザーとページ遷移して、「ユーザーを追加」ボタンを押します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/e099232a-8a70-9a61-089c-90412e28ad32.png)
    * 必要項目を入力します。今回は、両方のアクセス方法にチェックをつけて進めます。
        * AWSへのアクセス方法を選択できるようになっていますが、選択した方法でしかログインできない訳ではありませんのでどちらを選択しても問題ありません。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/f3fe95d9-d919-3ce9-4007-9f3f69ce8c54.png)
    * グループの作成ボタンを押し、「Administrators」グループを作成しましょう。
    * ポリシーは既に用意されている「AdministratorAccess」を選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/3ffa7015-45cb-feeb-5b62-8c3c31745ec2.png)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/228d7a7d-47ec-3370-3d52-5db8c1ea50a0.png)
    * オプションで、ユーザーにタグをつけることができますが、特に必要性がなければ何も入力しなくてOKです。ここでは、仮にこのユーザーが一時的なユーザーである旨を説明しておきます。
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/a429d40d-17f7-9c8f-a42e-9bc6ef42e5d9.png)
    * 最後に設定内容を確認し、問題がなければユーザーの作成ボタンを押します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/ddd50854-9072-e6f2-aded-5e5227cfa056.png)
    * 成功の文字を確認したら、.csvのダウンロードボタンを押して、認証情報をダウンロードしておきます。
        * ダウンロードした認証情報の管理は厳重に！
    * サインインページのURLが記載れていますので、クリックしてログインしてみましょう。
    ![スクリーンショット 2022-02-26 14.53.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/e868bec5-97ac-09b6-6ee0-48057212f464.png)
# IAMユーザーでAWSコンソールにログインする
* 先ほど作成したアカウント情報を入力してログインします。アカウントIDは、AWSアカウントを識別するIDです。
![スクリーンショット 2022-02-26 15.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/49006c00-b517-e722-534e-9ccd7fccc2f5.png)

# EC2インスタンスを作成する
* サービス一覧からEC2と検索して、インスタンスを起動ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/a916adda-1beb-7dee-723c-18af66f186be.png)

## OSを選択する
* 今回は無料枠内での利用になりますので、「Amazon Linux 2 AMI」を選択します。カーネルバージョンで選択肢が分かれていますが、どちらを選択しても問題ありません。私は、5.10を選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/3f14945d-922b-7f85-2b3c-94c32ea2e5f0.png)
## インスタンスタイプを選択する
無料枠内で利用したいので、「t2.micro」を選択して、次のステップ：インスタンスの詳細の設定ボタンを押します。確認と作成ボタンを押してもインスタンスを作成できますが、勉強のために詳細設定を一通り確認しておくと良いでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/2cd48d19-357e-c215-4d2c-9b3eb7268d77.png)
## インスタンスの詳細の設定
インスタンスの数、ネットワーク、インスタンスの基本動作などの詳細設定することができます。今回はデフォルト値のままで問題ありません。
![スクリーンショット 2022-02-26 15.36.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/00fb5574-688b-bc69-33ca-ec2c7aba7fbf.png)

## ストレージの追加
作成するインスタンスのストレージ容量を設定します。今回はデフォルト値のままで問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/3a0aebf8-167a-af95-8b76-aba48208c2c5.png)

## タグの追加
ユーザー作成時と同様にインスタンスにもタグを追加することができます。今回は特に追加する必要はありませんが、私は便宜上、用途を記載しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/8e4c5e0a-103a-0132-1f34-9c06a4f4d9ab.png)

## セキュリティグループの設定
セキュリティ設定を行います。今回はデフォルト値のままで問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/1d3f3c6e-9e98-66cb-a12e-8c64e1e42f8b.png)

## 確認と作成
最後に設定内容を確認し、問題がなければ、右下の起動ボタンを押します。
すると、キーペアが見つからない旨のメッセージが表示されますので、新しいキーペアの作成を選択してSSH接続用のキーペアを生成しておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/0541129e-e2db-7f1b-2240-2ade0d0478c2.png)
キーペアのダウンロードボタンを押すと、[キーペア名].pemというファイルがダウンロードされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/8215729e-eabc-111d-ee46-ccedae68621b.png)
ダウンロードを確認したら、インスタンスの作成ボタンを押します。
## 作成したインスタンスにAWSコンソール上から接続する
作成したインスタンスにチェックを入れ、接続ボタンを押します。
![スクリーンショット 2022-02-26 16.01.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/62536f51-8c14-27be-cac1-954989a67a9b.png)
デフォルトユーザのec2-userを選択してログインできるか確認しましょう。
![スクリーンショット 2022-02-26 16.05.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499675/62a8ee3f-9071-f4f8-607f-2eb6a7ca461c.png)
以下のようにCLIが表示されれば正常にログインできています。
```
       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
```
**注意！**
AWSコンソールから接続した場合、Safariから接続すると、コマンドが正常に入力できない場合がありますので、GoogleChromeを使用することをおすすめします。

# デフォルトのユーザー「ec2-user」でSSH接続する
## ダウンロードした秘密鍵（tmp_rsa.pem）をsshフォルダに配置する
お好きな方法で、/Users/ユーザー名/.sshフォルダに、先ほどダウンロードしたtmp_rsa.pemを配置します。
Downloadsフォルダにダウンロードしている場合は、以下のコマンドでコピーできます。
```:コマンド
$　cp /Users/[ユーザー名]/Downloads/tmp_rsa.pem /Users/[ユーザー名]/.ssh/
```
## 秘密鍵のアクセス権を変更する
秘密鍵は厳重に管理する必要があります。AWSインスタンスへの接続時に、秘密鍵ファイルのアクセス権が緩いと接続できません。
以下のコマンドでアクセス権を変更します。
```:コマンド
$　chmod 400 tmp_rsa.pem
```
# 別のユーザーでSSH接続する
では、ec2-userでSSH接続してみます。
```:コマンド
$　ssh -i "tmp_rsa.pem" ec2-user@[インスタンスのパブリックIPアドレス]または、[インスタンスのパブリックDNS名]
```
作成したインスタンスのパブリックIPアドレス、及び、パブリックDNS名はAWSコンソールのインスタンスの概要から確認できます。
```:結果
The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ED25519 key fingerprint is SHA256:*************************.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```
上記のような結果が得られるので、yesと入力すると、以下の文字が表示され、ログインに成功する。
```:結果
Last login: Sat Feb 26 07:09:22 2022 from *******************************

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

https://aws.amazon.com/amazon-linux-2/
8 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
```
## ログインユーザーを作成する
### rootユーザーに切り替える
```:コマンド
$ sudo -i
```
### 新しいユーザーを作成する
```:コマンド
$ useradd raptony //ユーザーを作成
$ passwd raptony //パスワードを設定
ユーザー raptony のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
```
### ユーザー権限を設定する
sudoコマンドが実行できるwheelグループに所属させて、権限を与えます。
```:コマンド
$ usermod -G wheel raptony
```
## ec2-userの公開鍵をコピーする
```:コマンド
$ mkdir /home/raptony/.ssh 
$ chmod 700 /home/raptony/.ssh

//公開鍵を新規ユーザーのディレクトリにコピーする
$ cp /home/ec2-user/.ssh/authorized_keys /home/raptony/.ssh　

//所有者を変更する
$ chown -R raptony:raptony /home/raptony/.ssh　
```
## SSH接続できることを確認する
logoutコマンドでssh接続を切断して、再度追加したユーザーでssh接続できるか確認しましょう。
```:コマンド
$ ssh -i "tmp_rsa.pem" raptony@xxx.xxx.xxx.xxx
```
```:結果
Last login: Sat Feb 26 13:11:15 2022

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

https://aws.amazon.com/amazon-linux-2/
```
## ec2-userから接続できないようにする
新規ユーザでログインできたので不要なデフォルトユーザーを削除して接続されないようにしておきます。
### ec2-userを削除する
```:コマンド
$ userdel -r ec2-user
```
# 注意と免責
 * **注意** 不要なインスタンスを削除してください。削除しなかった場合、約一年後に見知らぬ請求が発生する可能性があります。
 * **補足** AWS無料枠を、無料のまま利用するには、いくつかの条件を守る必要があります。
    * EC2はインスタンスの稼働時間によって課金されます。720時間/月の無料枠が1年間ついていますが、これはインスタンスが稼働している合計時間となります。例えば、インスタンスを2つ稼働させた場合、無料枠は360時間/月となる点にご留意ください。