はじめに
こんにちは、クラウド事業部のますやです。
今回は、
AWS EC2 インスタンスに対し、更新を自動化する仕組みをSystems Managerで実装する!
方法を紹介します。
今回の「更新」とは、Linuxのインスタンスにはyum updateを実行し、
WindowsのインスタンスにはWindows Updateを実行することを指します。
週に一度、更新を自動で行うことで、インスタンスの状態を楽に最新の状態に保ちましょう。
脆弱性対応から解放され、ストレスフリーになりましょう!
概要
概要図
登場人物
補足
- EC2インスタンスの種類について
- AWS公式のAmazonLinux AMI, Windows AMI を利用しています。それ以外の場合は SSM Agent を手動でインストールする必要があります。
- EC2インスタンスのネットワークについて
- セキュリティグループはデフォルト設定で、アウトバウンド全開放です。
- パブリックサブネットに配置しています。
事前準備
1. 更新対象のEC2インスタンスに細かな設定を追加
1.1 タグを追加
以下のルールのように、更新対象のインスタンスのOSによって付けるタグを分けてください。
OS | Key | Value |
---|---|---|
Linux | SSMTarget | Linux |
Windows | SSMTarget | Windows |
1.2 IAMポリシーの追加
更新対象インスタンスに付与するIAMロールに以下のIAMポリシーを追加してください。
IAMポリシー | 詳細は公式ドキュメントへ |
---|---|
ResourceGroupsandTagEditorReadOnlyAccessAWS | Resource Groups を使用するための前提条件 |
AmazonSSMManagedInstanceCore | Systems Manager コンソールの [マネージドインスタンス] に EC2 インスタンスが表示されないのはなぜですか? |
CloudWatchAgentServerPolicy | CloudWatch エージェントで使用する IAM ロールとユーザーを作成する |
2. Resource Groupで更新対象のEC2をグルーピング
Linux用のResource Groupを作成します。
- AWS Resource Groupへ移動
- 画面右側からオレンジの[新しいグループの作成]
- グループタイプ
- [タグベース]を選択
- グループ分けの条件
- リソースタイプ:[AWS::EC2::Instance]
- タグ:事前準備1.1で作成したLinux用のタグ
- グループの詳細
- グループ名:[SSMTarget-Linux]
全く同じ手順で、Windows用のResource Groupを作成します。
3. SystemsManagerでドキュメントを作成
ここで言う「ドキュメント」とは、概要図にもありますが、以下の①・②・③・④の処理をコードにしたモノです。
①全インスタンスの起動 ②Linuxサーバーに対して`yum update`を実行 ③Windowsサーバーに対してWindows Updateを実行 ④全インスタンスの停止
これらのうち、自作しなければいけないドキュメントは②のみなんです!
①・③・④に関しては、AWSが用意してくれているドキュメントを使用します。
公式のコードを使えるので、とても便利!
以下の手順で②のドキュメントを作成します。
- SystemsManagerへ移動
- SystemsManager左帯から[ドキュメント]をクリック
- 画面右側からオレンジの[Create document]から[Automation]をクリック
- オートメーションを作成
- 名前:'YumUpdate'
- エディタタブを開き、ドキュメントエディタの[編集]から以下のコードを記入
description: yum update コマンドを実施。 schemaVersion: '0.3' parameters: InstanceId: type: String mainSteps: - name: YumUpdate action: 'aws:runCommand' inputs: DocumentName: AWS-RunShellScript InstanceIds: - '{{ InstanceId }}' Parameters: commands: - yum update -y
4. SystemManagerに紐付けるIAMロールを作成
コンソールを使用して、メンテナンスウィンドウのアクセス許可を設定します。 を参考に、IAMポリシーとIAMロールを作成します。
インスタンス更新の自動化を実装
1. メンテナンスウィンドウの作成
ついに、自動化の土台を作成していきます。
- SystemsManagerへ移動
- SystemsManager左帯から[メンテナンスウィンドウ]をクリック
- 画面右側からオレンジの[新しいメンテナンスウィンドウの作成]
- メンテナンスウィンドウの詳細の入力
- 名前:
update_instance
など
- 名前:
- スケジュール
- 次で指定(例えば、毎週水曜日の午前0時に実行する場合は次のように設定します):CRON/Rate 式
cron(0 0 0 ?*WEB*)
- 期間(本メンテナンスウィンドウにかかる時間を記載します)
- 次で指定(例えば、毎週水曜日の午前0時に実行する場合は次のように設定します):CRON/Rate 式
- [変更の保存]をクリック
- メンテナンスウィンドウの詳細の入力
2. メンテナンスウィンドウにターゲットを登録
土台を作成した次は、事前準備で作成したResource Groupとメンテナンスウィンドウを紐付けます。
- SystemsManagerへ移動
- SystemsManager左帯から[メンテナンスウィンドウ]をクリック
- 作成したメンテナンスウィンドウをクリック
- [ターゲット]タブをクリック
- 画面右側からオレンジの[ターゲット登録]をクリック
- Maintenance window target details
- Target name:
SSMTarget-Linux
- Description:Linux
- Target name:
- ターゲット
- ターゲットの選択:[リソースグループを選択]
- リソースグループ:[SSMTarget-Linux]を選択
- Maintenance window target details
全く同じ手順で、Windows用のResource Groupも登録します。
3. メンテナンスウィンドウにタスクを登録
- SystemsManagerへ移動
- SystemsManager左帯から[メンテナンスウィンドウ]をクリック
- 作成したメンテナンスウィンドウをクリック
- [タスク]タブをクリック
- 画面右側から[タスクの登録]をクリック
- 以下の4つのタスクをそれぞれ登録してください。
タイプ | 優先度 | オートメーションドキュメント | 実行内容 | 登録済みターゲットグループの選択 | パラメーター |
---|---|---|---|---|---|
オートメーションタスクの登録 | 1 | AWS-StartEC2Instance(AWS所有) | インスタンスの起動 | SSMTarget-Linux, SSMTarget-Windows | InstanceIdパラメーターを {{RESOURCE_ID}} に設定 |
オートメーションタスクの登録 | 2 | YumUpdate(自己所有) | Linuxサーバーに対してyum update実行 | SSMTarget-Linux | InstanceIdパラメーターを {{RESOURCE_ID}} に設定 |
Run Commandタスクの登録 | 3 | AWS-InstallWindowsUpdates(AWS所有) | Windowsサーバーに対してWindowsUpdate実行 | SSMTarget-Windows | |
オートメーションタスクの登録 | 4 | AWS-StopEC2Instance(AWS所有) | インスタンスの停止 | SSMTarget-Linux, SSMTarget-Windows | InstanceIdパラメーターを {{RESOURCE_ID}} に設定 |
IAM サービスロールには事前準備.4で作成したロールを指定してください。
4. メンテナンスウィンドウの実行を待つ
ここまで来たら、指定した時間にメンテナンスウィンドウの実行を待ち、結果を確認します。
お疲れ様でした!
メンテナンスウィンドウ作成に関する公式ドキュメントはメンテナンスウィンドウの使用 (コンソール)をご確認くださいー!
続編として、概要図の右側のパート「結果をTeamsへ通知編」を投稿する予定です。
それでは〜
おわりに
私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。