AWS Systems Manager(SSM) インベントリを使ってインスタンスにインストールされているアプリケーションをチェックする
はじめに
AWS Systems Manager(SSM) インベントリ はマネージドインスタンスからメタデータを収集して、情報表示する機能です。 OSやアプリケーション、ネットワーク設定などの情報を収集してくれます (メタデータのみ収集します。機密情報や実データへのアクセスは無いです)。
今回はインベントリを使った「インスタンスのアプリケーションインストール状況調査」 の方法を紹介します。
目次
- セットアップ
- インスタンスのアプリケーションインストール状況調査
- マネジメントコンソールから確認
- AWS CLI から確認
- (オプション) S3へ保存
セットアップ
前提条件
EC2インスタンスがSSM管理下(マネージドインスタンス)であることが前提条件です。
マネージドインスタンスにする方法については以下ブログ/解説動画が参考になります。
- EC2 インスタンスが AWS Systems Manager のマネージドインスタンス一覧に表示されません | DevelopersIO
- マネージドインスタンスを設定してみた #SSM #AWS入門 #AWS Systems Manager #AWSチョットサワル | YouTube
関連付けの作成(インベントリ セットアップ)
インベントリはバックグラウンドで SSM ステートマネージャー を機能させることで 実現しています。
マネコンから 1-Click で この機能を有効化できます。設定方法は以下参照ください。
インベントリ収集の設定 - AWS Systems Manager
マネジメントコンソールから確認
インベントリ > ダッシュボード
ダッシュボードでインスタンスの OS情報やアプリケーション情報の簡単な統計を見ることが出来ます。
フリートマネージャー > インベントリ
各インスタンスのアプリケーションインストール状況を見たい場合はフリートマネージャーを見ましょう。
[インベントリ] タブからインベントリタイプ AWS:Application
とすることで
インストールされているアプリケーション一覧を表示できます。
検索欄から名前やバージョンでフィルタ可能です。
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]
が使用できます。
Key
は AWS:Application
の場合は以下値を使えます。
- Name
- ApplicationType
- Publisher
- Version
- InstalledTime
- Architecture
- URL
- Release
- Epoch
(オプション) S3へ保存
「リソースデータの同期」を作成することで S3バケットへインベントリ情報を格納できます。
Amazon Athena を使って分析、必要に応じて QuickSight などで可視化することも可能です。
詳細は以下チュートリアルを参照ください。
おわりに
以上、SSMインベントリの活用例でした。 インベントリはEC2インスタンスへ直接入ることなく、各種メタデータを収集してくれる便利機能です。 ぜひ活用してみてください。
インベントリは AWS Config と連携していて、Configルールを活用することで 特定アプリケーションのインストール状況の監視なども可能です。 (参考: 【AWS Config】EC2インスタンスに特定アプリケーションがインストールされているかチェックして通知する | DevelopersIO)
少しでも参考になれば幸いです。
参考
- DevelopersIO
- AWS Documents