Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【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日

    View full-size slide

  2. 2
    Copyright © 2022 BTC Corporation All Rights Reserved.
    このセッションを聞いた後の皆さんはきっと・・・
    • AWS SSM Inventoryの使いどころがわかる
    • マルチアカウント構成でのAWS SSM Inventoryの設定方法がわかる
    • 標準インベントリとカスタムインベントリの使い分けがわかる
    • カスタムインベントリの取得方法がわかる

    View full-size slide

  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

    View full-size slide

  4. 4
    Copyright © 2022 BTC Corporation All Rights Reserved.
    構成管理とは

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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  7. 7
    Copyright © 2022 BTC Corporation All Rights Reserved.
    マルチアカウントでのSSM Inventory収集の構成図
    マルチアカウント構成下でのインベントリ収集も可能です。

    View full-size slide

  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つの作業を行うことでマネージドインスタンス化する

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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ファイルの定義

    View full-size slide

  12. 12
    Copyright © 2022 BTC Corporation All Rights Reserved.
    カスタムインベントリの例
    user_defined_attributeが
    インベントリダッシュボードにそのまま表示される

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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ファイルを更新する
    仕組みが必要

    View full-size slide

  16. 16
    Copyright © 2022 BTC Corporation All Rights Reserved.
    マルチアカウントでのカスタムインベントリ収集 構成図
    ① ③

    1. SSMのCustom Documentを作成
    2. カスタムインベントリ情報を保持するJSONファイルを作成するスクリプトを作成
    3. State ManagerでDocumentとスクリプトを定期実行
    ◼ カスタムインベントリ設定手順

    View full-size slide

  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の例

    View full-size slide

  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を実行

    View full-size slide

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

    View full-size slide

  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を作成

    View full-size slide

  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 スクリプト

    View full-size slide

  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を実行
    ゴリゴリ構成情報を取得する
    スクリプトを作る
    ⑦ カスタムインベントリ取得用
    スクリプト作成 • カスタムインベントリ取得用のスクリプトを作成
    カスタムインベントリの導入 カスタムインベントリ取得用のスクリプトの作成

    View full-size slide

  23. 23
    Copyright © 2022 BTC Corporation All Rights Reserved.
    カスタムインベントリの導入 Associationの作成
    パラメーターに先ほど作成したスクリプトを張り付け

    View full-size slide

  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を実行
    ⑦ カスタムインベントリ取得用
    スクリプト作成 • カスタムインベントリ取得用のスクリプトを作成

    View full-size slide

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

    View full-size slide

  26. 26
    Copyright © 2022 BTC Corporation All Rights Reserved.
    終わり
    カンタン?

    View full-size slide

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

    View full-size slide

  28. 28
    Copyright © 2022 BTC Corporation All Rights Reserved.
    Appendix. カスタムインベントリ機能の制約
    AWSも「SSM単体でインベントリのマルチアカウント横断分析が出来る」とは言っていない・・・

    View full-size slide