Amazon S3 でファイルをアップロードしようとすると、「403 Forbidden」(403 禁止) エラーが表示されるのはなぜですか?
最終更新日: 2022 年 4 月 27 日
Amazon S3 コンソールを使用して Amazon Simple Storage Service (Amazon S3) バケットにファイルをアップロードしようとしています。しかし、代わりに「403 Forbidden」(403 禁止) エラーが発生します。
簡単な説明
「403 Forbidden」(403 禁止) エラーは、次の理由で発生する可能性があります。
- s3:PutObject がオブジェクトを追加するための許可、または s3:PutObjectAcl がオブジェクトの ACL を変更するための許可がない。
- AWS Key Management Service (AWS KMS) キーを使用する許可がない。
- バケットポリシーに明示的拒否ステートメントがある。
- Amazon S3 ブロックパブリックアクセスが有効になっている。
- バケットのアクセスコントロールリスト (ACL) が AWS アカウントのルートユーザーにオブジェクトの書き込みを許可していない。
- AWS Organizations のサービスコントロールポリシーが Amazon S3 へのアクセスを許可していない。
解決方法
s3:PutObject または s3:PutObjectAcl の許可を確認する
次の手順を実行してください。
- AWS Identity and Access Management (IAM) コンソールを開きます。
- [User] (ユーザー) や [Role] (ロール) など、バケットポリシーへのアクセスに使用するアイデンティティを選択します。
- バケットポリシーへのアクセスに使用している IAM アイデンティティ名を選択します。
- [Permissions] (許可) タブを選択し、各ポリシーを展開して JSON ポリシードキュメントを表示します。
- JSON ポリシードキュメントで、Amazon S3 へのアクセスに関連するポリシーを検索します。その後、バケットに対する s3:PutObject または s3:PutObjectAcl アクションの許可があることを確認します。
AWS KMS キーを使用するための許可の付与を依頼する
カスタム AWS KMS キーによるデフォルトの暗号化を使用する S3 バケットにアクセスするには、キー管理者は、キーポリシーに対する許可を付与する必要があります。
暗号化されたバケットにオブジェクトをアップロードするには、IAM ユーザーまたはロールに、少なくとも kms:Encrypt と kms:GenerateDataKey に対する AWS KMS 許可が必要です。
バケットポリシーで明示的拒否ステートメントを確認する
次の手順を実行してください。
- Amazon S3 コンソールを開きます。
- バケットのリストから、ファイルをアップロードするバケットを開きます。
- [Permissions] (許可) タブを選択します。
- [Bucket Policy] (バケットポリシー) を選択します。
- "Effect": "Deny" のあるステートメントを検索します。
- バケットポリシーに、特定の条件を満たすための s3:PutObject の正しい URI リクエストパラメータが含まれていることを確認します。
重要: "Effect": "Deny" でバケットポリシーを保存する前に、S3 バケットへのアクセスを拒否するステートメントがないか確認してください。ロックアウトされた場合は、「誤って全ユーザーの Amazon S3 バケットへのアクセスを拒否してしまいました。アクセスを回復するにはどうすればよいですか?」を参照してください。
次のステートメント例は、アップロードリクエストに AWS KMS キー arn:aws:kms:us-east-1:111122223333:key による暗号化が含まれていない限り、awsdoc-example-bucket 上の s3:PutObject へのアクセスを明示的に拒否します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStmt",
"Action": [
"s3:PutObject"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::awsdoc-example-bucket/*",
"Condition": {
"StringNotLikeIfExists": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
}
},
"Principal": "*"
}
]
}
S3 ブロックパブリックアクセスを無効にする
アップロードリクエストでパブリック ACL を渡していて、S3 ブロックパブリックアクセス機能が有効になっている場合は、ファイルをアップロードする前に無効にします。
アカウントレベルでの S3 ブロックパブリックアクセスの設定の詳細については、「アカウントのパブリックアクセスブロック設定の構成」を参照してください。バケットレベルでの設定については、「S3 バケットへのパブリックアクセスブロック設定の構成」を参照してください。
オブジェクトを書き込むための許可をルートユーザーに付与する
バケットの ACL 許可を設定して、オブジェクトを書き込むためのアクセス権をルートユーザーに付与します。
AWS Organizations のサービスコントロールポリシーを削除する
AWS Organizations を使用する場合は、S3 アクションを明示的に拒否するサービスコントロールポリシーをすべて削除します。