AWS S3 の AccessDenied エラー:原因と解決策
エラーの概要 AWS S3 の AccessDenied エラーは、IAM ポリシーの不足、バケットポリシーの明示的な拒否設定、またはオブジェクトの ACL 設定によって、リソースへのアクセスが拒否されたときに発生します。認証情報は正常に認識されているものの、権限がない状態です。 実際のエラーメッセージ例 { "Error": { "Code": "AccessDenied", "Message": "Access Denied" } } An error occurred (AccessDenied) when calling the GetObject operation: Access Denied エラーメッセージの読み方: AccessDenied → HTTP ステータスコード 403 に相当。認証は成功したが権限がない Access Denied → リソースへのアクセスが拒否されていることを示すメッセージ リクエスト元の AWS アカウント・IAM ユーザー・ロールが、実行しようとしたアクション(s3:GetObject など)を許可されていない よくある原因と解決手順 原因1:IAM ポリシーで必要なアクションが許可されていない S3 バケットにアクセスするユーザー・ロール・サービスに対して、s3:GetObject、s3:PutObject などの必要な権限が付与されていない場合に発生します。特に新規に作成した IAM ユーザーや、特定のバケットに限定したアクセスに構成した際に起きやすいです。 Before(エラーが起きるコード): { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::my-bucket" } ] } After(修正後): { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::my-bucket" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::my-bucket/*" } ] } ✅ 修正後の確認: ...