AWS EC2 AmazonLinux2 の初期設定はこれぐらいやっとけばいいかな　2019年10月版

# きっかけ
久しぶりにEC2インスタンスを構築する役が回ってきて、複数台のインスタンスを構築しました。

各インスタンスで動いてるシステムはバラバラなので、一旦基本的な設定やミドルウェアインストールをしたインスタンスを作ってAMI化し、それを使って各システム独自のミドルウェアなりを個別構築するという段取りにしました。

今回はその基本的な設定やミドルウェアインストールが以前と大分変わっていたので、そのまとめです。
尚、今回は表題に記載の通り、AmazonLinux2を使います。

## パッケージアップデート
まずは、これですね。ついでに、よく使うことになる gcc もいれます。

```
# yum install gcc
# yum update
```

ここで、人によって異なるのが、Yumの自動更新を設定するか否かです。
自動アップデートによる不具合の発生確率といったデメリットと、セキュリティ担保といったメリットを、クライアントに説明して判断いただきます。今回は自動更新はいらないとのこと。

## 日本語化対応
デフォルトで設定されてました。
記憶違いか思い出せないですが、昔は設定してたような。。

```
$ echo $LANG
ja_JP.UTF-8

```

## 日本時間対応
OSの時間がデフォルトUTCなんで変更します。

```
# ln -sf /usr/share/zoneinfo/Japan /etc/localtime
# vi /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=False
# date
2019年 10月  3日 木曜日 22:56:43 JST
```

## メンテナンスユーザ追加
ここも人や要件によるのですが、今回は、初期ユーザの ec2-user を使いません。
公開鍵なので、安全性が高いのは承知しているのですが、「システムのデフォルトユーザは使うな」という過去の先輩の教えの呪縛から、解き放たれていません。

```
kensyo_user というユーザを作成して鍵設定。鍵はec2-user用のものを再利用　※作ってもよし
# useradd kensyo_user
# mkdir /home/kensyo_user/.ssh
# cp -a /home/ec2-user/.ssh/authorized_keys /home/kensyo_user/.ssh/
# chmod 700 /home/kensyo_user/.ssh
# chmod 600 /home/kensyo_user/.ssh/authorized_keys
# chown -R kensyo_user:kensyo_user /home/kensyo_user/.ssh

kensyo_userユーザで、sudo 許可　※今回はユーザビリティを優先
# sudo visudo
kensyo_user     ALL=(ALL)       NOPASSWD:ALL

ec2-user削除
# userdel -r ec2-user
```

## SSH接続高速化
今回気づきましたが、これ設定しないとSSHの接続開始がめちゃくちゃ遅いですね。昔もこうだったかな？

```
# vi /etc/ssh/sshd_config
#UseDNS yes
UseDNS no
```

※あとで気づきましたが、VPCのDNSを有効化すれば早いのかも？

## SSH接続強化
SSH接続のために、sshd_configを変更します。
下3つのアルゴリズムは、古いOpnesshを使うサーバとかからSSHできなくなったりするので、設定するときは注意してください。
参考サイト：https://hackers-high.com/linux/ssh-config-more-secure/
参考サイト：http://blacksmithltw.hatenablog.com/entry/2015/01/23/232144

```
# vi /etc/ssh/sshd_config
Protocol 2
PermitRootLogin no

Ciphers aes256-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-gcm@openssh.com,aes128-ctr,chacha20-poly1305@openssh.com

KexAlgorithms curve25519-sha256@libssh.org,curve25519-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

MACs umac-128-etm@openssh.com,umac-64-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128@openssh.com,umac-64@openssh.com,hmac-sha2-512,hmac-sha2-256

```

## Postfix設定
まぁMailは使うかとおもうので、最低限の設定をします（セキュリティに厳しい方。あとで要件に応じて追加するので。。）。必要に応じて、smtpd_recipient_restrictions や disable_vrfy_commandなどを設定してください。

```
# vi /etc/postfix/main.cf
inet_protocols = ipv4
smtpd_banner = $myhostname ESMTP unknown
```

## CloudWatch カスタムメトリクス
EC2の標準監視で、メモリとディスクを送信する機能ってまだないんですね。。
AWS公式のスクリプトを利用して、メモリとディスク情報を送付する設定を行います。

※別途EC2にCloudWatchにデータを送信するポリシーを付与したロールを割り当てる必要あり

```
必要パッケージと、AWS公式スクリプトをダウンロード
# sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64
# curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
# unzip CloudWatchMonitoringScripts-1.2.2.zip
# rm CloudWatchMonitoringScripts-1.2.2.zip

cronで定期送信
# vi /etc/crontab
*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-util --mem-used --mem-avail --disk-path=/ --disk-space-util --disk-space-used --disk-space-avail --from-cr
on > /dev/null 2>&1 
```

# おわり
ざっとこんなもんでしょうか。
あとは、S3にログを送信するとかあってもよいかもですね。

その他要件に応じて、下記記事もおすすめです。

ネットワークチューニング：https://qiita.com/teco_naka/items/73921468620b5495e3de