新ネットワークスペシャリスト道

ネットワーク、セキュリティ、何の話?

【AWS 100日チャレンジ - 4日目】 テーマ「SSMのStateManagerでEC2の起動時にFTPサーバを自動インストール」

AWS 100日チャレンジの4日目です。

今日は業務が忙しかったんですが、

決めたことなので、簡単なテーマを構築してみます。

眠い。。。

 

AWS 100日チャレンジの記事を書く上でのルール

・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 に紐付けます。

    1. EC2 コンソールで対象のインスタンスを選択。

    2. 「アクション」「セキュリティ」「IAM ロールを変更」 をクリック。

    3. 先ほど作成した 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

 

今日はかなり簡単に達成できた。

疲れたので今日はこれまで。寝ます。おやすみなさい。