オリジナル: https://slides.com/kokuyouwind/aws-startup-community-202205
AWS Startup Communityの「スタートアップ事例祭り 〜監視・モニタリング・セキュリティ編〜」で発表した資料です。 https://aws-startup-community.connpass.com/event/241721/
なるべく楽したいAWSセキュリティLeaner Technologies Inc.黒曜(@kokuyouwind)
View Slide
$ whoami黒曜 / @kokuyouwind名古屋在住Leaner Technologies Inc.所属RailsエンジニアNext.jsとか AWS周りも触ってる
https://leaner.jp/
We're Hiring!!!
AWSセキュリティ
なんかいろいろあるIAMWAFSSOConfigOrganization GuardDutySecurityGroupCloudTrailSecurityHubControlTowerInspector
🤔何をどこまでやれば……?
ちゃんと安全に運⽤したうえで、なるべく楽したい!
どうやって安全に楽をするかAWSのベストプラクティスに従うSecurityHubでセキュリティチェックなるべく持ち物を減らし、ツールの既定に合わせるFargateを使い管理対象インスタンスを減らすネットワーク環境構築をCopilot CLIに任せるアプリケーションレベルでもAWSサービスを活⽤する典型的な攻撃はアプリ到達前にWAFで防ぐECRコンテナスキャンで脆弱性をチェックする
…という話をしていきます
アジェンダセキュリティレイヤーの分類AWSアカウントのセキュリティネットワークのセキュリティWebアプリのセキュリティデータストアのセキュリティまとめ
AWSでWebアプリを運⽤するとき、攻撃されそうなポイントを考えてみる
ざっくりしたWebアプリ構成
攻撃ポイント1: AWSアカウント
攻撃ポイント2:ネットワーク
攻撃ポイント3: Webアプリ
攻撃ポイント4:データストア
このあたりは確実に対策が必要
AWSアカウントの初期設定はベストプラクティスに従うのが確実
https://dev.classmethod.jp/articles/aws-1st-step-2021/
https://dev.classmethod.jp/articles/aws-security-all-in-one-2021/
SecurityHubで設定状況チェックhttps://aws.amazon.com/jp/security-hub/
Leanerのセキュリティスコア
セキュリティスコア100%じゃないの?リモートワークだと物理MFAデバイスのハードルが⾼いルート封印だけとはいえ、アカウント作るたびに誰かがボトルネックになるのは避けたい今は1passwordの仮想デバイスでMFA設定している重要度:中 以下は個別に対応するか検討しているCopilot CLIで作ったリソースが引っかかっているのはリスク低ければ対応を⾒送っているログ系は全対応するとコストが嵩む
環境ごとにAWSアカウントを分ける誤操作や悪⽤時のリスクを低減
Control Tower使わないの?徐々に設定を増やしていく戦略にしたので未導⼊SSOなど⾃分が未使⽤だったものはまず個別に触れてから統合サービスを⼊れたかった新サービス⽤のAWSアカウント準備を優先したのでなるべく⼩さく対応したかった次にAWSアカウント作る前には移⾏しておきたい権限管理も現状は最低限の分類なので、移⾏のタイミングで⾒直したい
VPCやセキュリティグループはCopilot CLIに任せると安全かつ楽
https://aws.github.io/copilot-cli/ja/
Copilot CLIで構築した環境
Copilot CLI構築の良い点VPCだけでなくALBやECSのセキュリティグループも⾃動で作ってくれるECSはALBからのアクセスしか受けつけない設定になるECS on Fargateになるので持ち物が減るEC2のOSやミドルウェア更新を気にしなくて良くなるcopilot svc execでsshライクな作業も可能今ならApp Runnerだともっと持ち物を減らせるWAF未対応など課題がありECSにしている
Webアプリのセキュリティ対策AWS WAFを挟んで典型的な攻撃を到達前にブロック基本的なManaged Ruleを適⽤標準リクエストで引っかかってしまうエンドポイントは個別に許可ルールを設定ECRでコンテナイメージをスキャン重⼤な脆弱性がないかだけ定期的にチェックGitHub DependabotでセキュリティアラートVAddyで定期的に脆弱性検査テスト
AWS WAFの推奨設定https://www.wafcharm.com/blog/how-to-choose-aws-managed-rules/Waf Charmのブログ記事にある導⼊推奨セットがわかりやすい
AWS WAFの実際の設定
AWS WAFのブロックサンプル
AWS WAFのブロック通知Slack通知してFalse Positiveなブロックがないかチェックhttps://zenn.dev/leaner_tech/articles/20211125-waf-notify
ECR Container Scanコンテナイメージを Clairでスキャンした結果が⾒られる
Critical含めていっぱい出てない?CVEは False Positiveも結構出る(DockerのFAQにも項⽬がある)https://github.com/docker-library/faq#image-building
Docker ImageのCVEは推移が重要イメージ検査を重視するなら拡張スキャンにすると良さそう(ただしスキャン毎のコストがそこそこ掛かるようになる)https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-scanning.html
データストアのセキュリティ対策基本的なことをちゃんとやるRDSはパブリックアクセスを無効にするRDSの接続元はセキュリティグループで絞るS3は「パブリックアクセスをすべてブロック」にするデータの暗号化を有効にするSecurityHubに従っていれば上記は設定されているはず
どうやって安全に楽をするか(Reprise)AWSのベストプラクティスに従うSecurityHubでセキュリティチェックなるべく持ち物を減らし、ツールの既定に合わせるFargateを使い管理対象インスタンスを減らすネットワーク環境構築をCopilot CLIに任せるアプリケーションレベルでもAWSサービスを活⽤する典型的な攻撃はアプリ到達前にWAFで防ぐECRコンテナスキャンで脆弱性をチェックする