RedHat_Insights_Inside

C5fb840ed173bd016d543163af340d91?s=47 OMO
September 24, 2019

 RedHat_Insights_Inside

18:00ー19:00:ディープなTechセッション
Insightsの中身をもう少しだけ詳しく見てみる
https://connpass.com/event/143809/

C5fb840ed173bd016d543163af340d91?s=128

OMO

September 24, 2019
Tweet

Transcript

  1. RHEL 8 Red Hat Insights Tech Seminar Insights Tips OSSセキュリティ技術の会 面 和毅

  2. じゃあ、結局Insightsって何者よ? 登場人物 ・Insights-Client ・Insights-Engine ・Plugins ・Insights Customer Interface

  3. Insightsの構成要素(All Python) (注:「フレームワーク」は OSSです。。。

  4. Insights Client

  5. Insights Client 中身を知るにはインストールしてみませう 2つ必要、なんで? https://github.com/RedHatInsights/insights-client https://github.com/RedHatInsights/insights-core 2つから出来ている ・Wrapper ・Egg

  6. Insights Client (Wrapper) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 直接動くのはこの人たち https://github.com/RedHatInsights/insights-client

  7. Insights Client (Egg) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 実際の”Core”はこの人たち https://github.com/RedHatInsights/insights-core/insights/client /etc/insights-client/rpm.egg ./EGG-INFO/dependency_links.txt

    ./EGG-INFO/entry_points.txt ./EGG-INFO/PKG-INFO ./EGG-INFO/requires.txt ./EGG-INFO/SOURCES.txt ./EGG-INFO/top_level.txt ./insights/client/archive.py ./insights/client/auto_config.py ./insights/client/cert_auth.py ./insights/client/client.py ./insights/client/collection_rules.py ./insights/client/compressed_file.py ./insights/client/config.py ./insights/client/connection.py ./insights/client/constants.py ・・・・・など
  8. Insights Client (動作のPhase) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 各Phaseに分けて動作 ・pre_update ----> 接続前の設定確認・疎通確認、

    etc. ・update -----> Insightsサーバと接続 ・post_update ---> 事後処理(登録情報・offline確認等) ・collect_and_output ---> 実際の情報収集行為 /etc/insights-client/rpm.egg
  9. Insights Client (pre_update) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 各Phaseに分けて動作 ・pre_update ----> 接続前の設定確認・疎通確認、

    etc. /etc/insights-client/rpm.egg --- if config.validate: if validate_remove_file(config.remove_file): --- if config.test_connection: logger.info("Running Connection Tests...") rc = client.test_connection() /etc/insights-client/insights-client.conf ---略--- # Timeout for HTTP calls, in seconds #http_timeout=10 疎通確認(”http_timeout値”タイムアウト)
  10. Insights Client (動作のPhase) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 各Phaseに分けて動作 ・pre_update ----> 接続前の設定確認・疎通確認、

    etc. ・update -----> Insightsサーバと接続 ・post_update ---> 事後処理(登録情報・offline確認等) ・collect_and_output ---> 実際の情報収集行為 /etc/insights-client/rpm.egg
  11. Insights Client (update) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/rpm.egg Uploader.jsonに更新があればダウンロード { "commands": [

    { "command": "python -m insights.tools.cat --no-header aws_instance_type", "pattern": [], "symbolic_name": "aws_instance_type" }, { "command": "python -m insights.tools.cat --no-header azure_instance_type", "pattern": [], "symbolic_name": "azure_instance_type" }, ・・・etc. Uploader.jsonの更新を確認
  12. Insights Client (参考) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ remove.conf /etc/insights-client/rpm.egg Uploader.jsonをダウンロードして実行 (中身を見れば、どの情報が取られるかわかる)

    { "commands": [ { "command": "python -m insights.tools.cat --no-header aws_instance_type", "pattern": [], "symbolic_name": "aws_instance_type" }, { "command": "python -m insights.tools.cat --no-header azure_instance_type", "pattern": [], "symbolic_name": "azure_instance_type" }, ・・・etc. 収集されたくない情報を指定 (処理自体はpre-update時)
  13. Insights Client (動作のPhase) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 各Phaseに分けて動作 ・pre_update ----> 接続前の設定確認・疎通確認、

    etc. ・update -----> Insightsサーバと接続 ・post_update ---> 事後処理(登録情報・offline確認等) ・collect_and_output ---> 実際の情報収集行為 /etc/insights-client/rpm.egg
  14. Insights Client (post_update) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/rpm.egg 登録情報を確認 表示名を確認 モード(offline)を確認

  15. Insights Client (動作のPhase) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ 各Phaseに分けて動作 ・pre_update ----> 接続前の設定確認・疎通確認、

    etc. ・update -----> Insightsサーバと接続 ・post_update ---> 事後処理(登録情報・offline確認等) ・collect_and_output ---> 実際の情報収集行為 /etc/insights-client/rpm.egg
  16. Insights Client (collect_and_output) /usr/bin/insights-client /usr/bin/insights-client-run /etc/insights-client/ /etc/insights-client/rpm.egg HTTPS アップロード (PUT)

    insights-core/insights/client/connection.py ------------------------ """ Module handling HTTP Requests and Connection Diagnostics """ from __future__ import print_function from __future__ import absolute_import import requests import os -------------- Do an HTTPS upload of the archive ''' file_name = os.path.basename(data_collected) try: from insights.contrib import magic m = magic.open(magic.MAGIC_MIME) m.load() mime_type = m.file(data_collected) except ImportError: magic = None logger.debug('python-magic not installed, using backup function...') from .utilities import magic_plan_b mime_type = magic_plan_b(data_collected) files = { 'file': (file_name, open(data_collected, 'rb'), mime_type)} if self.config.analyze_container: logger.debug('Uploading container, image, mountpoint or tarfile.') upload_url = self.upload_url else: logger.debug('Uploading a host.') upload_url = self.upload_url + '/' + generate_machine_id() logger.debug("Uploading %s to %s", data_collected, upload_url) headers = {'x-rh-collection-time': str(duration)} net_logger.info("POST %s", upload_url)
  17. Insights Client (何を送っているか) [root@fc30 ~]# insights-client --offline Starting to collect

    Insights data for fc30.localdomain Archive saved at /var/tmp/qybk6le2/insights-fc30.localdomain-20190812050718.tar.gz [root@fc30 insights-fc30.localdomain-20190812050718]# ls -F boot/ display_name insights_commands/ run/ usr/ branch_info etc/ proc/ sys/ version_info オフラインモードでinsights-clientを動作させる(--offline)
  18. Insights Client (pyreverse)

  19. Insights Engine (core)

  20. Insightsの構成要素(All Python) (注:「フレームワーク」は OSSです。。。

  21. Insights Engine(Core) は何をやってるの? Insights Engine(Core) Plugin達 真中にいてハブの役割をしています 解析 収集 表示

  22. Insights Plugins (core)

  23. Insightsの構成要素(All Python)

  24. Insightsの構成要素(All Python) Pluginには3種類 ・Parser ・Combiner ・Rule

  25. Insights Plugins (Parser) Rawデータ Parser ファイル ファイル ファイル ファイル コマンド出力

    コマンド出力 コマンド出力 コマンド出力 一定の形(Object) 一定の形(Object) 一定の形(Object) 一定の形(Object) 一定の形(Object) 一定の形(Object) 一定の形(Object) 一定の形(Object) 種々のParserを使って、様々なファイル/出力形式を変換します。
  26. Insights Plugins (Parser) Rawデータ Mount Entries

  27. Insights Plugins (Parser) Rawデータ Fstab-files

  28. Insights Plugins (Combiner) Combiner /etc/redhat-release uname -a メジャーリリース番号 同様の情報を持つものから、条件に従い情報を統合します。 マイナーリリース番号

    一定の条件に従い 情報を比較して統合する
  29. Insights Plugins (Rule) Combinedされた情報 集まった情報から分析を行います(ココがキモ)。 一定の形(Object) 一定の形(Object) 一定の形(Object) 一定の形(Object) Combinedされた情報

    Combinedされた情報 Combinedされた情報 結果のレポート 解決方法 一つのRule 様々なRule
  30. Insights Plugins (Rule) OS情報(RHEL7.1) 例:OS情報からsshdの脆弱性を踏んでないかを解析 sshdのバージョン sshd_config設定 結果のレポート 解決方法 結果のレポート

  31. Insights Plugins (Rule) Ruleってどのくらいあるの? 996あるらしい

  32. Insights Plugins (Rule) Ruleの作り方を学びたいなー https://insights-core-tutorials.readthedocs.io/en/latest/ insights-coreのチュートリアルがあります。 FC30で簡単にセットアップ可能

  33. Insights Customer Interface

  34. Insightsの構成要素(All Python)

  35. Insights Customer Interface

  36. まとめ

  37. Insightsの中身を知ると意外に面白い ・ Pythonで書いてるのでわかりやすい ・ githubで公開されてるから追いかけやすい ・ RHELだけじゃなくFedoraでも(多分CentOSにも)動きを知るには十分 とは言っても ・完全なOSSじゃない(Red Hat内にcore部分とか色々あるし) 「フレームワークは」公開ということ。 ・Ruleは知見によるし、公開されていない ・やっぱりその辺はRedHatのノウハウなんだなーと。

  38. Q&A