【ITニュース解説】バケットポリシーの記述を誤りマネコンからS3バケットを操作できなくなりそうになった話

2025年09月08日に「Qiita」が公開したITニュース「バケットポリシーの記述を誤りマネコンからS3バケットを操作できなくなりそうになった話」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

AWSでS3バケットポリシーの設定を誤り、管理者もコンソールから操作不能になる事態が発生。VPCエンドポイントからのアクセスのみを許可したのが原因だった。この問題はrootユーザーでポリシーを削除して復旧。アクセス制御設定、特にDenyの記述は慎重に行う必要がある。(119文字)

ITニュース解説

クラウドサービス、特にAmazon Web Services (AWS) は、システム構築における柔軟性と開発速度を飛躍的に向上させる強力なツールである。しかし、その多機能性と裏腹に、設定の複雑さも増しており、一つの設定ミスが予期せぬ重大なトラブルを引き起こす可能性がある。今回は、AWSのストレージサービスであるAmazon S3(以下、S3)のアクセス制御設定の誤りが原因で、管理者自身がデータにアクセスできなくなるというインシデントについて解説する。

まず、背景となる技術要素を理解する必要がある。S3は、インターネット上で様々なデータを保管・公開できる非常に便利なオブジェクトストレージサービスだ。データは「バケット」と呼ばれるコンテナ単位で管理される。この手軽さの一方で、重要なデータを保護するためには厳格なアクセス制御が不可欠となる。AWSでは、IAM (Identity and Access Management) というサービスを用いて、ユーザーやプログラムがAWSのリソースに対してどのような操作を許可されるかを一元的に管理する。それに加え、S3では「バケットポリシー」という機能を利用することで、バケットごとにより詳細なアクセスルールをJSON形式で定義できる。例えば、「特定のIPアドレスからのみアクセスを許可する」あるいは「特定のAWSサービスからのアクセスのみを許可する」といった、きめ細やかな制御が可能になる。

今回のインシデントは、AWSのプライベートネットワーク環境であるVPC (Virtual Private Cloud) 内に構築した仮想サーバー(EC2インスタンス)から、インターネットを経由せず安全にS3へ接続するための仕組み「VPCエンドポイント」の動作検証中に発生した。目的は、特定のVPCエンドポイントを経由したアクセスのみを許可し、それ以外のアクセスをすべて遮断するという、セキュリティを強化した構成のテストだった。そのために設定されたバケットポリシーは、「指定したVPCエンドポイントからのアクセスではない場合、すべてのS3操作を拒否する(Deny)」という趣旨の内容だった。

このポリシーをS3バケットに適用した直後、問題が顕在化した。EC2インスタンスからVPCエンドポイントを経由したアクセスは意図通りに機能したものの、開発者自身が普段利用しているウェブブラウザ上の管理画面、すなわちAWSマネジメントコンソールからのアクセスが完全にできなくなってしまった。バケットの中身を確認することも、設定を変更することも、さらにはバケット自体を削除することさえ不可能になった。これは、マネジメントコンソールからのアクセスが「指定したVPCエンドポイントからのアクセスではない」という拒否条件に合致してしまったためだ。AWSの権限評価ロジックでは、特定の操作を許可するルール(Allow)と拒否するルール(Deny)が存在する場合、Denyが常に優先される。そのため、たとえ管理者として強力な権限を持つIAMユーザーであっても、この明示的な拒否ルールによってアクセスがブロックされてしまったのである。

管理者自身が締め出されてしまうという絶体絶命の状況だが、AWSにはこのような事態を解決するための最終手段が存在する。それが「rootユーザー」である。rootユーザーは、AWSアカウントを作成した際に最初に生成される、すべての権限を持つ特別なユーザーだ。セキュリティ上のベストプラクティスとして、日常的な運用でrootユーザーを使用することは固く禁じられており、通常は権限を限定したIAMユーザーを使用する。しかし、今回のような緊急事態においては、このrootユーザーが唯一の解決策となる。

開発者はrootユーザーでAWSマネジメントコンソールにサインインし、問題のS3バケットにアクセスを試みた。幸いにも、今回設定されたポリシーはrootユーザーによる操作までは拒否していなかったため、問題のバケットポリシーを削除することに成功した。ポリシーが削除されたことでアクセス拒否のルールがなくなり、通常のIAMユーザーでも再びマネジメントコンソールからバケットを操作できるようになった。ただし、バケットポリシーの記述内容によってはrootユーザーですら完全に締め出される可能性があるため、この方法が常に有効とは限らない点は留意すべきである。

この事例は、システムエンジニアを目指す初心者にとって多くの重要な教訓を含んでいる。第一に、IAMポリシーやバケットポリシーのようなアクセス権限に関する設定は、システムのセキュリティを根幹から支える重要な要素であり、その影響範囲を正確に理解した上で、細心の注意を払って行う必要がある。特に、広範囲に影響を及ぼす拒否(Deny)設定は、意図しないアクセス遮断を引き起こしやすいため、慎重な設計が求められる。第二に、本番環境に設定を適用する前に、必ずテスト環境で十分な検証を行い、予期せぬ副作用がないかを確認するプロセスが不可欠である。第三に、rootユーザーは最後の切り札として、パスワードの厳重な管理と多要素認証(MFA)の設定を徹底し、日常業務では絶対に使用しないという原則を守ることが極めて重要である。このようなトラブルを未然に防ぐためには、ツールの操作方法だけでなく、その背景にあるAWSの権限評価ロジックといった基礎的な仕組みを公式ドキュメント等で深く理解しておくことが不可欠だ。