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

JAWS-UG千葉支部 #19 AWS Security HubのダッシュボードがイケてないのでAWS Security Lakeを試してみた

JAWS-UG千葉支部 #19 AWS Security HubのダッシュボードがイケてないのでAWS Security Lakeを試してみた

2022/12/27 JAWS-UG千葉支部オンライン#19 re:Invent 2022 re:Cap
AWS Security HubがイケてないのでAWS Security Lakeを試してみた

Takashi Yamaguchi

December 27, 2022
Tweet

More Decks by Takashi Yamaguchi

Other Decks in Technology

Transcript

  1. 株式会社 Gunosy Gunosy 技術戦略室 SRE 山口 隆史 <YAMAGUCHI Takashi> 2022年12月27日(火)

    AWS Security Hubのダッシュボードがイケてないので AWS Security Lakeを試してみた JAWS-UG千葉支部オンライン# 19
  2. (C) Gunosy Inc. All Rights Reserved. PAGE | 2 自己紹介

    氏名:山口隆史(やまぐちたかし) 所属:株式会社Gunosy 技術戦略室 SRE 業務:Pure SREとしての活動 略歴:フリーランス、SIer等を渡り歩く→現職(2022/01〜) 自称:プリセールスから運用までこなすフルスタックエンジニア 好きなAWSサービス:AWS WAF、CloudShell、サポート
  3. (C) Gunosy Inc. All Rights Reserved. PAGE | 3 株式会社Gunosy

    ギリシャ語で「知識」を意味する「Gnosis(グノーシス)」+「u(“you”)」 「”Gnosis” for “you”」あなたのための知識  =情報を届けるサービスを提供し続ける、という意味 ▪ 2012年11月創業 ▪ 2015年4月東証マザーズ上場 ▪ 2017年12月東証第一部に市場変更 ▪ 従業員数 258名 (2022年5月末現在 連結ベース) ▪ 事業内容 – 情報キュレーションサービスその他メディアの開発及び 運営 ▪ 提供サービス  グノシー、ニュースパス、 auサービスToday 企業理念「情報を世界中の人に最適に届ける」
  4. (C) Gunosy Inc. All Rights Reserved. PAGE | 4 アジェンダ

    話すこと - AWS Security Hubの運用の課題 - AWS Security Lakeを触ってみました
  5. (C) Gunosy Inc. All Rights Reserved. PAGE | 6 Security

    Hub運用上の課題 委任アカウントを指定した運用の場合に、ダッシュボードが使いにくい - アカウント別にCRITICAL何件、HIGH何件が検知されたという表示がない - kube-bench、Trivy等で検知した情報を集約した場合に、それをアカウント別・製品別・ Severity 別に抽出するのが困難 - 委任アカウント側で、リソース抑制しても伝搬しない
  6. (C) Gunosy Inc. All Rights Reserved. PAGE | 7 今まで検討したこと

    ▪ 検知ツールの情報をS3に出 力してダッシュボードを作る ▪ 検知ツールのダッシュボード に寄せる ▪ Security Hubの情報がシュッと 定期的に出力できなかった ▪ SIEM系、Prismaは料金が… ▪ 検知ツールだと網羅性が足りな かったり – Snyk、Armo等々
  7. (C) Gunosy Inc. All Rights Reserved. PAGE | 8 Security

    Lakeに期待していること ▪ 検知ツールの情報をS3に出 力してダッシュボードを作る ▪ 検知ツールのダッシュボード に寄せる ▪ 設定で定期的に出力してくれる ▪ Security Hubに集約して、 Athenaでクエリー書けばなんと かなりそう ▪ QuickSightも使えばドリルダウン できるかも
  8. (C) Gunosy Inc. All Rights Reserved. PAGE | 9 Security

    Lakeに期待していること Security Hubのダッシュボードの代替 - SREが実施しているふりかえりの時に - アカウント別にCRITICAL何件、HIGH何件が検知という情報をもとにトリアージしたい - ドリルダウンして検知したリソース名、内容を確認したい - kube-bench、Trivy等で検知した情報を集約して、見やすい形でダッシュボード表示したい - Security Hubには集約できるが、Security Hubが見やすくないので このような形式で、アカ ウント別、検知ツール別 に表示したい Snykの画面サンプル
  9. (C) Gunosy Inc. All Rights Reserved. PAGE | 11 Security

    Hubとは AWS Security Hub は、セキュリティのベストプラクティスのチェックを行い、アラートを集約 し、自動修復を可能にするクラウドセキュリティ体制管理サービスです。
  10. (C) Gunosy Inc. All Rights Reserved. PAGE | 12 Security

    Lakeとは Amazon Security Lake は、クラウド、オンプレミス、およびカスタムソースからのセキュリティデータを、アカウントに 保存されている専用のデータレイクに自動的に一元化します。 Security Lake は、オープンスタンダードである Open Cybersecurity Schema Framework (OCSF) を採用しています。
  11. (C) Gunosy Inc. All Rights Reserved. PAGE | 15 Security

    Lakeを有効化 OrganizationのOU構成 Root - プロダクションOU - プロダクション1本番 - プロダクション1非本番 - ・・・ - SandboxOU - Sandboxアカウント - SecurityOU - Log用アカウント - SecurityGuardRail用アカウント (委任アカウント) ▪ 委任しているので、委任アカウン ト側で有効化が必要でした – 委任アカウントのS3に全アカ ウント分出力される感じです
  12. (C) Gunosy Inc. All Rights Reserved. PAGE | 16 Security

    Lake有効化した後の作業 S3のオブジェクト所有者のACLの無効化をしておく - 無効化しておかないと別アカウントから Readできない - ACL 無効 (推奨)となっているが、ACL 有効がデフォルト
  13. (C) Gunosy Inc. All Rights Reserved. PAGE | 17 Security

    Lakeで出力されるS3の状態 S3の名前 - aws-security-data-lake-{region}-{ランダム値} - みたいなバケット名が自動で生成された S3のフォルダ構成 - CloudTrail等とは違ってApache HiveのPartition形式になっている aws/ CLOUD_TRAIL/ ROUTE53/ SH_FINDINGS/ VPC_FLOW/ region={リージョン名}/ accountId={アカウントID}/ eventHour={yyyy}{mm}{dd}{hh}/
  14. (C) Gunosy Inc. All Rights Reserved. PAGE | 18 Security

    Lakeで出力されるスキーマ Security Hubのスキーマ - OCSFのSecurity Findingと思われる - https://schema.ocsf.io/classes/security_finding?extensions= - 全体 - https://schema.ocsf.io/
  15. (C) Gunosy Inc. All Rights Reserved. PAGE | 19 Security

    Lakeで出力されるスキーマ Security Hubのスキーマ - OCSFのSecurity Findingと思われる - https://schema.ocsf.io/classes/security_finding?extensions= - 全体 - https://schema.ocsf.io/
  16. (C) Gunosy Inc. All Rights Reserved. PAGE | 20 Security

    Lakeで出力されるスキーマ Security Hubのスキーマ - Optional項目が大量にあり、出力データにもあったりなかったりですが、スキーマとして全て指 定しておかないとAthenaでエラーになります - org.apache.parquet.io.PrimitiveColumnIO cannot be cast to org.apache.parquet.io.GroupColumnIO
  17. (C) Gunosy Inc. All Rights Reserved. PAGE | 21 出力されたデータ(1/3)

    { "metadata": { "product": { "version": "2018-10-08", "feature": { "uid": "aws-foundational-security-best-practices/v/1.0.0/EC2.24", "name": "Security Hub" }, "uid": "arn:aws:securityhub:ap-northeast-1::product/aws/securityhub", "vendor_name": "AWS", "name": "Security Hub" }, "version": "0.32.0" }, "time": 1671951903000, "severity": "INFORMATIONAL", "state": "RESOLVED", "cloud": { "account_uid": "xxxxxxxxxxx", "region": "ap-northeast-1", "provider": "AWS" },
  18. (C) Gunosy Inc. All Rights Reserved. PAGE | 22 出力されたデータ(2/3)

    "resources": { "array": [ { "type": "AwsEc2Instance", "uid": "arn:aws:ec2:ap-northeast-1:xxxxxxxxx:instance/i-xxxxxxxx", "cloud_partition": "aws", "region": "ap-northeast-1", "details": "{\"AwsEc2Instance\":{\"VpcId\":\<省略>" } ] }, "finding": { "created_time": 1671951903000, "uid": "arn:aws:securityhub:ap-northeast-1:xxxxxxxxxx:subscription/aws-foundational-security-best-practices/v/1.0.0/EC2.24/finding/xxxxxxxxxxx", "desc": "This control checks whether the virtualization type of an EC2 instance is paravirtual. The control fails for an EC2 instance if ‘virtualizationType’ is set to ‘paravirtual’.", "title": "EC2.24 EC2 paravirtual instance types should not be used", "modified_time": 1671957019000, "first_seen_time": 1671951903000, "last_seen_time": 1671957382000, "types": { "array": [ "Software and Configuration Checks/Industry and Regulatory Standards/AWS-Foundational-Security-Best-Practices" ] },
  19. (C) Gunosy Inc. All Rights Reserved. PAGE | 23 出力されたデータ(3/3)

    "compliance": { "status": "PASSED" }, "process": { "file": { "type_id": 0, "name": "''" }, "parent_process": {} }, "class_name": "Security Finding", "class_uid": 2001, "category_name": "Findings", "category_uid": 2, "activity_id": 0, "activity_name": "Unknown", "type_name": "Security Finding: Unknown", "type_uid": 200100, "state_id": 4, "severity_id": 1, "unmapped": {<省略> }
  20. (C) Gunosy Inc. All Rights Reserved. PAGE | 24 Athenaでクエリーしてみた

    構成 - 社内の分析基盤(Lake Formation、Glue)を使用して、 クエリーしました - アクセス許可、スキーマ設定をすればクエリー発行自体 は簡単
  21. (C) Gunosy Inc. All Rights Reserved. PAGE | 25 イケてるところ(少し触ってわかった範囲)

    抑制リソースを取得するのが簡単 - Athenaでクエリーすればシュッと取得できる アカウント別にSeverityのカウントができそう - 課題(後述)はあるけどクエリー書けばできそう ドリルダウンもゴリゴリやればできそう - クエリー書けばいけそう 一手間かければ 夢がありそうな感 触
  22. (C) Gunosy Inc. All Rights Reserved. PAGE | 26 わかった課題(少し触ってわかった範囲)

    現在の状態を取得するのが難しいかも - すでに存在しない情報がファイルに存在している - 削除済みのリソース - すでに無いコントロール - 無効化したコントロール - なのでfinding ID+リソースで、最新の状態を取得する必要がある - どこまでの範囲をクエリー対象にしたらいいのかはテストして確認が必要
  23. (C) Gunosy Inc. All Rights Reserved. PAGE | 27 今後の予定

    クールなダッシュボードを作っていきます! - 作ったら発表するので乞うご期待!