AWS Systems Manager(SSM) インベントリを使ってインスタンスにインストールされているアプリケーションをチェックする

2021.06.09

はじめに

AWS Systems Manager(SSM) インベントリ はマネージドインスタンスからメタデータを収集して、情報表示する機能です。 OSやアプリケーション、ネットワーク設定などの情報を収集してくれます (メタデータのみ収集します。機密情報や実データへのアクセスは無いです)。

今回はインベントリを使った「インスタンスのアプリケーションインストール状況調査」 の方法を紹介します。

目次

  • セットアップ
  • インスタンスのアプリケーションインストール状況調査
    • マネジメントコンソールから確認
    • AWS CLI から確認
    • (オプション) S3へ保存

セットアップ

前提条件

EC2インスタンスがSSM管理下(マネージドインスタンス)であることが前提条件です。

マネージドインスタンスにする方法については以下ブログ/解説動画が参考になります。

関連付けの作成(インベントリ セットアップ)

インベントリはバックグラウンドで SSM ステートマネージャー を機能させることで 実現しています。

マネコンから 1-Click で この機能を有効化できます。設定方法は以下参照ください。

インベントリ収集の設定 - AWS Systems Manager

マネジメントコンソールから確認

インベントリ > ダッシュボード

ダッシュボードでインスタンスの OS情報やアプリケーション情報の簡単な統計を見ることが出来ます。

img

フリートマネージャー > インベントリ

各インスタンスのアプリケーションインストール状況を見たい場合はフリートマネージャーを見ましょう。

img

[インベントリ] タブからインベントリタイプ AWS:Application とすることで インストールされているアプリケーション一覧を表示できます。

img

検索欄から名前やバージョンでフィルタ可能です。

img

AWS CLI から確認

先程のフリートマネージャーで確認した情報を AWS CLIから確認する方法を紹介します。

ssm list-inventory-entries コマンドを使います。

以下は特定インスタンスに入っているアプリケーション情報 (名前, バージョン, インストール時間)を 10個出力する例です。

aws ssm list-inventory-entries --output table \
--instance-id i-xxx --type-name "AWS:Application" --max-results 10 \
--query "Entries[].[Name, Version, InstalledTime]"

# ↓ 出力例
# -----------------------------------------------------------
# |                  ListInventoryEntries                   |
# +--------------------+-----------+------------------------+
# |  libpwquality      |  1.2.3    |  2017-12-13T05:16:09Z  |
# |  bash              |  4.2.46   |  2017-12-13T05:15:49Z  |
# |  libselinux-python |  2.5      |  2017-12-13T05:16:10Z  |
# |  libselinux        |  2.5      |  2017-12-13T05:15:50Z  |
# |  gettext-libs      |  0.19.8.1 |  2017-12-13T05:16:11Z  |
# |  sed               |  4.2.2    |  2017-12-13T05:15:51Z  |
# |  python-markupsafe |  0.11     |  2017-12-13T05:16:12Z  |
# |  readline          |  6.2      |  2017-12-13T05:15:51Z  |
# |  python2-rsa       |  3.4.1    |  2017-12-13T05:16:14Z  |
# |  pystache          |  0.5.3    |  2017-12-13T05:16:14Z  |
# +--------------------+-----------+------------------------+

特定のアプリケーションの情報を見たいときには --filters オプションを使って フィルタしましょう。以下 特定インスタンスの sudo パッケージの情報を取得する例です。

aws ssm list-inventory-entries --output yaml \
--instance-id i-xxx --type-name "AWS:Application" \
--filters Key=Name,Values=sudo,Type=Equal

# ↓ 出力例
# CaptureTime: '2021-06-08T07:36:36Z'
# Entries:
# - ApplicationType: Applications/System
#   Architecture: x86_64
#   InstalledTime: '2021-03-26T08:56:10Z'
#   Name: sudo
#   PackageId: sudo-1.8.23-10.amzn2.1.src.rpm
#   Publisher: Amazon Linux
#   Release: 10.amzn2.1
#   Summary: Allows restricted root access for specified users
#   URL: http://www.courtesan.com/sudo/
#   Version: 1.8.23
# InstanceId: i-xxx
# SchemaVersion: '1.1'
# TypeName: AWS:Application

フィルタの Type には [NotEqual, BeginWith, Equal, LessThan, GreaterThan, Exists] が使用できます。 KeyAWS:Application の場合は以下値を使えます。

  • Name
  • ApplicationType
  • Publisher
  • Version
  • InstalledTime
  • Architecture
  • URL
  • Release
  • Epoch

(オプション) S3へ保存

「リソースデータの同期」を作成することで S3バケットへインベントリ情報を格納できます。

img

Amazon Athena を使って分析、必要に応じて QuickSight などで可視化することも可能です。

詳細は以下チュートリアルを参照ください。

おわりに

以上、SSMインベントリの活用例でした。 インベントリはEC2インスタンスへ直接入ることなく、各種メタデータを収集してくれる便利機能です。 ぜひ活用してみてください。

インベントリは AWS Config と連携していて、Configルールを活用することで 特定アプリケーションのインストール状況の監視なども可能です。 (参考: 【AWS Config】EC2インスタンスに特定アプリケーションがインストールされているかチェックして通知する | DevelopersIO)

少しでも参考になれば幸いです。

参考