AWS Well-Architected Labs Operational Excellence 100 Labs INVENTORY AND PATCH MANAGEMENTメモ

# はじめに

https://www.wellarchitectedlabs.com/operational-excellence/100_labs/100_inventory_patch_management/

:::note warn
記載内容は上記の翻訳ではなく、意訳、要約を含みます。
手順も一部省略している部分もあります。
詳細や正確な手順を知りたい場合は本家サイトを参照ください。

画面スクショは本記事作成当時のものであり、今後のアップデートにより差異が発生する可能性があることをご留意ください。
:::

## Introduction

本ハンズオンでInfrastructure as Code（以降、IaC と呼ぶ）とOperations as Codeの概念を学ぶことができます。

## Intro

クラウドでは、環境をコードで管理することができます。
ワークロード全体をコードで定義、更新したり、運用手順をスクリプト化してイベントをトリガーとして実行を自動化することもできます。
これによりヒューマンエラーを回避し、運用手順が一貫した手順となります。

## Setup

### 2.1 Create Administrator IAM User and Group

`AdministratorAccess`ポリシーをアタッチしたIAMグループを新規作成します。
また、IAMユーザ（以降、管理者ユーザ　とよぶ）も作成し、上記IAMグループに属させます。
ネットに情報がたくさんあるので、こちらの説明は省略します。

### 2.2 Log in to the AWS Management Console using your administrator account

前の手順で作成した管理者ユーザでマネジメントコンソールにログインする手順です。
こちらも特に説明はしません。
1点確認していただきたいのは、ハンズオンを実施するリージョンのVPCの数です。
VPCダッシュボードから確認することができます。下図の場合、東京リージョンで1つのVPCが生成されていることがわかります。
これが3つ以下であることを確認してください。3つより大きい場合、不要なVPCを削除してください。

![スクリーンショット 2023-08-09 22.06.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c10912a0-15fe-e7d5-71fc-bf0e624c7540.png)

### 2.3 Create an EC2 Key Pair

EC2インスタンスにログインする際に使用するキーペアを作成します。
このキーペアは公開鍵暗号方式を使用しており、EC2インスタンスへのログイン情報の暗号化、復号化に使用します。

EC2ダッシュボードに遷移し、左メニュー`キーペア`を選択してください。

![スクリーンショット 2023-08-09 22.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/1589d8e0-1b32-ddcd-2d99-99e1e875d546.png)

右上の`キーペアを作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-09 22.19.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/e1341056-34de-df88-7f7f-9c172a44e6a1.png)

`名前`は任意ですが、ハンズオンに合わせ`OELabIPM`にしました。
それ以外は下図のように入力し、`キーペアを作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-09 22.23.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/d54ab62e-0a0e-b993-e2e3-9caba66b0382.png)

キーペア画面に遷移し、一覧にキーペアが追加されていれば作成成功です。
作成成功時、キーペアがダウンロードされるので忘れないでください。
また、キーペアは機密情報ですので、厳重に管理してください。

![スクリーンショット 2023-08-09 22.25.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b5556f0e-ee27-1720-1ec7-512b53bde507.png)

## Deploy an Environment Using Infrastructure as Code

AWS Cloud Formationは、IaCを支援するサービスです。
Cloud Formationの定義に従ったテンプレートを作成し、このサービスにアップロードすることで、AWSリソースのプロビジョニングを自動化することができます。
プロビジョニングされたAWSサービス群は`スタック`という単位で管理され、作成および削除することができます。
Cloud Formationを使用することで、リソースの管理が楽になり、本来やるべき作業に注力することができます。

### 3.1 Deploy the Lab Infrastructure

[こちら](https://www.wellarchitectedlabs.com/Operations/100_Inventory_and_Patch_Mgmt/Code/OE_Inventory_and_Patch_Mgmt.json)からCloudFormationテンプレートをダウンロードしてください。

CloudFormationのTOP画面に遷移し、左メニュー`スタック`を選択してください。
次に画面中央オレンジ色の`スタックの作成`ボタンをクリックするか、右上`スタックの作成`を選択し、`新しいリソースを使用(標準)`をクリックしてください。

![スクリーンショット 2023-08-09 22.51.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/05a47b49-e409-344e-392f-19cbd2867629.png)

`前提条件 - テンプレートの準備`は`テンプレートの準備完了`、`テンプレートソース`は`テンプレートファイルのアップロード`を選択してください。
次に、`ファイルの選択`ボタンをクリックし、前手順でダウンロードしたCloudFormationテンプレートを選択してください。
最後に、`次へ`ボタンをクリックしてください。
デザイナーについての説明は割愛いたします。

![screencapture-ap-northeast-1-console-aws-amazon-cloudformation-home-2023-08-09-22_54_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/60cfc0b4-7eda-f7a0-2ec9-6ddbe5944807.png)

`スタック名`は任意ですがハンズオンと同様`OELabStack1`にします。
`InstanceProfile`は空白にしてください。
`InstanceTypeApp`と`InstanceTypeWeb`は`t2.micro`にしてください。
`KeyName`は前手順で作成したキーペア名（今回は`OELabIPM`）を選択してください。
`SourceLocation`は作成するEC2インスタンスのアクセス元IPアドレスを指定します。
[https://checkip.amazonaws.com/](https://checkip.amazonaws.com/)にアクセスし、表示されたIPを入力、末尾に`/32`を追加してください。
`WorkloadName`は`Test`にしてください。
最後に、`次へ`ボタンをクリックしてください。

![screencapture-ap-northeast-1-console-aws-amazon-cloudformation-home-2023-08-09-23_05_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/4663f632-b006-b852-4ad6-287ac34380d6.png)

`新しいタグを追加`ボタンをクリックし、`キー`に`Owner`、`値`に任意の文字列を入力してください。
それ以外は設定変更せず、`次へ`ボタンをクリックしてください。

![screencapture-ap-northeast-1-console-aws-amazon-cloudformation-home-2023-08-09-22_54_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6b262f65-c82b-c26b-14ac-de4e19b3b845.png)

確認画面です。入力内容を確認したら、`送信`ボタンをクリックしてください。

![screencapture-ap-northeast-1-console-aws-amazon-cloudformation-home-2023-08-09-23_11_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/2bd0b160-d65a-cc0a-01b1-feb02c0a5123.png)

スタックのステータスが`CREATE_COMPLETE`になったらプロビジョニング成功です。

![スクリーンショット 2023-08-09 23.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/8994ac47-8453-ed07-6dc0-d6731e44db0c.png)

EC2インスタンスの一覧に遷移し、インスタンスが合計4つ起動していることを確認してください。
インスタンスの1つを選択し、`タグ`タブを選択してください。
CloudFormationでの操作時に入力した`Owner`タグや`Workload`が`Test`になっていることを確認してください。

![スクリーンショット 2023-08-09 23.17.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/e2fe1c1b-e70e-df5d-0bfe-71a1794bc9d2.png)

### The impact of Infrastructure as Code

IaCのメリットの1つはデプロイできるテンプレートを作成できれば、それを使って同じ環境のコピーをいくつも作成できることです。
今回CloudFormationのパラメータ`Workload`は`Test`としましたが、`Prod`にして本番環境として利用することもできます。

## Inventory Management using Operations as Code

### Management Tools: Systems Manager

AWS Systems Managerは、AWS環境の運用に加え、オンプレ環境の運用も効率化する機能を数多く提供するサービスです。
管理する主なサービスはEC2であり、管理対象となったEC2インスタンスをマネージドインスタンスと呼びます。
マネージドインスタンスになるには以下の条件があります。

- SSMエージェントがインストールされていること
  - エージェントがプリインストールされているAMIもありますし、手動でインストールすることもできます
  - 詳細は[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent.html)を参照ください
- SSM APIへの接続経路が存在すること
  - エージェントとSSM APIはHTTPSで通信します。
  - Internet GatewayやNAT Gatewayを使用し、アウトバウンド通信を許可する必要があります。
- IAMロールに適切な権限が付与されていること
  - マネージドポリシー`AmazonSSMManagedInstanceCore`にSSMを操作する最低限の権限が付与されているので、このポリシーかそれに相当するものをIAMロールに付与する必要があります。

### 4.1 Setting up Systems Manager

Systems ManagerのTOP画面から左メニュー`フリートマネージャー`を選択します。
先に進むと下図のような画面が表示されます。フリートマネージャーはマネージドインスタンスの情報を一覧化し、管理できる機能です。
現在はマネージドインスタンスの条件となるEC2インスタンスを作成していないため、何も表示されていません

![スクリーンショット 2023-08-10 23.15.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/7e2f2168-426f-8f9b-4931-d19aa85c654b.png)

[Deploy an Environment Using Infrastructure as Code](#Deploy an Environment Using Infrastructure as Code)で生成したEC2インスタンスをフリートマネージャーに表示するには上に記載している条件の`IAMロールに適切な権限を付与`を実施する必要があります。

IAMのTOP画面の左メニュー`ロール`を選択し、`ロールを作成`ボタンをクリックしてください。
次に下図のように`信頼されたエンティティタイプ`と`ユースケース`を選択し、`次へ`ボタンをクリックしてください。

![screencapture-us-east-1-console-aws-amazon-iamv2-home-2023-08-10-23_42_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/4fb2c417-0827-4f03-89b9-e8704d54e26d.png)

続いて、追加するポリシーを選択します。
検索窓に`AmazonSSMManagedInstanceCore`と入力し、表示された`AmazonSSMManagedInstanceCore`をチェック、`次へ`ボタンをクリックしてください。

![スクリーンショット 2023-08-10 23.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/611b03b2-95cd-4edc-4f4d-5789e859318b.png)

`ロール名`は任意ですが、今回はハンズオンと同様`ManagedInstancesRole`にします。それ以外は特に入力は不要です。
`ロールを作成`ボタンをクリックしてください。

![screencapture-us-east-1-console-aws-amazon-iamv2-home-2023-08-10-23_50_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/5ef34e8d-4bb6-9e2b-2841-dadb198c1901.png)

EC2インスタンスの一覧画面に遷移してください。
現在４つのインスタンスが起動しているはずです。
その内1つをチェックし、`アクション`プルダウンを選択、`セキュリティ`、`IAMロールを変更`を選択してください。

![スクリーンショット 2023-08-10 23.52.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/7c359173-10be-fb96-2a98-d5b046af2911.png)

プルダウンでインスタンスにアタッチするIAMロールを選択します。
先ほど作成した`ManagedInstancesRole`を選択し、`IAMロールの更新`ボタンをクリックしてください。
以上の作業を他3インスタンスにも実施してください。

![スクリーンショット 2023-08-10 23.53.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b2fefdc9-dd01-5c0a-c5fe-9dadbe2b5cc0.png)

フリートマネージャーに移動し、IAMロールを変更したEC2インスタンスがマネージドインスタンスとして表示されているか確認してみましょう（反映には感覚10分程度かかります）。
インスタンスが4つ表示されたら成功です。

![スクリーンショット 2023-08-11 0.01.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/3040ff6c-6e19-2d53-e96b-4d2099cf3dc4.png)


### 4.2 Create a Second CloudFormation Stack

以降のハンズオンで使用するため、[3.1 Deploy the Lab Infrastructure](#3.1 Deploy the Lab Infrastructure)で作成したスタックをもう一つ作成します。

`スタック名`は任意ですがハンズオンと同様`OELabStack2`にします。
`InstanceProfile`は上記手順で作成したIAMロール`ManagedInstancesRole`のロール名を入力してください。
また、`WorkloadName`は`Prod`にしてください。
それ以外のパラメータは同じにしてください。

スタックが作成されたら、フリートマネージャーを確認し、マネージドインスタンスが8つ表示されていることを確認してください。

![スクリーンショット 2023-08-12 16.14.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6e73c6d8-2947-24fd-44fa-1e577f2b5545.png)

### Systems Manager: Inventory

AWS Systems ManagerのInventoryは、マネージドインスタンスからOS、アプリケーションやインスタンスのメタデータ（ネットワーク情報など）を収集し、一覧表示する機能です。
収集したデータをクエリし、アップデートが必要なインスタンスや必要なアプリケーションがインスタンスにインストールされているかなどを確認することができます。

### 4.3 Using Systems Manager Inventory to Track Your Instances

Systems ManagerのTOP画面左メニュー`インベントリ`を選択してください。

![スクリーンショット 2023-08-12 16.16.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/33569d80-f094-8b08-2775-928fcd07c1f5.png)

画面下にある`対応するマネージドインスタンス`に`フリートマネージャー`で表示されているEC2インスタンスの情報が表示されていることを確認します。

![スクリーンショット 2023-08-12 16.16.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/33569d80-f094-8b08-2775-928fcd07c1f5.png)

一覧一番上の`インスタンスID`のリンクをクリックしてください。
左メニューを選択することでインスタンスのメタ情報やタグ情報などを確認することができます。

![スクリーンショット 2023-08-12 16.18.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/4f2ad996-8dd0-8749-1c1c-882478b8d1ce.png)

![スクリーンショット 2023-08-12 16.18.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/5f315bf6-5622-62b1-7b4a-3b73bbecbf70.png)

再度、左メニュー`インベントリ`を選択してください。
画面右上`セットアップインベントリ`ボタンをクリックしてください。

![スクリーンショット 2023-08-12 16.16.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/33569d80-f094-8b08-2775-928fcd07c1f5.png)

こちらの画面でインベントリ情報を収集するマネージドインスタンスや情報収集のスケジュール、取得する情報などを指定することができます。

![スクリーンショット 2023-08-12 16.26.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/96eb10ab-f8c8-6f2d-2b15-c527b357ac2c.png)

まず、`インベントリの詳細の指定`の名前を入力します。今回はデフォルト`Inventory-Association`にします。

![スクリーンショット 2023-08-12 16.27.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/3680747f-753c-3d2f-22bf-afd61028c874.png)

インベントリ対象のマネージドインスタンスを指定します。
`ターゲット`は`タグの指定`を選択し、`タグ`は`Environment`、`値`は`OELabIPM`を入力してください。
ハンズオンで生成したEC2インスタンスには上記タグ値が付与されているため、スタック内全てのインスタンスがインベントリ対象になります。

![スクリーンショット 2023-08-12 16.28.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/93c79e14-678f-476f-a9cb-cb32819822c3.png)

続いて、インベントリを収集するスケジュールを指定します。
`スケジュール`は最小の`30分`にしてください。

![スクリーンショット 2023-08-12 16.28.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/14d7ffda-3511-a5ae-c5a7-b67c61331b18.png)

`パラメーター`では収集するインベントリの種類を選択できます。今回はデフォルト（全選択）にしてください。

![screencapture-ap-northeast-1-console-aws-amazon-systems-manager-managed-instances-set-up-inventory-2023-08-12-16_28_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/8732e7b8-f9a8-5419-84f6-f8dc40bb294d.png)

`詳細設定`でインベントリ収集の実行ログを指定したS3バケットに書き込むことができます。
`実行履歴を S3 に書き込む`をチェックし、`S3 バケット名`に任意のS3バケット名、`S3 キープレフィックス`は`logs`と入力してください。（S3バケットは事前に作成しておく必要があります）

![スクリーンショット 2023-08-12 16.28.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/d4cb2632-a5a9-12f8-cbaf-7cd9676db7d7.png)

入力し終えたら、画面右下の`セットアップインベントリ`ボタンをクリックしてください。
以上でインベントリが設定されます。また、同時に後述する`State Manager`に`関連付け（アソシエーション）`が作成されます。

作成したインベントリ設定は`設定`タブを選択することで確認できます。
`ステータス`が`成功`になっていれば、インベントリ収集が完了です。
設定の新規作成は右上`新しいインベントリの設定`ボタン、設定の編集は右上`編集`ボタンからできます。

![スクリーンショット 2023-08-12 16.36.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/1437a35b-df28-e322-cc70-c077db1c0a40.png)

インベントリの`ダッシュボード`に遷移してください。
`インベントリが有効になっているマネージドインスタンス`は以前`disable`が8でしたが、`enable`が8に変わっています。
また、OSやアプリケーションの情報も表示されるようになりました。

![screencapture-ap-northeast-1-console-aws-amazon-systems-manager-inventory-2023-08-12-16_40_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/887de2c8-f8d4-90aa-f7a7-9acab19e7e78.png)

インスタンスの詳細画面で`インベントリ`を選択すると、インスタンス毎の詳細なインベントリを閲覧することができます。
下図はインストールされているアプリケーションを一覧表示している例です。

![スクリーンショット 2023-08-12 16.41.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b980f69a-0abb-b152-741b-96a8cd5fb536.png)

### Systems Manager: State Manager

AWS Systems ManagerのState Managerは、マネージドインスタンスの設定を管理、維持する機能です。
この`インスタンスがあるべき状態の定義`を`関連付け（アソシエーション）`と呼びます。
`関連付け（アソシエーション）`は以下3つの設定があります。

- 対象: どのマネージドインスタンスをステートマネージャーで管理するか
- 実行ドキュメント: どのドキュメント（マネージドインスタンスで実行するアクションを定義したもの）を実行するか
- スケジュール: どの頻度でドキュメントを実行するか（１回のみ実施も可能）

### 4.4 Review Association Status

左メニュー`ステートマネージャー`を選択し、セットアップインベントリで生成した関連付け（今回だとInventory-Association）の`関連ID`のリンクをクリックしてください。

![スクリーンショット 2023-08-12 19.16.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/f8bb32dd-4cd4-89d8-7ca5-f83f870d04b9.png)

タブを選択して、関連付けの情報を閲覧することができます。
関連付けのメタ情報、`対象`となっているマネージドインスタンスやターゲットとする条件など確認ができます。

![スクリーンショット 2023-08-12 19.19.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6479ee14-bf7d-8572-cc7a-1ad4d2c33142.png)

![スクリーンショット 2023-08-12 19.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/1cb66611-9fa3-9fab-113d-a8de34aa1984.png)

![スクリーンショット 2023-08-12 19.20.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c8782d17-1d7f-a3cf-06fc-2f38ddf6f31f.png)

`Edit`ボタンをクリックすると、関連付け設定の変更ができます。
`ドキュメント`に記載されているSSMドキュメント（今回は`AWS-GatherSoftwareInventory`）がスケジュールに従い、指定したターゲットに対して実行されます。
パラメーターの値は実行時にドキュメントに渡されます。

![screencapture-ap-northeast-1-console-aws-amazon-systems-manager-state-manager-77fcda1a-2a3d-41c0-bfd3-39cc24b7f3ef-edit-2023-08-12-19_28_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c54c6edc-3cfd-6921-298a-1699483df502.png)

インスタンスの詳細画面に再度遷移します。（フリートマネージャーで`ノードID`のリンクをクリック）
左メニュー`関連付け`を選択すると、関連付け情報と直近の実行結果を確認することができます。

![スクリーンショット 2023-08-12 19.51.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/456b8102-8c72-95d6-ee12-eb1255ede210.png)


### Systems Manager: Compliance

AWS Systems ManagerのComplianceはマネージドインスタンスをスキャンし、コンプライアンスに準拠しているか確認する機能です。
以下の情報からコンプライアンスに準拠しているかしていないかを判断しています。

- Patch Managerのパッチ適用のステータス
- State Managerの関連付けのステータス
- カスタムコンプライアンス項目のステータス

つまり、マネージドインスタンスのパッチ適用状況と構成が逸脱していないかを判断してくれます。

左メニュー`コンプライアンス`をクリックし、コンプライアンス画面に遷移します。
`コンプライアンスダッシュボードのフィルタリング`で`コンプライアンスタイプ`を選択するとState Managerの関連付けに準拠しているかを確認することができます。
`準拠リソース`が8であるため、問題ないことがわかります。

![スクリーンショット 2023-08-12 20.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c3bd8e62-4caf-ad72-3fd8-b5faf43032ab.png)

`コンプライアンスダッシュボードのフィルタリング`で`パッチグループ`を選択するとPatch Managerのパッチ適用状況を確認することができます。
こちらも`準拠リソース`が8であるため、問題ないことがわかります。

![スクリーンショット 2023-08-12 20.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/70804e89-6035-b3c1-96a8-56f435416151.png)

## Patch Management

### Systems Manager: Patch Manager

AWS Systems ManagerのPatch Managerはマネージドインスタンスにセキュリティパッチを管理する機能です。
どのインスタンスにパッチが不足しているかのレポート機能や不足していたら自動的にパッチ適用する機能があります。
パッチをチェックするインスタンスは個別に指定することもグループとして指定することも可能です。

### Patch Baselines

Patch Managerにはパッチベースラインという概念があります。これはインスタンスにパッチを適用するルールです。
例えば、デプロイ後数日以内にパッチを自動適用するルールなどがあります。
OS毎に事前定義済みのパッチベースラインがありますし、独自のベースライン（カスタムベースライン）も定義することができます。

### 5.1 Create a Patch Baseline

Systems Managerの左メニュー`パッチマネージャー`を選択してください。
右上の`概要から開始`リンクをクリックしてください。

![スクリーンショット 2023-08-13 11.51.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/80d18d10-80fd-b1cc-8396-072ba02da0ee.png)

パッチマネージャーの画面が表示されたら、`パッチベースライン`タブを選択してください。
パッチベースラインの一覧が表示されます。
`パッチベースラインを作成する`ボタンをクリックしてください。

![スクリーンショット 2023-08-13 11.54.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/9f63d4c9-aebf-4103-a319-325c3c755d54.png)

作成するパッチベースラインの情報を入力する画面に遷移します。

![スクリーンショット 2023-08-13 12.00.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c178d140-2b92-b610-d730-a197ed4398cb.png)

`パッチベースラインの詳細`セクションの入力を行います。
`名前`はなんでも良いですが、今回はハンズオンと同じ`AmazonLinuxSecAndNonSecBaseline`にします。
`説明`はオプションですが、今回はハンズオンと同じ`Amazon Linux patch baseline including security and non-security patches`にします。
`オペレーティングシステム`は`Amazon Linux`を選択してください。

![スクリーンショット 2023-08-13 12.01.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/0dbaaa93-8689-7d29-ac5f-077f1a6cb822.png)

`オペレーティングシステムの承認ルール`の入力を行います。
`製品`、`分類`、`重要度`は全て`All`を選択してください。
`自動承認`はデフォルト値、つまり`指定した日数後にパッチを承認する`をチェックし、`日数の指定`は`0`日にしてください。
`コンプライアンスレポート`は`中`にしてください。
`セキュリティ以外の更新を含める`はチェックしてください。

![スクリーンショット 2023-08-13 12.05.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/3487681d-81fb-acd9-6776-d68f3c084ce9.png)

`パッチの例外`セクションの入力を行います。
`拒否されたパッチ`に`system-release.*`を入力してください。これにより、リリースする前にPatch Managerがサポートできない可能性がある新しいAmazon Linuxへのパッチを拒否することができます。

![スクリーンショット 2023-08-13 12.15.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6f94bdd5-f7e0-2d7c-c9fd-62d679d5618c.png)

以上、入力が終わったら画面最下部の`パッチベースラインを作成する`ボタンをクリックしてください。
パッチベースラインの一覧画面に遷移します。作成したベースラインが表示されていることを確認してください。

![スクリーンショット 2023-08-13 12.17.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b72a1db5-adc0-9636-3ff0-dcb8a2a83fb5.png)

### Patch Groups

Patch Managerにはパッチグループという概念があります。パッチを適用するインスタンスをグループ化するものです。
パッチグループをパッチベースラインに関連付けることでパッチグループに属するインスタンスにベースラインで定義したルールでパッチを適用することができます。
パッチグループはインスタンスにタグを付与することで作成できます。
タグキーに`Patch Group`、値に任意の文字列、例えば、`dev`などを指定します。
注意点は、1つのインスタンスは1つのバッチグループにしか属することができません。また、1つのパッチグループを複数のパッチベースラインに関連付けできますが、OSごとに1つまでです。

https://dev.classmethod.jp/articles/patchmanager-baseline-and-group/

### 5.2 Assign a Patch Group

パッチベースラインの一覧画面で先ほど作成したベースライン`AmazonLinuxSecAndNonSecBaseline`を検索し、`ベースラインID`リンクをクリックします。

![スクリーンショット 2023-08-13 12.17.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b72a1db5-adc0-9636-3ff0-dcb8a2a83fb5.png)

※ハンズオン記載では、右上に`アクション`ボタンがあり、そこからベースラインに割り当てるパッチグループを選択する手順が記載されているが、`アクション`ボタンが見つからなかった。
調べたところ、[こちら](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager-tag-a-patch-group.html#sysman-patch-group-patchbaseline)のページに対処方法が記載されていた。以下Deepl翻訳。
今回はAWS CLIを使用する方法で行う。推奨方法はパッチポリシーを使用する方法であるため、ハンズオンとやり方が異なるからです。


> Baseline IDの詳細ページにActionsメニューがない場合、コンソールでパッチグループを設定することはできません。代わりに、以下のどちらかを行うことができます：
> (推奨）AWS Systems Managerの機能であるQuick Setupでパッチポリシーを設定し、パッチベースラインを1つ以上のEC2インスタンスにマッピングする。
> 詳細については、Quick Setupパッチポリシーの使用とQuick Setupパッチポリシーを使用した組織全体のパッチの自動化を参照してください。
> パッチグループを構成するには、AWSコマンドラインインターフェイス（AWS CLI）のregister-patch-baseline-for-patch-groupコマンドを使用する。

`register-patch-baseline-for-patch-group`コマンドのドキュメントは[こちら](https://docs.aws.amazon.com/cli/latest/reference/ssm/register-patch-baseline-for-patch-group.html)です。
`baseline-id`は今回作成したパッチベースラインのベースラインIDを指定します。
`patch-group`はパッチグループ名を指定します。今回のハンズオンでは`Critical`を指定します。
CloudShellで実行します。

```
aws ssm register-patch-baseline-for-patch-group --baseline-id <ベースラインID> --patch-group <パッチグループ名>
```

![スクリーンショット 2023-08-13 14.17.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/be7fb279-390b-5891-51f5-92b1eda0728b.png)

パッチベースラインの一覧を再度表示すると一覧に`デフォルトのベースライン`列が表示されました。

![スクリーンショット 2023-08-13 14.21.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6cd56fab-a1cd-1763-9036-2ec3d95bce4b.png)

また、作成したパッチベースラインの詳細画面を表示すると`アクション`ボタンが追加で表示されていることもわかりました。
当該ベースラインの`説明`セクションの`パッチグループ`が`Critical`になっていることを確認してください。

![スクリーンショット 2023-08-13 14.22.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b411c23c-24cd-dc3f-749f-d0ada3862504.png)

### AWS-RunPatchBaseline

`AWS-RunPatchBaseline`は、SSMドキュメントの一つであり、マネージドインスタンスにセキュリティ関連およびその他アップデートを実行します。
パッチのコンプライアンス情報もレポートし、Systems Managerのコンプライアンス機能で結果を確認することができます。
例えば、バッチが不足しているインスタンスと不足しているパッチを確認できます。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/patch-manager-aws-runpatchbaseline.html

### AWS Systems Manager: Document

Systems Managerにはドキュメント（SSMドキュメント）という概念があります。これはSystems Managerがマネージドインスタンスに対して実行するアクションを定義するものです。
前述の`AWS-RunPatchBaseline`は事前設定済みドキュメントであり、これらはその他たくさん用意されています。
ドキュメントはJsonまたはYamlで記載されており、実行するアクションやパラメータが定義されています。

### 5.3 Examine AWS-RunPatchBaseline in Documents

Systems MangerのTOP画面の左メニュー`ドキュメント`を選択します。
検索窓を選択し、`ドキュメント名のプレフィックス`、`Equals`を選択し、`AWS-Run`と入力し、エンターキーを押下してください。
`AWS-RunPatchBaseline`が検索されているので、そのリンクをクリックしてください。

![スクリーンショット 2023-08-13 14.55.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/4859f9ff-b43b-6586-646b-d509b1cec8e2.png)

ドキュメントの詳細画面が表示されます。
`説明`タブではドキュメントのメタ情報、`コンテンツ`にはドキュメントの実体（Json、Yaml）などが表示されます。

### AWS Systems Manager: Run Command

Systems Managerには`Run Command`という機能があります。これはマネージドインスタンスの構成をリモートで管理できる機能です。
マネージドインスタンスに対する定期的（またはアドホック）な構成変更をインスタンスにログインせずに実行することができます。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/run-command.html

### 5.4 Scan Your Instances with AWS-RunPatchBaseline via Run Command

Systems ManagerのTOP画面左メニュー`Run Command`を選択し、右上`Run command`ボタンをクリックします。

![スクリーンショット 2023-08-13 15.17.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/887121a0-8cb2-27ad-41fe-3a52384d49f5.png)

`コマンドドキュメント`セクションの検索窓を選択し、`プラットフォームの種類`で`Linux`を選択後、エンターキーを押下してください。
検索窓に続いて`AWS-RunPatchBaseline`と入力し、エンターキーを押下してください。
一覧に`AWS-RunPatchBaseline`が表示されるのでチェックしてください。

![スクリーンショット 2023-08-13 15.21.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/5fc0928e-4790-0bb8-3cf0-0c4c6b615f31.png)

次に`コマンドのパラメータ`セクションの入力です。
`Operation`は`Scan`にし、それ以外はデフォルトで構いません。

![スクリーンショット 2023-08-13 15.24.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/7d054d1f-f5f6-7dc9-6314-0931de3d708d.png)

次に`ターゲット`セクションの入力です。
`ターゲット`は`インスタンスタグの指定`を選択し、`インスタンスタグの指定`では`タグキー`に`Workload`、`タグの値`に`Test`を入力し、`Add`ボタンをクリックしてください。

![スクリーンショット 2023-08-13 15.26.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/82b78fa9-d2db-ef88-82ce-4a54faef1303.png)

以降の設定は今回不要です。
画面右下の`実行`ボタンをクリックしてください。

`Run Command`のTOP画面で`コマンド履歴`タブを選択すると、実行したコマンドの結果を確認できます。
今回`Workload`タグに`Test`を指定したのでターゲットとなるマネージドインスタンスは4つになっていることがわかります。

![スクリーンショット 2023-08-13 15.31.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/f93c06df-4c11-db3f-80b4-6ce47030cf2f.png)

`コマンドID`リンクをクリックするとコマンド実行結果の詳細を確認することができます。

![スクリーンショット 2023-08-13 15.34.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/0a8043f6-10f7-42e3-4ede-676e50a93b73.png)

### 5.5 Review Initial Patch Compliance

Systems ManagerのTOP画面左メニュー`コンプライアンス`を選択します。
`ダッシュボードの結果をグループ化する条件`は`コンプライアンスタイプ`を選択すると、`コンプライアンスリソースの概要`セクションに`非準拠リソース`が`4`と表示されるのでそれを選択します。
`リソース`セクションに`非準拠リソース`と判断されているマネージドインスタンスが表示されていることを確認します。

![スクリーンショット 2023-08-13 15.39.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/272d5009-de09-7bd9-4418-56404a5196e2.png)

### 5.6 Patch Your Instances with AWS-RunPatchBaseline via Run Command

Systems ManagerのTOP画面左メニュー`Run Command`を選択し、右上`Run command`ボタンをクリックします。

![スクリーンショット 2023-08-13 15.17.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/887121a0-8cb2-27ad-41fe-3a52384d49f5.png)

`コマンドドキュメント`セクションの検索窓を選択し、`プラットフォームの種類`で`Linux`を選択後、エンターキーを押下してください。
検索窓に続いて`AWS-RunPatchBaseline`と入力し、エンターキーを押下してください。
一覧に`AWS-RunPatchBaseline`が表示されるのでチェックしてください。

![スクリーンショット 2023-08-13 15.21.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/5fc0928e-4790-0bb8-3cf0-0c4c6b615f31.png)

次に`コマンドのパラメータ`セクションの入力です。
`Operation`は`Install`にし、それ以外はデフォルトで構いません。

![スクリーンショット 2023-08-13 15.45.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/9706a3a4-8f08-d289-fd48-231e5d7effeb.png)

次に`ターゲット`セクションの入力です。
`ターゲット`は`インスタンスタグの指定`を選択し、`インスタンスタグの指定`では`タグキー`に`Workload`、`タグの値`に`Test`を入力し、`Add`ボタンをクリックしてください。

![スクリーンショット 2023-08-13 15.26.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/82b78fa9-d2db-ef88-82ce-4a54faef1303.png)

次に`レート制御`セクションの入力です。
`同時実行数`は`ターゲット`を選択し、`1`を入力してください。
`エラーのしきい値`は`エラー`を選択し、`1`を入力してください。

![スクリーンショット 2023-08-13 15.50.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/99287054-1c0f-b5c4-c0bc-6b975e838518.png)

画面右下の`実行`ボタンをクリックしてください。

コマンドの詳細画面に遷移するので、`全体的なステータス`が`成功`または`失敗`になるまで待ちます。

### 5.7 Review Patch Compliance After Patching

先ほど実行したコマンドは4つのインスタンスに対して実行され、`全体的なステータス`は`失敗`に終わりました。
インスタンス毎の結果を一覧から確認すると`詳細なステータス`が`失敗`のものと`終了済み`のものがありました。

![スクリーンショット 2023-08-13 16.00.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6da0b47b-3c04-99e5-089f-f77dc132c2da.png)

インスタンスIDのリンクをクリックすると、実行したドキュメントのステップ毎の結果が表示されます。
`詳細なステータス`が`失敗`のものは最初のステップが成功し、以降は失敗しているようです。
`終了済み`のものは何も表示されませんでした。`Run Command`の`エラーのしきい値`を超えたため、コマンドが実行されなかったからだと思われます。

![スクリーンショット 2023-08-13 16.00.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/454c6006-43e1-3ffc-0677-5d925511d026.png)

`コンプライアンス`画面に戻り結果を確認してみましょう。
`コンプライアンスリソースの概要`セクションの`非準拠リソース`が4から2になっており、`準拠リソース`が2に増えていることがわかります。
`準拠リソース`の数値を選択し、`リソース`セクションを確認すると、`Run Command`で`詳細なステータス`が`失敗`で終わったインスタンスが表示されていました。
最初のステップが成功した結果、当該インスタンスが`非準拠リソース`から`準拠リソース`になったことがわかります。

![スクリーンショット 2023-08-13 16.08.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/42f2bf0f-7aa1-86f4-4430-23d56e2dbc0b.png)

### The Impact of Operations as Code

`Run Command`の実行は失敗してしまいましたが、Patch Managerなどの機能を使用すると大量のインスタンスに対して簡単に構成変更をスケジュールさせることができるとわかりました。
運用手順書などはJsonやYamlのコードに置き換わり、自動化されることでヒューマンエラーのリスクも無くなります。
運用がより楽になり本当に注力すべき作業に時間を費やすことができます。

## Creating Maintenance Windows and Scheduling Automated Operations Activities

### AWS Systems Manager: Maintenance Windows

Systems Managerには`メンテナンスウィンドウ`という機能があります。これはOSのバッチ適用、ドライバの更新やソフトウェアのインストールなどをインスタンスに対して実施するスケジュールを定義する機能です。
メンテナンスウィンドウには、スケジュール、ターゲット、タスクといった要素が存在します。
スケジュールは文字通り、いつタスクを実行するかを指定します。
ターゲットはタスクを実行する対象であり、マネージドインスタンスを指定します。
タスクは実行するアクションを指します。`Run Command`のコマンド、`オートメーション`のワークフロー、Lambda関数やStep Functionsのステートマシンなどを実行することができます。

### 6.1 Setting up Maintenance Windows

Systems Managerがメンテナンスウィンドウのタスクを実行できるようにするIAMロールを作成します。
IAMのダッシュボード左メニュー`ロール`を選択し、右上`ロールを作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 10.40.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/8738b026-a440-4150-7d84-86395e514f30.png)

`信頼されたエンティティタイプ`は`AWSのサービス`を選択してください。
`ユースケース`は`EC2`を選択してください。
右下の`次へ`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 10.43.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6b3aa7a2-98d5-bc39-57f5-7a4c7330139e.png)

検索窓に`AmazonSSMMaintenanceWindowRole`と入力し、エンターキーを押下してください。
表示された`AmazonSSMMaintenanceWindowRole`をチェックし、右下`次へ`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 10.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/d9c4131b-a399-4333-8c27-a4d32f973a02.png)

`ロール名`は自由ですが、今回は`SSMMaintenanceWindowRole`にします。
`説明`は自由ですが、今回は`Role for Amazon SSMMaintenanceWindow`にします。

![スクリーンショット 2023-08-14 10.53.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c924031b-02e4-323c-b8c4-e7ee8659d2fe.png)

それ以外は後で書き換えるものもありますが、デフォルトにし、右下`ロールの作成`ボタンをクリックしてください。

![screencapture-us-east-1-console-aws-amazon-iamv2-home-2023-08-14-10_53_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/ecc7baf8-6ab7-846f-a1e2-887548939407.png)

作成したIAMロールを選択し、詳細画面に遷移してください。
`信頼関係`タブを選択し、`信頼ポリシーを編集`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 11.05.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/ec7363ee-681c-0313-f87a-40b4abf3028b.png)

Jsonを以下に書き換えてください。
このIAMロールに付与されているIAMポリシーを行使するサービスとしてEC2、Systems Manager、SNSを指定します。

```json
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"",
         "Effect":"Allow",
         "Principal":{
            "Service":[
               "ec2.amazonaws.com",
               "ssm.amazonaws.com",
               "sns.amazonaws.com"
            ]
         },
         "Action":"sts:AssumeRole"
      }
   ]
}
```

書き換えたら右下`ポリシーを更新`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 11.08.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/bfb87edc-85fb-cca1-c19e-7838ff268b68.png)

続いて、IAM PassRoleポリシーを作成し、IAMユーザーに割り当てます。
メンテナンスウィンドウにタスクを登録する際、前手順で作成したIAMロールをアタッチする必要があります。
`当該IAMロールをタスクにアタッチをする`という権限をIAMユーザーに付与するため、これら手順を実施します。

IAMのダッシュボード左メニュー`ポリシー`を選択し、右上`ポリシーを作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 11.12.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/b589054b-a29c-43d8-23f1-09e8ca0d04f5.png)

IAMポリシーの情報を入力していきます。
`サービスを選択`は`IAM`を選択してください。

![スクリーンショット 2023-08-14 11.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/0b2eac3e-61ca-c838-920d-bf4c32bd5220.png)

`アクション許可`は検索窓に`PassRole`と入力し、表示された`PassRole`をチェックしてください。
続いて`リソース`は`特定`を選択した状態で、`ARNを追加`リンクをクリックしてください。

![スクリーンショット 2023-08-14 11.17.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/dcfa5c38-9671-caba-b86e-2d1afb291ac2.png)

ダイアログ内の`テキスト`タブをクリックし、先ほど作成したIAMロールのARNを貼り付けてください。
右下`ARNを追加`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 11.20.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/510fad44-30c1-66d8-367b-8861cbdd571d.png)

ここまで入力したら、画面右下`次へ`ボタンをクリックしてください。

`ポリシー名`は自由ですが、今回は`SSMMaintenanceWindowPassRole`にします。
入力したら画面右下`ポリシーの作成`ボタンをクリックしてください。

![screencapture-us-east-1-console-aws-amazon-iamv2-home-2023-08-14-11_24_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/7a3b86df-fcb6-8b6a-dc2c-6c9becf295af.png)

作成したIAMポリシーをIAMグループに割り当てます。
IAMのダッシュボード左メニュー`ユーザーグループ`を選択し、`許可を追加`、`ポリシーをアタッチ`をクリックしてください。

![スクリーンショット 2023-08-14 11.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6881bf5b-2a20-9b4b-d620-1b4b58e6acc2.png)

検索窓に`SSMMaintenanceWindowPassRole`と入力し、検索された`SSMMaintenanceWindowPassRole`をチェックしてください。
右下`許可を追加`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 11.56.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6b85c71b-f7e4-3480-6275-4468f1aaedd7.png)

### Creating Maintenance Windows

メンテナンスウィンドウ作成から実行までは以下の手順を実行します。

1. メンテナンスウィンドウを作成し、スケジュールを定義する
2. メンテナンスウィンドウのターゲットを割り当てる
3. メンテナンスウィンドウ中に実行するタスクを割り当てる

### 6.2 Create a Patch Maintenance Window

メンテナンスウィンドウを作成し、スケジュールを定義します。

Systems MangerのTOP画面の左メニュー`メンテナンスウィンドウ`を選択し、右上`Create Maintenance Window`ボタンをクリックします。

![スクリーンショット 2023-08-14 22.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/0ef9aa4a-92ef-3430-baf6-dfeb02705be9.png)

`メンテナンスウィンドウの詳細の入力`セクションの入力です。
`名前`は自由ですが、今回は`PatchTestWorkloadWebServers`とします。
`説明`は今回未入力です。
`未登録ターゲット`は`未登録ターゲットを許可する`をチェックしてください。

![スクリーンショット 2023-08-14 22.59.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/572aac24-a425-5cfc-cce8-f75a93b552dc.png)

`スケジュール`セクションの入力です。今回はハンズオンであるため、なるべく早くメンテナンスウィンドウが実行されるよう設定します。
`次で指定`は`Cronスケジュールビルダー`で`デフォルト`を選択してください。
`期間`は`1`時間を入力してください。
`タスクの開始を停止する`は`0`を入力してください。

![スクリーンショット 2023-08-14 23.14.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/78ff410d-415d-b642-90e2-7ea97af0bebd.png)

入力が終わったら画面最下部の`メンテナンスウィンドウの作成`ボタンをクリックしてください。

### 6.3 Assigning Targets to Your Patch Maintenance Window

続いて、メンテナンスウィンドウにタスクを実行するターゲットを割り当てます。
作成したメンテナンスウィンドウの`ウィンドウID`リンクをクリックしてください。

![スクリーンショット 2023-08-14 23.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/aafcf80e-9138-305d-815b-0261606e233d.png)

メンテナンスウィンドウの詳細画面に遷移します。
右上`アクション`を選択し、`ターゲットの登録`をクリックしてください。

![スクリーンショット 2023-08-14 23.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/d289201e-b472-a6a1-3f5e-f8fe5eb14f93.png)

`Maintenance window target details`セクションの入力です。
`Target name`は任意ですが、今回は`TestWebServers`とします。
`Description`、`Owner Information`は今回未入力です。

![スクリーンショット 2023-08-14 23.21.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/8dd8c235-6fb2-e5dd-6f43-149572ca2c1d.png)

`ターゲット`セクションの入力です。
`ターゲットの選択`は`インスタンスタグを指定`を選択してください。
`インスタンスタグを指定`は`タグキー`が`Workload`、`タグの値`は`Test`にし、`Add`ボタンをクリックしてください。
再度`インスタンスタグを指定`で`タグキー`が`InstanceRole`、`タグの値`は`WebServer`にし、`Add`ボタンをクリックしてください。

![スクリーンショット 2023-08-14 23.25.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/442b0449-b434-3812-b4ab-7e372827096c.png)

入力が終わったら画面最下部の`Register target`ボタンをクリックしてください。

### 6.4 Assigning Tasks to Your Patch Maintenance Window

最後に、メンテナンスウィンドウ中に実行するタスクを割り当てます。
メンテナンスウィンドウの詳細画面右上`アクション`を選択し、`Run Commandタスクの登録`を選択してください。

![スクリーンショット 2023-08-14 23.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/fe59b1f6-62af-5bb5-75c7-30f4f39d5ef6.png)

`メンテナンスウィンドウタスクの詳細`セクションの入力です。
`名前`は任意ですが、今回は`PatchTestWorkloadWebServers`と入力します。
`説明`は未入力、`New task invocation cutoff`はチェックしなくて構いません。

![スクリーンショット 2023-08-14 23.32.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/44550231-fb80-7530-325e-eb1245f0d857.png)

`コマンドドキュメント`セクションの入力です。
`ドキュメント`は検索窓を選択し、`プラットフォームの種類`を`Linux`にしてください。
また、`AWS-RunPatchBaseline`と入力し、エンターキーを押下し、表示された`AWS-RunPatchBaseline`をチェックしてください。
`ドキュメントのバージョン`、`タスクの優先度`はデフォルト値で構いません。

![スクリーンショット 2023-08-14 23.37.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/6905cceb-f429-1f90-7045-d498b1967004.png)

`ターゲット`セクションの入力です。
`次によるターゲット`は`登録済みターゲットグループの選択`を選択してください。
一覧に表示されている作成したグループをチェックしてください。

![スクリーンショット 2023-08-14 23.39.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/e0b5d6dd-221a-8483-227b-376aae447882.png)

`レート制御`セクションの入力です。
`同時実行数`は`ターゲット`で`1`を入力してください。
`エラーのしきい値`は`エラー`で`1`を入力してください。

![スクリーンショット 2023-08-14 23.40.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/aec836de-8867-5a96-555e-b651e4890159.png)

`IAMサービスロール`セクションの入力です。
メンテナンスウィンドウがタスクを実行するために`AmazonSSMMaintenanceWindowRole`ポリシーを持っているIAMロールを指定します。
前手順で作成した、`SSMMaintenanceWindowRole`を指定します。

![スクリーンショット 2023-08-14 23.44.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/f3ebb096-ce06-ff8a-78b1-d71886c8c358.png)

`出力オプション`セクション、`SNS通知`セクションはデフォルト（すべてチェックしない）で構いません。

![スクリーンショット 2023-08-14 23.46.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/31ce61d9-966b-3422-fdff-71139567aa96.png)

`パタメータ`セクションの入力です。
`Operation`は`Install`を選択してください。
それ以外はデフォルトで構いません。

![スクリーンショット 2023-08-14 23.49.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/2b0b7142-601d-ca91-1fe5-545a991d2c4d.png)

続く`CloudWatch alarm`セクションも未選択で構いません。
`Run Commandタスクの登録`ボタンをクリックしてください。

### 6.5 Review Maintenance Window Execution

タスクの実行結果を確認します。
メンテナンスウィンドウの詳細画面に遷移し、`履歴`タブを選択してください。
直近の実行結果をチェックし、`詳細の表示`ボタンをクリックしてください。

![スクリーンショット 2023-08-15 0.15.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/178ddb75-e8b4-60b8-6238-9fe602ad08f7.png)

`タスク呼び出し`セクションでタスクの実行概要を確認できます。
チェックし、`詳細の表示`ボタンをクリックしてください。

![スクリーンショット 2023-08-15 0.17.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/f00c5f97-3200-9c3f-ca90-5570509e97de.png)

`Run Command`機能の画面に遷移し、より詳細な情報を確認することができます。
今回はタスクに失敗してしまいましたが、メンテナンスウィンドウにより、`Run Command`などが自動実行できることがわかりました。

![スクリーンショット 2023-08-15 0.19.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/bd32832a-66ce-94fc-65db-31cb4cd023a2.png)

## Creating a Simple Notification Service Topic

Amazon Simple Notification Service (Amazon SNS)は、クライアントに対するメッセージの配信および送信を管理するフルマネージドメッセージングサービスです。
機能として、`モバイルPUSH通知`、`Pub/Subメッセージング`があります。
`モバイルPUSH通知`機能は、スマートフォンに対して通知ができる機能です。ユーザーのモバイル端末などに直接通知を送信することができます。
`Pub/Subメッセージング`機能は、非同期的はメッセージ配信モデルです。Publisherと呼ばれるメッセージ送信元がSNSで管理しているTopicと呼ばれる論理的アクセスポイントにメッセージを送信します。Subscriberと呼ばれるメッセージ受信者は好きなTopicを購読するよう設定しておくと、Topicからメッセージが配信され、メッセージを受信することができます。

### 6.1 Create and Subscribe to an SNS Topic

Amazon SNSのダッシュボード画面に遷移し、左メニュー`トピック`を選択します。
右上`トピックの作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-16 0.26.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/bd4c3543-09b5-e988-1db2-8146c58b42f5.png)

`詳細`セクションの入力です。
`タイプ`は`スタンダード`を選択してください。
`名前`、`表示名`は`AdminAlert`と入力してください。
それ以外は入力不要です。画面最下部の`トピックの作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-16 0.30.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/43f0b202-0265-4d61-d91e-d043382d94c2.png)

作成したトピックの詳細画面が表示されます。
`サブスクリプション`セクションの`サブスクリプションの作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-16 0.31.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/431b5269-14e3-4fa5-a4c4-3b110945b175.png)

サブスクリプションの情報を入力します。
`トピックARN`はデフォルトの先ほど作成したトピックのARNを指定します。
`プロトコル`は`Eメール`を選択してください。
`エンドポイント`は受信可能なEメールアドレスを入力してください。
入力し終えたら、右下`サブスクリプションの作成`ボタンをクリックしてください。

![スクリーンショット 2023-08-16 0.34.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/5b31c790-0ac4-96e4-1c9c-255a858bb344.png)

`エンドポイント`に指定したEメールアドレスに確認メールが届きます。
リンク`Confirm subscription`をクリックしてください。

![スクリーンショット 2023-08-16 003858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/80589878-dc9d-f100-17dd-8cd79b5dbb40.png)

以下のような画面が表示されたら購読設定完了です。
購読解除する際はリンク`click here to unsubscribe.`をクリックしてください。

![スクリーンショット 2023-08-16 004021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/080eff25-ab11-2f56-3d95-36ddcbb1193c.png)

メッセージが受信できるか確認してみましょう。
トピックの詳細画面に戻り、画面右上`メッセージの発行`ボタンをクリックしてください。

![スクリーンショット 2023-08-16 0.46.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/00c4851f-760a-3e9c-0c33-1160a60a3d5f.png)

送信するメッセージの内容を入力する画面が表示されます。
`件名`は`Test`にしてください。
`メッセージ構造`はデフォルト`すべての配信プロトコルに同一のペイロード。`を選択してください。
`エンドポイントに送信するメッセージ本文`は`Hello World!`にしてください。
入力したら、右下`メッセージの発行`ボタンをクリックしてください。

![screencapture-ap-northeast-1-console-aws-amazon-sns-v3-home-2023-08-16-00_48_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/c7beb0de-f706-dc2d-0f20-808e0fa54134.png)

エンドポイントに指定したEメールアドレスにメッセージが送信されることを確認してください。

![スクリーンショット 2023-08-16 0.52.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545707/994e6f44-9e53-a29e-903a-dc6a93cc3222.png)

## Removing Lab Resources

### 7.1 Remove resources created with CloudFormation

削除するリソースの箇条書き

1. CloudFormationのスタック
2. Systems Managerのステートマネージャーの関連付け
3. S3バケット（`cf-templates-`から始まるバケット）
4. SNSトピック
5. SNSサブスクリプション
6. Systems Managerのメンテナンスウィンドウ
7. EC2 キーペア
8. IAMロール
9. IAMポリシー
10. IAMユーザー（不要なら）

詳細は以下を参照ください。

https://www.wellarchitectedlabs.com/operational-excellence/100_labs/100_inventory_patch_management/8_cleanup/