アプリケーション構成とセキュリティ課題
このアプリケーションは、S3、WAF、CloudFront、APIを組み合わせた構成となっており、主に以下の4つのセキュリティ上の懸念点に焦点を当てて議論が進められています。
1. S3に直接アクセスできてしまわないか?
2. APIGatewayに直接アクセスできてしまわないか?
3. WAFっている?
4. テーブルへのアクセス権が過大でないか?
主要なセキュリティ対応の詳細
1. WAFの必要性
WAFについて、たとえ使う人が限られていてもURLが漏れるとアクセスされるため、また不特定多数に利用される場合はボット対策のためにも必要であると結論づけられています。なお、CloudFrontでベーシック認証を行うことでもアクセス制限は可能です。
2. S3への直接アクセス
S3は通常、作成直後は全てブロックされており、アクセスされることはありません。しかし、Next.jsアプリ公開の記事などではこのブロックを解除するように書かれていることがある点について触れられています。これは、CloudFrontからS3へアクセス可能になるまでに最大24時間かかることや、CloudFrontとS3のアクセス制御が双方に設定を必要とすることに起因する可能性があります。
3. API Gatewayへの直接アクセス
API Gatewayは作成した段階でどこからでもアクセスできる状態であるため、アクセス制限が必要です。制限方法として以下の2つが挙げられています。
1. WAF:CloudFrontと共通化できないため追加費用がかかります。
2. Lambda:リクエストのヘッダー情報を利用してアクセスをチェック・判断する方法です。
このLambdaを用いた手法については、「サーバーレスAPIを安全に!CloudFrontとLambdaとGitHub Actionsで作るセキュアな仕組み」という資料も参考にされています。
まとめ
この発表を通じて、アクセス制御の仕組みの復習ができたこと、Lambdaを用いたアクセス制御など構築の自動化の検討ができたこと、そしてこれまで詳しく知らなかったインフラの構成などの再確認ができたことが成果として挙げられています。
また、構築されたアプリケーションの具体的なコードはGitHubにて公開されています(https://github.com/pawn-4-git/ai-mon)