【ITニュース解説】Building My S3 Security Scanner: A Solo Dev's Journey to Automate AWS Bucket Safety
2025年09月29日に「Dev.to」が公開したITニュース「Building My S3 Security Scanner: A Solo Dev's Journey to Automate AWS Bucket Safety」について初心者にもわかりやすく解説しています。
ITニュース概要
S3 Security Scannerは、AWS S3バケットのセキュリティ設定ミスを自動で検知・修正するツールだ。開発者が手動監査なしでS3を安全に保てるよう、Lambda、EventBridge、CloudFormationで構築した。公開アクセスや暗号化不足などの問題を効率的に解決し、クラウド利用の安心を提供する。
ITニュース解説
S3はAmazon Web Services(AWS)が提供するストレージサービスで、ウェブサイトのデータ、アプリケーションのバックアップなど、様々なファイルをインターネット上に保存できる。その利便性から多くのシステムで利用されているが、設定を誤るとセキュリティ上の大きなリスクとなる。特に、S3バケットが誤ってインターネットに公開されてしまうと、保存されているデータが誰でもアクセスできる状態になり、情報漏洩につながる可能性がある。このようなS3バケットのセキュリティ設定ミスに起因する課題を解決するために、「S3 Security Scanner」というツールが開発された。
このツールは、単独で開発を進めるエンジニアや小規模なチームが、手間をかけずにS3バケットの安全性を確保することを目的としている。常に手動でセキュリティ設定を確認するのではなく、一度導入すればS3バケットを自動的に監視し、危険な設定を検知して、必要であれば自動的に修正することを目指している。これは、企業向けの本格的なセキュリティソリューションではなく、開発者自身がスキルアップのため、また将来的にAWS Marketplaceでの販売も視野に入れて、短期間で構築した実用最小限のプロダクト(MVP)である。
S3 Security Scannerは、主に以下の技術要素で構成されている。まず、AWSのサービスを操作するために広く用いられるプログラミング言語であるPythonと、そのAWS用ライブラリであるBoto3が、ツールの中心となるLambda関数の実装に使われている。次に、サーバーを管理する必要がない「サーバーレス」な実行環境であるAWS Lambda上で動作するため、運用の手間がかからない。また、AWSのリソース(S3バケット、Lambda関数、EventBridgeなど)の作成や設定をコードで定義し、自動的にデプロイするためのAWS CloudFormationが利用されている。これにより、ユーザーは簡単にツールを導入できる。そして、S3バケットのスキャンを毎日決まった時間に自動実行するために、スケジュール機能を持つAmazon EventBridgeが使われている。これらの技術の組み合わせにより、開発者はS3バケットのセキュリティに関する心配から解放され、安心してデータ運用を行えるようになる。
ツールの開発は、S3で最も重大な問題である、公開設定によるデータ漏洩のリスクに焦点を当てることから始まった。S3 Security Scannerは、主に以下の4つのセキュリティ設定をチェックする。一つ目は、S3バケットへの意図しないパブリックアクセスを防ぐための機能である「パブリックアクセスブロック(Public Access Block)」の設定状況だ。二つ目は、「アクセスコントロールリスト(ACL)」の権限設定で、誰がS3バケットにアクセスできるかを細かく制御できているかを確認する。三つ目は、「バケットポリシー」内で広範なアクセスを許可するワイルドカード(*)が不必要に使われていないかを確認する。そして四つ目は、S3バケットに保存されるデータが常に暗号化されるように「デフォルト暗号化」が有効になっているかを確認する。これらのチェック結果に基づいて、セキュリティリスクのレベルを「なし」「低」「中」「高」のいずれかで評価する。
このツールの核となるのはAWS Lambda関数だ。この関数は、事前に設定されたパラメータ(例えば、スキャン対象から除外するバケットのリストなど)を読み込み、Boto3ライブラリを通じてAWSのS3サービスに対してAPI呼び出しを行う。具体的には、AWSアカウント内のS3バケット一覧を取得したり、各バケットのACLやポリシー設定などを取得したりする。スキャンが完了すると、検出されたセキュリティリスクに関する情報をJSON形式で出力する。さらに、S3 Security Scannerはオプションで自動修正機能も提供する。これは、検出されたセキュリティ問題を自動的に修正するもので、例えばパブリックアクセスが設定されているバケットのACLをプライベート設定に戻したり、パブリックアクセスブロックを有効にしたりできる。ただし、意図しない変更を防ぐために、実際に修正を適用する前に「ドライラン」(変更をシミュレーションする機能)で結果をプレビューできる安全機構も備わっている。
ツールのアーキテクチャはシンプルに設計されている。中心には、S3バケットをスキャンし、必要に応じて修正を行うLambda関数がある。このLambda関数は、Amazon EventBridgeによって毎日設定された時間に自動的に起動される。Lambda関数は、S3バケットの設定を読み取ったり、設定を変更したりするために、S3のAPIを呼び出してS3サービスと直接連携する。将来的には、スキャン結果に基づいてメールで通知を送信するために、Amazon SES(Simple Email Service)を統合する計画もあるとのことだ。
ツールのデプロイは簡単に行われた。作成したPythonコードをZIPファイルに圧縮し、自身のS3バケットにアップロードした後、そのコードとAWSリソースの設定を定義したCloudFormationテンプレートを作成した。ユーザーはこのテンプレートを使ってAWS上にスタックをデプロイし、スキャンのみを行うモードか、自動修正も行うモードかを選択するだけで、EventBridgeによって毎日自動的にスキャンが開始されるようになる。このプロジェクトは、夜間の数時間を数回費やすだけで完成したという。開発を効率化するために、AIを活用したコード生成ツール(Claude Code)やローカル環境でのテストツール(Grok)なども活用された。
開発中にいくつかの課題に直面したという。例えば、S3バケットの一覧を取得する際に、通常、データ量が多い場合に使う「ページネーション」という仕組みを適用しようとしたが、「OperationNotPageableError」というエラーが発生した。これは、S3のlist_bucketsAPIが、単一の呼び出しで全ての結果を返すため、ページネーションが不要であるという仕様を誤解していたためであり、ページネーターの使用をやめることで解決した。また、S3バケットの暗号化設定をチェックしようとした際に、「AccessDenied」エラーが発生した。これは、Lambda関数が実行される際に使用する「IAMロール」(AWSリソースにアクセスするための権限を定義するもの)に、S3の暗号化設定を取得するs3:GetEncryptionConfigurationという権限が付与されていなかったためであり、この権限を追加することで解決した。さらに、スキャン対象から除外したいバケットのリストをJSON形式で渡す際に、文字列として渡してしまい、リストとして認識されないという初歩的なJSONの記述ミスも経験した。これらの経験から、まずローカル環境でテストを行い、問題があれば少しずつデプロイして検証するという、段階的な開発プロセスの重要性を学んだという。
このプロジェクトは、クラウド環境において「セキュア・バイ・デフォルト」、つまり最初から安全な状態であることが理想であるという考え方への、開発者自身の強い思いを込めたものだ。シンプルでありながら効果的なツールであり、構築すること自体も楽しかったとのことである。今後は、さらに詳細なスキャンロジックや安全な自動化の方法、CloudFormationをより深く活用する方法についての解説記事を公開していく予定だ。この開発者の取り組みは、クラウドのセキュリティと自動化に興味を持つ多くのエンジニアにとって、実践的な学びの機会を提供するものと言えるだろう。