この記事でわかること
▪️パッチポリシーのスキャン成功と失敗の違い
▪️EC2インスタンスのスキャン実行時に、システム内部でどのような処理が行われるのか
ご注意
画像は設定手順をイメージしやすくするための参考です。
細部の仕様や正確性についてはAWS公式ドキュメントをご確認ください。
また、一部個人情報などを削除しています。
事前準備
▪️EC2インスタンスのOS: Ubuntu 24.04
▪️IAMロール: スキャン実行権限のIAMポリシーなし
▪️SSMエージェント: 最新版をインストール済み
スキャン成功と失敗の違い
スキャンの成功・失敗は、主に EC2インスタンスにアタッチされたIAMロールの設定と
パッチポリシーの適用状態によって分かれます。
本記事では、成功・失敗の2つのケースを比較し、
どのようなフローで成功・失敗が決まるのかを解説します。
フローの確認方法
▪️以下の操作を行います。
▫️AWS Management Console にサインインします。
▫️Systems Manager のコンソールを開きます。
▫️左のナビゲーションペインから 「高速セットアップ」 を選択します。
▫️スキャンを実行したパッチポリシーを選択し、「詳細を表示」を押下します。
▫️AWS-QuickSetup-PatchPolicy-AttachIAMToEc2Instance-タグ名を押下します。
▫️ドキュメント名下のAWS-QuickSetup-PatchPolicy-
AttachIAMToEc2Instance-タグ名を押下します。
成功パターン(IAMロールあり + 設定④ ☑︎あり)
青①インスタンスタイプの分岐 (branchOnInstanceType)
▪️目的:
処理を開始するために、指定されたEC2インスタンスが
正しい形式(IDが "i-" で始まる)かを確認します。
▪️動作:
インスタンスIDが正しい場合、次のステップに進みます。
青② 既存ロール名の取得 (getExistingRoleName)
▪️目的:
EC2インスタンスに関連付けられているIAMロールを確認します。
▪️動作:
スクリプトを使って、インスタンスのプロファイル情報を取得します。
IAMロールが存在する場合はその名前を返し、
存在しない場合は NoRoleFound を返します。
青③ロールの存在チェック (branchIfProfileExists)
▪️目的:
インスタンスにIAMロールがすでに関連付けられているかを確認します。
▪️動作:
IAMロールが存在しない場合、次のステップに進みます。
存在する場合は別のフローに進みます。
青④ポリシーの付与確認 (checkIfPolicyAttachAllowed)
超重要ポイント!スキャン成功・失敗の分かれ目!
▪️目的:
IAMロールにスキャンに必要なポリシーが追加可能かを確認
▪️動作:
設定④の☑︎がある場合、スキャン処理が継続
次のステップに進みます。
青⑤インスタンスプロファイルからロールの取得 (getRoleFromInstanceProfile)
▪️目的:
インスタンスプロファイルに関連付けられたIAMロールの情報を取得します。
▪️動作:
IAMのAPIを使ってインスタンスプロファイルの詳細を取得します。
青⑥必要なポリシーのアタッチ (attachBaselineOverridePolicyToExistingRole)
▪️目的:
IAMロールにスキャン時に必要な AWSQuickSetupPatchPolicyBaselineAccess
ポリシーをアタッチします。
▪️動作:
パッチベースライン情報の保存先S3バケットにアクセスする権限を付与します。
パッチポリシーアクセスログ保存用S3バケットにアクセスできるように設定します。
※補足_パッチスキャン時、以下のS3バケット(aws-quicksetup-patchpolicy-アカウント-ID)
が自動生成されます。それを読み取る権限が付与されます。
▫️パッチベースライン情報の保存用S3バケット:
パッチスキャン時に使用するパッチベースラインに関連する情報を保存します。
▫️パッチポリシーアクセスログ保存先S3バケット:
ベースライン情報保存用S3バケットに対する、
アクセスのリクエストをログ記録します。
※補足_ベースライン
インスタンスにパッチ適用を行う際のルールを定義するものです。
青⑦AmazonSSMポリシーのアタッチ (attachAmazonSSMManagedInstanceCoreToExistingRole)
▪️目的:
SSMでの管理に必要なポリシーをIAMロールに追加します。
▪️動作:
ポリシー AmazonSSMManagedInstanceCore をIAMロールにアタッチします。
青⑧タグの追加 (attachTagToExistingRole)
このタグが無いと自動作成されたSバケットを読み取れません
バケットポリシーでタグが無い場合、アクセス拒否設定になっているからです
▪️目的:
パッチスキャン対象のIAMロールにタグを付与します。
▪️動作:
S3バケットポリシーでは タグがないIAMロールのアクセスを拒否 するため、タグを追加します。
指定されたキーと値のペア(例: QSConfigId-vkjik)をIAMロールにタグ付けします。
この設定がすべて正しく行われている場合、スキャンが成功します。
失敗パターン(IAMロールあり + 設定④ ☑︎なし)
青④ポリシーの付与確認 (checkIfPolicyAttachAllowed)
☑︎がないため、ポリシーの追加が拒否されます。
緑⑤新しいIAMロールの作成 (createRoleIfNotExists)
▪️目的:
必要に応じて、新しい IAM ロールを作成します。
▪️動作:
AmazonSSMRoleForInstancesQuickSetup ロールの付与
役割: EC2 インスタンスが Systems Manager を利用できるようになります。
緑⑥IAMロールの存在確認 (assertRoleForInstanceProfileExists)
▪️目的:
作成したIAMロールが正しく存在するかを確認。
▪️動作:
作成されたIAMロール名が正しいことを検証します。
緑ポリシーのアタッチ (attachBaselineOverridePolicyToRole)
▪️目的:
IAM ロールに必要なポリシーを付与します。
▪️動作:
AWSQuickSetupPatchPolicyBaselineAccessポリシー
役割: パッチスキャンやクイックセットアップ機能を実行する権限を付与。
緑⑧タグの付与 (attachTagToRole)
▪️目的:
IAMロールに特定のタグを追加して管理しやすくする。
▪️動作:
ロールに「QSConfigId-vkjik」というタグを付与します。
緑⑨基本ポリシーの付与 (attachAmazonSSMManagedInstanceCoreToRole)
▪️目的:
IAMロールにSSMで必要な基本ポリシーを付与。
▪️動作:
AmazonSSMManagedInstanceCoreというポリシーをロールに追加。
緑⑩ IAMロールのインスタンスへの割り当て (executeAttachIAMToInstance)
▪️目的:
作成したIAMロールを指定のEC2インスタンスに割り当て。
▪️動作:
AWSが提供する自動化ドキュメント(AWS-AttachIAMToInstance)を使用して、
インスタンスにIAMロールを適用します。
失敗の原因
RuntimeParameters
{
"AutomationAssumeRole": "{{ AutomationAssumeRole }}",
"RoleName": "AmazonSSMRoleForInstancesQuickSetup",
"InstanceId": "{{ InstanceId }}",
"ForceReplace": false
上記のポリシーが緑⑩executeAttachIAMToInstance項目に設定されています。
ForceReplace": false という設定
IAM ロールを EC2 インスタンスに関連付けるときの「上書き動作」を制御するものです。
もしインスタンスに既に他の IAM ロールが関連付けられている場合、
新しいロールを強制的に割り当てません。(false )
以下ので確認してます。
▫️青②既存ロール名の取得 (ステップ: getExistingRoleName)
▫️青③ロールの存在チェック (ステップ: branchIfProfileExists)
既存の設定をそのまま保持し、新しいロールを割り当てる操作はスキップします。
この場合、AmazonSSMRoleForInstancesQuickSetupロールの付与されず、
EC2インスタンスが Systems Manager を利用できませんので、失敗します。
ロールがない場合、AmazonSSMRoleForInstancesQuickSetupが
EC2インスタンスに関連付けられ、スキャンが成功します。
対象読者
▪️AWS資格試験の合格に向けて勉強中の方
▪️パッチポリシーのスキャン成功/失敗の違いを学びたい方
参考文献
この記事を書いた理由
これまで以下のAWS資格を取得し、2024年12月から2社目のIT会社に転職成功。
今はAWSを活用したシステム構築の支援業務を行なっています。
本記事は、業務で行った内容の復習とアウトプットを兼ねて作成しました。
AWSの具体的な設定手順を学びたい方に少しでも役立てば幸いです。
既に合格済のAWS資格
2024年04月11日「AWS Certified Cloud Practitioner(CLF)」
2024年06月27日「AWS Certified Solutions Architect - Associate(SAA)」
2024年08月13日「AWS Certified Sysops Administrator - Associate (SysOps)」
2024年11月19日「AWS Certified Solutions Architect - Professional (SAP)」