継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

【AWS】Amazon Linux初回起動時の自動セキュリティアップデートの痕跡を探せ

タダです。

小ネタなんですが、Amazon Linuxでは、初回起動時に自動セキュリティアップデートが実行されています。

Amazon Linux AMI には、必須ではないにもかかわらずインスタンス上にインストールされるパッケージの数を減らせるという利点もあります。このことは、潜在的なセキュリティ脆弱性を抑えるのにつながります。深刻度が「緊急」または「重要」のセキュリティアップデートは、AMI の初回起動時に自動的に適用されます。

この自動セキュリティアップデートはちゃんと実行されたのかをログから探すというのが今回の目的です。

構成は?

OSが、『Amazon Linux AMI 2016.03.0』のものになります。
それ以外は、ネットワークはグローバルからアクセスできるようにして、ストレージはデフォルトのままにします。そして、ローカルPCからのSSHを許可したセキュリティグループを準備しました。
それでは、EC2が起動した後、自動セキュリティアップデートが行われたかを確認していきます。

EC2ログイン後の確認

ネットの情報を見ると、自動セキュリティアップデートはcloud-initで実行されているようです。
「/etc/cloud/cloud.cfg」を見てみると、

at /etc/cloud/cloud.cfg
# WARNING: Modifications to this file may be overridden by files in
# /etc/cloud/cloud.cfg.d

# If this is set, 'root' will not be able to ssh in and they
# will get a message to login instead as the default user (ec2-user)
disable_root: true

# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true

datasource_list: [ Ec2, None ]

repo_upgrade: security ← この行で実行を定義しています
repo_upgrade_exclude:
 - kernel
 - nvidia*
 - cudatoolkit

mounts:
 - [ ephemeral0, /media/ephemeral0 ]
 - [ swap, none, swap, sw, "0", "0" ]
# vim:syntax=yaml


cloud-initで実行されているのを確認する方法は、2つあります。
1つは、「/var/log/cloud-init.log」です。これはcloud-initのモジュールが実行された結果が出力されています。
2つは、「 /var/log/cloud-init-output.log」です。これはcloud-initで実行されたコマンド結果などが出力されています。

まずは、前者から確認したいと思います。以下は、ログの抜粋部分ですが、「/etc/cloud/cloud.cfg」にて指定があった「repo_upgrade: security」の条件でUpgradeされているようです。
また、「repo_upgrade_exclude」で除外指定されているパッケージが実行した、「'--exclude=kernel', '--exclude=nvidia*', '--exclude=cudatoolkit'」と一致するため自動セキュリティアップデートは実行されたようです。

cloud-init[2305]: amazon.py[DEBUG]: Upgrade level: security
cloud-init[2305]: util.py[DEBUG]: Running command ['yum', '-t', '-y', '--exclude=kernel', '--exclude=nvidia*', '--exclude=cudatoolkit', '--security', '--sec-severity=critical', '--sec-severity=important', 'upgrade'] with allowed return codes [0] (shell=False, capture=False)


次に、後者にて確認します。こちらも抜粋になりますが、今回はUpgradeの対象が1パッケージと依存関係で1パッケージがインストールされています。
最終的に、「Updated:」の一覧で記載されたパッケージがセキュリティアップデートの結果部分となります。

Dependency Installed:
  libXcomposite.x86_64 0:0.4.3-4.6.amzn1

Updated:
  java-1.7.0-openjdk.x86_64 1:1.7.0.99-2.6.5.0.66.amzn1

Complete!


最後に、1つAWSとは関係なくLinux全般で使われる方法を紹介します。
自動セキュリティアップデートは、yumコマンドで実行されているため、「yum history」を実行して確認する方法です。
以下が実行した結果です。ID1が初回実行なので、この情報をより詳しく確認したいところです。

# yum history
読み込んだプラグイン:priorities, update-motd, upgrade-helper
ID     | ログイン ユーザー        | 日時             | 操作           | 変更
-------------------------------------------------------------------------------
     3 | EC2 ... <ec2-user>       | 2016-03-31 08:18 | Install        |    4
     2 | EC2 ... <ec2-user>       | 2016-03-31 08:17 | Update         |    4
     1 | システム <未設定>        | 2016-03-31 08:14 | I, U           |    2
history list

その時は、「yum history info ID番号」にて確認することができます。
以下が実行結果の内容です。おぉ、コマンドラインで指定されているオプションやパッケージの内容もcloud-initのログで確認した通りです。この方がコマンド実行結果を詳細に確認できて良いと言えますね。

# yum history info 1
読み込んだプラグイン:priorities, update-motd, upgrade-helper
トランザクション ID : 1
開始時間            : Thu Mar 31 08:14:09 2016
開始 rpmdb          : 383:450fb34b7b540f9d5f4633973588dd1f151b2a38
終了時間            :            08:14:12 2016 (3 秒)
終了 rpmdb          : 384:d1d01747aee41af0e65d92002637e6a167cc2256
ユーザー            : システム <未設定>
終了コード          : 成功
コマンドライン      : -t -y --exclude=kernel --exclude=nvidia* --exclude=cudatoolkit --security --sec-severity=critical --sec-severity=important upgrade
トランザクションの実行:
    インストール rpm-4.11.2-2.73.amzn1.x86_64  installed
    インストール yum-3.4.3-137.65.amzn1.noarch installed
切り替えたパッケージ:
    更新     java-1.7.0-openjdk-1:1.7.0.95-2.6.4.0.65.amzn1.x86_64 @?amzn-main
    更新                        1:1.7.0.99-2.6.5.0.66.amzn1.x86_64 @amzn-updates
    依存インストール libXcomposite-0.4.3-4.6.amzn1.x86_64                  @amzn-main
history info

まとめ

今回は、自動セキュリティアップデートの実行結果を確認する方法をまとめました。
自動で走っているとはいえ確認する方法を知れたのはAWS扱っている身としては勉強になりました。