AWS 100日チャレンジの4日目です。
今日は業務が忙しかったんですが、
決めたことなので、簡単なテーマを構築してみます。
眠い。。。
・100日続ける(休日まとめ投稿もあり)
・記事を読んでもらうことを目的とはしない(すいません、継続することを重視します。自己満です)
・社会人のため、風邪および業務によりキャンセルすることもある。
・核となるサービス以外は、CloudFormation(VPCやサブネット、EC2など)やすでに設定済のサービス(SNSなど)を利用して構築する。
課題
SSMのStateManagerでEC2の起動時にFTPサーバを自動インストールする。
実施 (キャプチャのみの場合もあり)
大まかな手順としては以下です。
※CloudFormationにてEC2をPublicSubnetに構築済
1. EC2 の権限確認
2. State Manager の設定
1. EC2 の権限確認
・IAM ロール(AmazonSSMManagedInstanceCore )の付与
1. IAM コンソールへ移動
AWS コンソールで 「IAM」 を検索し、左メニューの 「ロール」 を選択して 「ロールを作成」 をクリックします。
2. 信頼されたエンティティを選択
-
エンティティタイプ:
AWS のサービス -
ユースケース:
EC2を選択します。-
これにより「EC2 インスタンスが AWS の他のサービスを操作することを許可する」という設定になります。
-
3. ポリシーの追加(ここが本番)
「許可ポリシー」の検索窓に AmazonSSMManagedInstanceCore と入力してください。
-
検索結果にチェックを入れます。
-
注意: 似た名前の
AmazonEC2RoleforSSMは古い(非推奨)ポリシーなので、必ずAmazonSSMManagedInstanceCoreを選んでください。
4. 名前を付けて作成
-
ロール名: XXXSSMRole
-
最後に 「ロールを作成」 をクリックします。
5. EC2 インスタンスへの割り当て
作成したロールを EC2 に紐付けます。
-
-
EC2 コンソールで対象のインスタンスを選択。
-
「アクション」 > 「セキュリティ」 > 「IAM ロールを変更」 をクリック。
-
先ほど作成した XXXSSMRole を選択して保存します。
-
・EC2のセキュリティグループ: 以下のポートを開放する
-
-
21: 制御用
-
10021-10040: パッシブモードデータ転送用(後述のスクリプトと合わせます)
-
2. State Manager の設定
1. 関連付けの作成画面へ
AWS コンソールで Systems Manager > ステートマネージャー > 関連付けの作成 をクリックします。
2. ドキュメントの選択
-
名前: xxxFtpServerOnBoot(任意)
-
ドキュメント: リストから
AWS-RunShellScriptを選択します。
3. パラメータ(スクリプト)の入力
「インスタンスへのコマンドの実行」欄に以下のスクリプトを貼り付けます。Amazon Linux 2023 / 2 を想定しています。
#!/bin/bash
# 1. インストール
yum install -y vsftpd# 2. 設定ファイルのバックアップ
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak# 3. 基本設定(匿名不可、書き込み許可、chroot有効など)
cat <<EOT > /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
# パッシブモード設定 (重要)
pasv_enable=YES
pasv_min_port=10021
pasv_max_port=10040
EOT# 4. サービスの起動と有効化
systemctl enable vsftpd
systemctl restart vsftpd
4. ターゲットの選択
ここが「起動時」に適用させるための肝です。
-
「タグを指定する」 を選択。
-
例:キー
Role、値FTP-Serverと入力。 -
メリット: 今後、このタグを付けて起動した EC2 は、SSM Agent が起動した瞬間にこのスクリプトが自動実行されます。
※このタグは対象EC2にも設定しないとターゲットとされないので注意
5. スケジュールの設定
-
「スケジュールなし」 または 「レートベース」(例: 30分ごと)を選択。
-
※State Manager は「現在の状態を維持する」ためのものなので、万が一設定ファイルが消えても、定期実行設定にしていれば自動で修復されます。

3. 確認
まずはローカルPCからキーペアを使用してSSHで接続する


まだインストールされていないのを確認する
rpm -q vsftpd

インスタンスを再起動したらインストールされていた!
[ec2-user@ip-10-0-1-39 ~]$ rpm -q vsftpd
vsftpd-3.0.5-1.amzn2023.0.2.x86_64

今日はかなり簡単に達成できた。
疲れたので今日はこれまで。寝ます。おやすみなさい。