Slide 1

Slide 1 text

なるべく楽したい AWS セキュリティ Leaner Technologies Inc. 黒曜 (@kokuyouwind)

Slide 2

Slide 2 text

$ whoami 黒曜 / @kokuyouwind 名古屋在住 Leaner Technologies Inc. 所属 Rails エンジニア Next.js とか AWS 周りも触ってる

Slide 3

Slide 3 text

https://leaner.jp/

Slide 4

Slide 4 text

We're Hiring!!!

Slide 5

Slide 5 text

AWS セキュリティ

Slide 6

Slide 6 text

なんかいろいろある IAM WAF SSO Config Organization GuardDuty SecurityGroup CloudTrail SecurityHub ControlTower Inspector

Slide 7

Slide 7 text

🤔 何をどこまでやれば…… ?

Slide 8

Slide 8 text

ちゃんと安全に運⽤したうえで、 なるべく楽したい!

Slide 9

Slide 9 text

どうやって安全に楽をするか AWS のベストプラクティスに従う SecurityHub でセキュリティチェック なるべく持ち物を減らし、ツールの既定に合わせる Fargate を使い管理対象インスタンスを減らす ネットワーク環境構築をCopilot CLI に任せる アプリケーションレベルでもAWS サービスを活⽤する 典型的な攻撃はアプリ到達前にWAF で防ぐ ECR コンテナスキャンで脆弱性をチェックする

Slide 10

Slide 10 text

… という話をしていきます

Slide 11

Slide 11 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 12

Slide 12 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 13

Slide 13 text

AWS でWeb アプリを運⽤するとき、 攻撃されそうなポイントを考えてみる

Slide 14

Slide 14 text

ざっくりしたWeb アプリ構成

Slide 15

Slide 15 text

攻撃ポイント1: AWS アカウント

Slide 16

Slide 16 text

攻撃ポイント2: ネットワーク

Slide 17

Slide 17 text

攻撃ポイント3: Web アプリ

Slide 18

Slide 18 text

攻撃ポイント4: データストア

Slide 19

Slide 19 text

このあたりは確実に対策が必要

Slide 20

Slide 20 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 21

Slide 21 text

AWS アカウントの初期設定は ベストプラクティスに従うのが確実

Slide 22

Slide 22 text

https://dev.classmethod.jp/articles/aws-1st-step-2021/

Slide 23

Slide 23 text

https://dev.classmethod.jp/articles/aws-security-all-in-one-2021/

Slide 24

Slide 24 text

SecurityHub で設定状況チェック https://aws.amazon.com/jp/security-hub/

Slide 25

Slide 25 text

Leaner のセキュリティスコア

Slide 26

Slide 26 text

セキュリティスコア100% じゃないの? リモートワークだと物理MFA デバイスのハードルが⾼い ルート封印だけとはいえ、アカウント作るたびに 誰かがボトルネックになるのは避けたい 今は1password の仮想デバイスでMFA 設定している 重要度: 中 以下は個別に対応するか検討している Copilot CLI で作ったリソースが引っかかっているのは リスク低ければ対応を⾒送っている ログ系は全対応するとコストが嵩む

Slide 27

Slide 27 text

環境ごとにAWS アカウントを分ける 誤操作や悪⽤時のリスクを低減

Slide 28

Slide 28 text

Control Tower 使わないの? 徐々に設定を増やしていく戦略にしたので未導⼊ SSO など⾃分が未使⽤だったものは まず個別に触れてから統合サービスを⼊れたかった 新サービス⽤のAWS アカウント準備を優先したので なるべく⼩さく対応したかった 次にAWS アカウント作る前には移⾏しておきたい 権限管理も現状は最低限の分類なので、 移⾏のタイミングで⾒直したい

Slide 29

Slide 29 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 30

Slide 30 text

VPC やセキュリティグループは Copilot CLI に任せると安全かつ楽

Slide 31

Slide 31 text

https://aws.github.io/copilot-cli/ja/

Slide 32

Slide 32 text

Copilot CLI で構築した環境

Slide 33

Slide 33 text

Copilot CLI 構築の良い点 VPC だけでなくALB やECS のセキュリティグループも ⾃動で作ってくれる ECS はALB からのアクセスしか受けつけない設定になる ECS on Fargate になるので持ち物が減る EC2 のOS やミドルウェア更新を気にしなくて良くなる copilot svc exec でssh ライクな作業も可能 今ならApp Runner だともっと持ち物を減らせる WAF 未対応など課題がありECS にしている

Slide 34

Slide 34 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 35

Slide 35 text

Web アプリのセキュリティ対策 AWS WAF を挟んで典型的な攻撃を到達前にブロック 基本的なManaged Rule を適⽤ 標準リクエストで引っかかってしまうエンドポイントは 個別に許可ルールを設定 ECR でコンテナイメージをスキャン 重⼤な脆弱性がないかだけ定期的にチェック GitHub Dependabot でセキュリティアラート VAddy で定期的に脆弱性検査テスト

Slide 36

Slide 36 text

AWS WAF の推奨設定 https://www.wafcharm.com/blog/how-to-choose-aws-managed-rules/ Waf Charm のブログ記事にある 導⼊推奨セットがわかりやすい

Slide 37

Slide 37 text

AWS WAF の実際の設定

Slide 38

Slide 38 text

AWS WAF のブロックサンプル

Slide 39

Slide 39 text

AWS WAF のブロック通知 Slack 通知してFalse Positive なブロックがないかチェック https://zenn.dev/leaner_tech/articles/20211125-waf-notify

Slide 40

Slide 40 text

ECR Container Scan コンテナイメージを Clair でスキャンした結果が⾒られる

Slide 41

Slide 41 text

Critical 含めていっぱい出てない? CVE は False Positive も結構出る (Docker のFAQ にも項⽬がある) https://github.com/docker-library/faq#image-building

Slide 42

Slide 42 text

Docker Image のCVE は推移が重要 イメージ検査を重視するなら拡張スキャンにすると良さそう ( ただしスキャン毎のコストがそこそこ掛かるようになる) https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning.html

Slide 43

Slide 43 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 44

Slide 44 text

データストアのセキュリティ対策 基本的なことをちゃんとやる RDS はパブリックアクセスを無効にする RDS の接続元はセキュリティグループで絞る S3 は「パブリックアクセスをすべてブロック」にする データの暗号化を有効にする SecurityHub に従っていれば上記は設定されているはず

Slide 45

Slide 45 text

アジェンダ セキュリティレイヤーの分類 AWS アカウントのセキュリティ ネットワークのセキュリティ Web アプリのセキュリティ データストアのセキュリティ まとめ

Slide 46

Slide 46 text

どうやって安全に楽をするか(Reprise) AWS のベストプラクティスに従う SecurityHub でセキュリティチェック なるべく持ち物を減らし、ツールの既定に合わせる Fargate を使い管理対象インスタンスを減らす ネットワーク環境構築をCopilot CLI に任せる アプリケーションレベルでもAWS サービスを活⽤する 典型的な攻撃はアプリ到達前にWAF で防ぐ ECR コンテナスキャンで脆弱性をチェックする