AccessDenied (S3)
AWS S3へのアクセス権限がない場合に発生するエラー
概要
AccessDenied は、AWS S3バケットやオブジェクトへのアクセス権限がない場合に発生するエラーです。IAMポリシー、バケットポリシー、ACLの設定不備が主な原因です。
エラーメッセージ
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
| |
原因
- IAMポリシー不足: ユーザー/ロールにS3アクセス権限がない
- バケットポリシー: バケットポリシーでアクセスが拒否されている
- ブロックパブリックアクセス: パブリックアクセスがブロックされている
- オブジェクト所有者: 別アカウントがアップロードしたオブジェクト
- 暗号化キー: KMS暗号化されたオブジェクトへのキーアクセス権限がない
- VPCエンドポイント: VPCエンドポイントポリシーで制限されている
解決策
1. IAMポリシーを確認・追加
| |
AWS CLIで確認:
| |
2. バケットポリシーを確認
| |
バケットポリシーの例(特定IAMユーザーに許可):
| |
3. パブリックアクセスブロック設定を確認
| |
パブリックアクセスが必要な場合:
| |
4. オブジェクトACLを確認
| |
クロスアカウントでアップロードする場合:
| |
5. KMS暗号化キーの権限を追加
| |
6. バケット所有権設定を確認
| |
ACLを無効化してバケット所有者に統一:
| |
7. CloudFront OAC/OAI経由でのアクセス
CloudFrontからS3にアクセスする場合のバケットポリシー:
| |
デバッグ方法
AWS CLI でテスト
| |
IAM Policy Simulator
AWSコンソールでIAM Policy Simulatorを使用して、ポリシーの評価結果を確認できます。
AWS の他のエラー
AccessDeniedException: User is not authorized
ECS CannotPullContainerError
AccessDenied: User is not authorized to perform sts:AssumeRole
IncompleteSignature: The request signature we calculated does not match
MissingAuthenticationToken: Missing Authentication Token
SignatureDoesNotMatch: The request signature we calculated does not match
この記事は役に立ちましたか?