EC2 インスタンスの構築自体は簡単ですが、構築した後の各種設定(セキュリティや時刻など)について詳しく解説します。
EC2 インスタンスの作成手順
AWS 管理画面にログインし、メニューより「サービス」-「コンピューティング」-「EC2」をクリックします。
「インスタンスの作成」ボタンをクリックします。
今回は Red Hat Enterprise Linux を選択します。「選択」ボタンをクリックします。
「手順2:インスタンスタイプの選択」で「無料利用枠の対象」の「t2.micro」を選択します。
「手順3:インスタンスの詳細の設定」画面で下図のように設定します。
サブネットの CIDR ブロックは「172.31.32.0/20」なので IP アドレスは「172.31.32.10」に設定します。
設定が完了したら「次の手順:ストレージの追加」ボタンをクリックします。
「手順4:ストレージの追加」でディスクの「サイズ(GiB)」と「ボリュームタイプ」を設定して「次の手順:タグの追加」ボタンをクリックします。
「手順5:タグの追加」で下図のようにタグを追加します。
「次の手順:セキュリティグループの設定」ボタンをクリックします。
「手順6:セキュリティグループの設定」で SSH のみポートを開けて「確認と作成」ボタンをクリックします。
「手順7:インスタンス作成の確認」画面で設定内容を確認し「起動」ボタンをクリックします。
新しいキーペアを作成する場合は「新しいキーペアの作成」を選択し、キーペア名を設定し「キーペアのダウンロード」ボタンをクリックます。
下図のようなキーペアがダウンロードされることを確認します。
※キーペアの内容は、下図で BEGIN RSA PRIVATE KEY の記述からもわかりますように秘密鍵(RSA 秘密鍵)です。
「インスタンスの作成」ボタンをクリックします。
下図のように「インスタンスは現在作成中です」の状態になっていることを確認します。
左側ペインより「EC2ダッシュボード」-「インスタンス」をクリックして、作成したインスタンスが下図のように「running」の状態になっていることを確認します。
EC2 インスタンスへのログイン(Tera Term)
一番最初のログインは「ec2-user」アカウントでログインします。
以下、Tera Term を使用してのログイン方法です。
Tera Term を起動し、ホストに「IPv4 パブリック IP」もしくは「パブリック DNS (IPv4)」を入力します。
サービスは「SSH」を選択し「OK」ボタンをクリックします。
下図の「SSH 認証」画面で以下のように入力します。
- ユーザ名 ← ec2-user を入力します。
- パスフレーズ ← 空欄にします。(ec2-user にはパスフレーズはありません)
- RSA/DSA/ECDSA/ED25519 鍵を使う ← チェックを入れます。
「秘密鍵」ボタンをクリックします。
先ほどダウンロードしたキーペア(RSA 秘密鍵、今回の場合は test-ec2instance-key.pem ファイル)を選択して「開く」ボタンをクリックします。
秘密鍵を選択したら「OK」ボタンをクリックします。
以下のようにログインできることを確認します。
新アカウントを作成し権限を割り当てる
ec2-user アカウントはデフォルトのアカウントですが、セキュリティを考慮し ec2-user アカウントを削除し、作業用のアカウントを作成します。
以下のように設計します。
- アカウント名 ← test
- test アカウントのパスワード ← test1234
- 権限 ← sudo コマンドで root にスイッチできる(/etc/sudoers の設定をする)
- SSH ログインでの認証方式 ← 鍵認証
test アカウントを作成する
test アカウントを作成します。
[ec2-user@ip-172-31-32-10 ~]$ sudo su – |
test アカウントのパスワードを設定します。
[root@ip-172-31-32-10 ~]# passwd test |
sudo コマンドで root にスイッチできるよう権限設定をする(/etc/sudoers を編集する)
次に test アカウントが sudo コマンドで root にスイッチできるよう権限設定をします。
具体的には visudo コマンドで /etc/sudoers ファイルを編集します。
「test ALL=(ALL) NOPASSWD: ALL」を追加することでパスワードなしで root にスイッチできるようになります。
[root@ip-172-31-32-10 ~]# visudo
## Same thing without a password |
root にスイッチできるか確認します。
[root@ip-172-31-32-10 ~]# su – test ← 一旦 test にスイッチします。 |
SSH ログインするための鍵認証(公開鍵認証)の設定をする
次に test アカウントがリモートより鍵認証(公開鍵認証)で SSH ログインできるように設定します。
EC2 インスタンス上より以下のコマンドで鍵を作成します。
※本来ならローカルの Windows でカギを作成して、公開鍵を EC2 インスタンスにアップロードしたいところですが、今回は リモートで鍵を作成して、ローカルに秘密鍵を持ってきて、リモート上の秘密鍵を削除する方式にします。
[root@ip-172-31-32-10 ~]# su – test ← test アカウントにスイッチします。 [test@ip-172-31-32-10 ~]$ ssh-keygen -t rsa ← ssh-keygen コマンドを実行します。 |
鍵を確認します。
[test@ip-172-31-32-10 ~]$ cd .ssh/ |
秘密鍵(id_rsa)をローカルに持ってきます。
Tera Term よりダウンロードするか、EC2 インスタンス上で秘密鍵(id_rsa)を cat コマンドで開いてコピペします。
今回はリモートの EC2 インスタンス上で秘密鍵(id_rsa)を cat コマンドで開いて、それをコピペする方法にします。
[test@ip-172-31-32-10 .ssh]$ cat id_rsa |
公開鍵を「authorized_keys」ファイルに追加します。
[test@ip-172-31-32-10 .ssh]$ cat id_rsa.pub >> authorized_keys |
「authorized_keys」ファイルの権限を「600」に変更します。
[test@ip-172-31-32-10 .ssh]$ ls -lh |
秘密鍵を削除します。
[test@ip-172-31-32-10 .ssh]$ rm id_rsa |
Tera Term で test アカウントで鍵認証で SSH ログインできるか確認する
ここまで作業したら Tera Term で test アカウントで鍵認証でリモートの EC2 インスタンスに SSH ログインできるか確認します。
Tera Term を起動してホストにパブリック IP アドレスを入力し「OK」ボタンをクリックします。
下図のように各項目を入力します。
- ユーザ名 ← test アカウントを入力します。
- パスフレーズ ← ssh-keygen コマンドで鍵を作成する際に設定したパスフレーズを入力します。
- 秘密鍵 ← ローカルにコピーした秘密鍵のファイルを指定します。
設定を入力したら「OK」ボタンをクリックします。
下図のように test アカウントで鍵認証による SSH ログインができることを確認します。
root にスイッチできることを確認します。
[test@ip-172-31-32-10 ~]$ sudo su – |
ec2-user アカウントの削除
ここまで動作確認が出来たらセキュリティ上の理由により「ec2-user」アカウントを削除します。
userdel コマンドで「ec2-user」アカウントを削除します。
[root@ip-172-31-32-10 ~]# cat /etc/passwd | grep ec2-user |
タイムゾーン(Timezone)の修正
デフォルトでは、EC2 インスタンスのタイムゾーン(Timezone)は「UTC」になっています。
[root@ip-172-31-32-10 ~]# date |
timedatectl コマンドで、「UTC」を「JST」に変更します。
※Red Hat 7系(CentOS 7系)の場合は timedatectl コマンドを利用できるので便利です。
[root@ip-172-31-32-10 ~]# timedatectl set-timezone Asia/Tokyo |
タイムゾーンが変更されたことを確認します。
[root@ip-172-31-32-10 ~]# date |
OS が再起動しても UTC に戻らないことを確認します。
[root@ip-172-31-32-10 ~]# reboot |
OS 再起動後に再度タイムゾーンを確認します。
[test@ip-172-31-32-10 ~]$ date |
ロケールの設定
EC2 インスタンスはデフォルトでは以下のロケール「en_US.UTF-8」になっています。
[root@ip-172-31-32-10 ~]# cat /etc/locale.conf |
locale コマンドでも確認できます。
[root@ip-172-31-32-10 ~]# locale |
ロケールがデフォルトの「en_US」のため、コマンド結果も英語で返ってきます。
[root@ip-172-31-32-10 ~]# c |
特に「en_US」でも問題ないですが、日本語ロケールに変更する場合は「ja_JP.utf8」を設定します。
[root@ip-172-31-32-10 ~]# vi /etc/locale.conf
#LANG=en_US.UTF-8 ← コメントアウトします。 |
OS が再起動しても日本語ロケールであることを確認します。
※わざわざ毎回 reboot しなくてもいいですが、EC2 インスタンスの場合は OS 再起動が数秒レベルで完了するので、OS 再起動確認までした方がいいです。
[root@ip-172-31-32-10 ~]# reboot |
ロケールが日本語に変わっています。
[test@ip-172-31-32-10 ~]$ locale |
コマンド結果も日本語で返ってきます。
[test@ip-172-31-32-10 ~]$ a |
/etc/sudoers の設定(Defaults requiretty)
通常(デフォルトでは)、セキュリティの観点より sudo コマンドを利用する場合は、tty(コンソール、端末)が必要な設定をしています。
しかし、以下のケースで設定が必要になります。
- cron で定期的に sudo コマンドで処理をする場合
- リモートから ssh コマンドでログインして、そのままコマンドを実行する場合(例:ssh host ls -l など)
- Ansible や Serverspec などでリモート処理をする場合
Defaults requiretty の設定例
■全部のユーザーに対して許可する場合
#Defaults requiretty ← この 1 行をコメントアウトします。 |
■特定のユーザーに対して許可する場合
Defaults:root !requiretty ← この 1 行をコメントアウトします。 |
SELINUX
他に必要なら SELINUX の設定をします。
コメント
コメント一覧 (1件)
[…] 100%レンタルサーバーを使いこなすサイト【AWS】EC2インスタンス構築及び構築後の各種設定手順https://go-journey.club/archives/11588EC2 インスタンスの構築自体は簡単ですが、構築した後の各 […]