Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

【JAWS-UG朝会】企業のシステム棚卸業務にSSM Inventoryで挑む カスタムインベ...

kumamatsu
November 09, 2022

【JAWS-UG朝会】企業のシステム棚卸業務にSSM Inventoryで挑む カスタムインベントリの全て

kumamatsu

November 09, 2022
Tweet

More Decks by kumamatsu

Other Decks in Technology

Transcript

  1. 札幌オフィス 〒060-0004 北海道札幌市中央区北4条西6-1 毎日札幌会館9F ベトナムオフィス 7th Floor, Mercury Building, No.444

    Hoang Hoa Tham Street, Thuy Khue ward, Tay Ho District, Hanoi city 西日本オフィス 〒530-0001 大阪府大阪市北区梅田2-2-2 ヒルトンプラザウエストオフィスタワー19F シリコンバレーインキュベーションセンター 3350 Scott Blvd. #29 Santa Clara, CA 95054 東京オフィス(本社) 〒108-0073 東京都港区三田3-13-16 三田43MTビル12F 株式会社ビッグツリーテクノロジー&コンサルティング 企業のシステム棚卸業務にSSM Inventoryで挑む ~カスタムインベントリの全て~ 2022年11月9日
  2. 2 Copyright © 2022 BTC Corporation All Rights Reserved. このセッションを聞いた後の皆さんはきっと・・・

    • AWS SSM Inventoryの使いどころがわかる • マルチアカウント構成でのAWS SSM Inventoryの設定方法がわかる • 標準インベントリとカスタムインベントリの使い分けがわかる • カスタムインベントリの取得方法がわかる
  3. 3 Copyright © 2022 BTC Corporation All Rights Reserved. 自己紹介

    熊谷 有輝子 株式会社ビッグツリーテクノロジー&コンサルティング(BTC) クラウドCoE所属 AWS Top Engineer(2021年~) AWS Ambassador(2022年~) 2016年 化粧品通販会社 コールセンタ・基幹 運用 2018年 当社入社(第二新卒) 特殊鉄板メーカー企業 クラウド基盤構築(AWSの勉強を開始) 2019年 鉄道系企業グループへのクラウド技術支援(初めての内製化支援) 2021年 当社クラウドCoE転属(Azureの勉強を開始) 福利厚生アウトソーシング企業 クラウドCoE運営支援 ↓私の推し 2022年 官公庁 クラウドCoE
  4. 4 Copyright © 2022 BTC Corporation All Rights Reserved. 構成管理とは

    <AWS環境における構成管理方法(CloudFormationのBlackBeltより)> システムを提供、運用するために必要な物理資産(ハードウェアやソフトウェア、ネットワー ク)の状態や文書(運用マニュアル、仕様書)を人が確認できるよう管理すること。 インフラの構成をJSONやYAMLなどのファイルで記述するIaCテンプレートや、事前定義した アプリケーション構成を用いて迅速にアプリケーションのデプロイをする機能を提供するような サービスもあります。 引用:20200826 AWS Black Belt Online Seminar AWS CloudFormation
  5. 5 Copyright © 2022 BTC Corporation All Rights Reserved. SSM

    Inventoryとは • OS上のアプリケーション一覧など、構成情報を記録 • 可視化のための簡易的なダッシュボード機能も提供 • 記録された構成情報はCSVで出力可能 • Athenaでアドホックにクエリを実行して情報の抽出が可能 • 標準インベントリとカスタムインベントリが取得できる ◼ ポイント
  6. 6 Copyright © 2022 BTC Corporation All Rights Reserved. 標準インベントリで取得できる情報

    取得できる情報 詳細 アプリケーション アプリケーションについての情報(アプリケーション名、発行元、バージョン) ※パッケージで管理されているソフトウェアの情報 AWS コンポーネント EC2ドライバー、エージェント、バージョン ファイル 名前、サイズ、バージョン、インストール日、変更及び最新アクセス時間等 パス(C:Program Filesなど)、パターン(*.exe, *.logなど)を指定し、再帰的に抽出できる ネットワーク設定の詳細 ネットワークについての詳細情報 (IPアドレス、MACアドレス、DNS、ゲートウェイ、サブネットマスクなど) Window 更新 Windows Updateに関する情報(Hotfix ID、インストール者、インストール日など) インスタンスの詳細 OS名、OSバージョン、最終起動、DNS、ドメイン、ワークグループ、OSアーキテクチャなど サービス 名前、表示名、ステータス、依存サービス、サービスのタイプ、起動タイプなど タグ インスタンスに割り当てられるタグ Windowsレジストリ レジストリキーのパス、値の名前、値タイプ Windowsロール 名前、表示名、パス、昨日タイプ、インストール日 参考:20200212 AWS Black Belt Online Seminar AWS Systems Manager
  7. 7 Copyright © 2022 BTC Corporation All Rights Reserved. マルチアカウントでのSSM

    Inventory収集の構成図 マルチアカウント構成下でのインベントリ収集も可能です。
  8. 8 Copyright © 2022 BTC Corporation All Rights Reserved. 標準インベントリの導入手順

    ② IAMロールの変更 • IAMロールにAmazonSSMManagedInstanceCoreをアタッチ 内容 取得までの流れ ① SSM Agentのインストール • インベントリを収集するためのエージェントを各EC2にインス トール ③ S3バケットの作成 • インベントリを収集するS3バケットを作る ④ リソースデータの同期 • リソースデータの同期を行う(親アカウント) 凡例 中央アカウント作業 子アカウント作業 ⑤ リソースデータの同期 • リソースデータの同期を行う(子アカウント) ⑥ Associationの作成 • State Managerから、デフォルトのDocumentを実行 マネージドインスタンス化 ※1 インベントリ収集先の設定 インベントリ収集 ※1 マネージドインスタンスとは 標準インベントリの集約はとてもカンタンです。 Systems Managerで何等かの操作が出来る状態になったEC2やオンプレミスのサーバのこと (i)SSMエージェントのインストール、 (ii)SSM APIが実行できるネットワーク経路の設定、 (iii)EC2のIAMロールの設定 という3つの作業を行うことでマネージドインスタンス化する
  9. 9 Copyright © 2022 BTC Corporation All Rights Reserved. リソースデータの同期とは

    リソース同期設定をすることで、マネージドインスタンスのインベントリ情報をS3バケット に集約できます。
  10. 10 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリで取得できる情報

    カスタムインベントリにより、ハードウェアの情報、パッケージで管理されていないミドル ウェアの情報や、オープンソースのAPIの利用有無、OS上のファイルの情報等が収集できます。 ◼ カスタムインベントリで取得できる情報(例) ✓ オンプレミスサーバのサーバーラック位置に関する情報 ✓ WindowsにインストールしたMySQL、PostgreなどのDBエンジンのバージョン ✓ Log4jなどのオープンソースのAPIの利用有無 ✓ 特定のファイルの記載事項
  11. 11 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリを収集するために必要な仕込み作業

    OS パス Linux /var/lib/amazon/ssm/node-id/inventory/custom macOS /opt/aws/ssm/data/node-id/inventory/custom Windows %SystemDrive%¥ProgramData¥Amazon¥SSM¥Instanc eData¥node-id¥inventory¥custom 所定のファイルパス配下に、カスタムインベントリとして収集したい情報を記載したJSON ファイルを配置する。ファイル名は「.json」とする。 { "SchemaVersion": "user_defined", "TypeName": "Custom:user_defined", "Content": { "user_defined_attribute1": "user_defined_value1", "user_defined_attribute2": "user_defined_value2", "user_defined_attribute3": "user_defined_value3", "user_defined_attribute4": "user_defined_value4" } } カスタムインベントリ情報を収集するための JSONファイルの配置場所 JSONファイルの定義
  12. 12 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリの例

    user_defined_attributeが インベントリダッシュボードにそのまま表示される
  13. 13 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリで取得できる情報(改)

    カスタムインベントリにより、ハードウェアの情報、パッケージで管理されていないミドル ウェアの情報や、オープンソースのAPIの利用有無、OS上のファイルの情報等が収集できます。 マネージドインスタンスに配置したJSONファイルの情報を カスタムインベントリとして収集できます カンタン!
  14. 14 Copyright © 2022 BTC Corporation All Rights Reserved. 構成管理とは(再掲)

    システムを提供、運用するために必要な物理資産(ハードウェアやソフトウェア、ネットワー ク)の状態や文書(運用マニュアル、仕様書)を人が確認できるよう管理すること。 JSONファイルを一度作れば終わりか?
  15. 15 Copyright © 2022 BTC Corporation All Rights Reserved. JSONファイルの情報は定期的に更新しなくてはならない

    ハードウェア、ソフトウェアの状態を管理するためには、定期的に状態をチェックし、JSON ファイルを更新しなくてはいけません。 JSON EC2 2022年11月9日 ディスクサイズ 30GB { "SchemaVersion": “1.0", "TypeName": "Custom:DiskUtilization", "Content": { “DeviceId": “C:", “VolumeName": "", “Use%": “58", “Size(GB)": “30" } } ディスク使用率 58% EC2 2023年11月9日 ディスクサイズ 50GB ディスク使用率 70% JSON { "SchemaVersion": “1.0", "TypeName": "Custom:DiskUtilization", "Content": { “DeviceId": “C:", “VolumeName": "", “Use%": “70", “Size(GB)": “50" } } 1年後 ディスクサイズの増加、 使用率変化 サーバの状態を定期的にチェックして、JSONファイルを更新する 仕組みが必要
  16. 16 Copyright © 2022 BTC Corporation All Rights Reserved. マルチアカウントでのカスタムインベントリ収集

    構成図 ① ③ ② 1. SSMのCustom Documentを作成 2. カスタムインベントリ情報を保持するJSONファイルを作成するスクリプトを作成 3. State ManagerでDocumentとスクリプトを定期実行 ◼ カスタムインベントリ設定手順
  17. 17 Copyright © 2022 BTC Corporation All Rights Reserved. SSM

    State Managerを用いた構成管理 • “定義された状態にサーバを保つプロセスを自動化”するAWSサービス • サーバの状態を確認、是正するための定期的な処理に向く • 事前に定義したスクリプト(PowerShell/Linux Shell)を所定の時間に実行 • スクリプトはSSM Documentとして管理(事前定義&AWSに保管)できる • SSM Inventoryはデフォルト定義された「AWS-GatherSoftwareInventory」が実行さ れている ◼ ポイント State ManagerとSSM Documentの例
  18. 18 Copyright © 2022 BTC Corporation All Rights Reserved. 標準インベントリとカスタムインベントリの導入手順の違い

    ② IAMロールの変更 • IAMロールにAmazonSSMManagedInstanceCoreをアタッチ 内容 取得までの流れ ① SSM Agentのインストール • インベントリを収集するためのエージェントを各EC2にインストール ③ S3バケットの作成 • インベントリを収集するS3バケットを作る ④ リソースデータの同期 • リソースデータの同期を行う(親アカウント) 凡例 カスタムインベントリ収集 の為の作業 標準インベントリ収集 の為の作業 ⑤ リソースデータの同期 • リソースデータの同期を行う(子アカウント) ⑥ SSM Documentの作成 • Get-InventoryのSSM Documentから、カスタムインベントリ取得用に Custom Documentを作成 ⑦ カスタムインベントリ取得用 スクリプト作成 • カスタムインベントリ取得用のスクリプトを作成 ⑧ Associationの作成 • State Managerから、⑥で作成したCustom Documentを実行
  19. 19 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリの導入

    SSM Custom Documentの作成 標準インベントリ取得用 デフォルトDocument カスタムインベントリ取得用 Custom Document 同じアクション 追加のアクション
  20. 20 Copyright © 2022 BTC Corporation All Rights Reserved. ②

    IAMロールの変更 • IAMロールにAmazonSSMManagedInstanceCoreをアタッチ 内容 取得までの流れ ① SSM Agentのインストール • インベントリを収集するためのエージェントを各EC2にインストール ③ S3バケットの作成 • インベントリを収集するS3バケットを作る ④ リソースデータの同期 • リソースデータの同期を行う(親アカウント) 凡例 カスタムインベントリ収集 の為の作業 標準インベントリ収集 の為の作業 ⑤ リソースデータの同期 • リソースデータの同期を行う(子アカウント) ⑥ SSM Documentの作成 • Get-InventoryのSSM Documentから、カスタムインベントリ取得用に Custom Documentを作成 ⑦ カスタムインベントリ取得用 スクリプト作成 • カスタムインベントリ取得用のスクリプトを作成 ⑧ Associationの作成 • State Managerから、⑥で作成したCustom Documentを実行 カスタムインベントリの導入 SSM Custom Documentの作成 マネージドインスタンスに対して スクリプトを実行できる Documentを作成
  21. 21 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリの導入

    カスタムインベントリ取得用のスクリプトの作成 if [ "$(curl -sL -w '%{http_code}' 169.254.169.254/latest/meta-data/instance-id -o /dev/null)" = "200" ]; then instanceId=$(curl 169.254.169.254/latest/meta-data/instance-id) inventoryPath=(/var/lib/amazon/ssm/$instanceId/inventory/custom) else hybridDirectory=$(find /var/lib/amazon/ssm -name "mi-*") inventoryPath=($hybridDirectory/inventory/custom) fi printf '{"SchemaVersion":"1.0","TypeName":"Custom:Log4J","Content":[' > $inventoryPath/CustomLog4J.json for jarPath in $(grep -r --include *.[wj]ar "JndiLookup.class" / 2>&1 | grep matches | sed -e 's/Binary file //' -e 's/ matches//'); do printf '%s' $SPLITTER >> $inventoryPath/CustomLog4J.json SPLITTER="," printf '{"Filename":"%s","Path":"%s"}' $(basename $jarPath) $jarPath >> $inventoryPath/CustomLog4J.json done printf ']}¥n' >> $inventoryPath/CustomLog4J.json log4jを利用しているかどうかをインベントリ項目として収集するためのShell スクリプト 1. カスタムインベントリとして収集したい構成情報を取得 2. 形式通りにJSONファイルを作成 3. 所定のフォルダ/ディレクトリ配下に配置 ◼ スクリプトの内容 $data = get-wmiobject win32_logicaldisk | Select-Object @{n="DeviceId";e={$_."DeviceID"}}, @{n="VolumeName";e={$_."VolumeName"}}, @{n="Use%";e={"{0}" -f [math]::Round(($_."Size" - $_."FreeSpace") * 100 / $_."Size",0)}}, @{n="Size(GB)";e={"{0}" -f [math]::Round($_."Size" / 1GB ,0)}} | ConvertTo-Json $content = "{`"SchemaVersion`" : `"1.0`", `"TypeName`": `"Custom:DiskUtilization`", `"Content`": $data}" $instanceId = Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/instance-id $filepath = "C:¥ProgramData¥Amazon¥SSM¥InstanceData¥" + $instanceId + "¥inventory¥custom¥CustomDiskUsage.json" if (-NOT (Test-Path $filepath)) { New-Item $filepath -ItemType file } Set-Content -Path $filepath -Value $content ディスク使用率をインベントリ項目として収集するためのPowerShell スクリプト
  22. 22 Copyright © 2022 BTC Corporation All Rights Reserved. ②

    IAMロールの変更 • IAMロールにAmazonSSMManagedInstanceCoreをアタッチ 内容 取得までの流れ ① SSM Agentのインストール • インベントリを収集するためのエージェントを各EC2にインストール ③ S3バケットの作成 • インベントリを収集するS3バケットを作る ④ リソースデータの同期 • リソースデータの同期を行う(親アカウント) 凡例 カスタムインベントリ収集 の為の作業 標準インベントリ収集 の為の作業 ⑤ リソースデータの同期 • リソースデータの同期を行う(子アカウント) ⑥ SSM Documentの作成 • Get-InventoryのSSM Documentから、カスタムインベントリ取得用に Custom Documentを作成 ⑧ Associationの作成 • State Managerから、⑥で作成したCustom Documentを実行 ゴリゴリ構成情報を取得する スクリプトを作る ⑦ カスタムインベントリ取得用 スクリプト作成 • カスタムインベントリ取得用のスクリプトを作成 カスタムインベントリの導入 カスタムインベントリ取得用のスクリプトの作成
  23. 23 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリの導入

    Associationの作成 パラメーターに先ほど作成したスクリプトを張り付け
  24. 24 Copyright © 2022 BTC Corporation All Rights Reserved. ②

    IAMロールの変更 • IAMロールにAmazonSSMManagedInstanceCoreをアタッチ 内容 取得までの流れ ① SSM Agentのインストール • インベントリを収集するためのエージェントを各EC2にインストール ③ S3バケットの作成 • インベントリを収集するS3バケットを作る ④ リソースデータの同期 • リソースデータの同期を行う(親アカウント) 凡例 カスタムインベントリ収集 の為の作業 標準インベントリ収集 の為の作業 ⑤ リソースデータの同期 • リソースデータの同期を行う(子アカウント) ⑥ SSM Documentの作成 • Get-InventoryのSSM Documentから、カスタムインベントリ取得用に Custom Documentを作成 実は標準インベントリ取得 用のアクションと、作成し たスクリプトを実行してい るだけ カスタムインベントリの導入 カスタムインベントリ取得用のスクリプトの作成 ⑧ Associationの作成 • State Managerから、⑥で作成したCustom Documentを実行 ⑦ カスタムインベントリ取得用 スクリプト作成 • カスタムインベントリ取得用のスクリプトを作成
  25. 25 Copyright © 2022 BTC Corporation All Rights Reserved. カスタムインベントリで取得できる情報(改)

    カスタムインベントリにより、ハードウェアの情報、パッケージで管理されていないミドル ウェアの情報や、オープンソースのAPIの利用有無、OS上のファイルの情報等が収集できます。 マネージドインスタンスに配置したJSONファイルの情報を カスタムインベントリとして収集できます スクリプト作成スキル次第でなんでも取得できます
  26. 27 Copyright © 2022 BTC Corporation All Rights Reserved. Appendix.

    カスタムインベントリ機能の制約 Systems Managerのインベントリ管理ダッシュボードでは、 同一アカウント内に保持したカスタムインベントリのみが閲覧できる ⇒子アカウントのシステム側のカスタムインベントリを 親アカウントで閲覧することはできない Athenaでクエリを実行すると確認できる AWSで子アカウントのカスタムインベントリを中央アカウントで確認する場合は、Systems Managerではなく Athenaで確認する必要があります。
  27. 28 Copyright © 2022 BTC Corporation All Rights Reserved. Appendix.

    カスタムインベントリ機能の制約 AWSも「SSM単体でインベントリのマルチアカウント横断分析が出来る」とは言っていない・・・