403とは
Webサイトの閲覧禁止を意味するコード
考えられる原因
オブジェクトの公開設定
S3バケット内のオブジェクトが「パブリックにアクセス可能」となっているか確認してください。オブジェクトが非公開の場合、CloudFront経由でのアクセスが制限される可能性があります。
AWS KMSによる暗号化
S3のオブジェクトがAWS Key Management Service (KMS) で暗号化されていないことを確認してください。KMSで暗号化されたオブジェクトにはCloudFrontからアクセスできません。
S3バケットポリシー
S3バケットポリシーで"s3:GetObject"のアクセス許可が設定されているか確認してください。特にCloudFrontのオリジンアクセスアイデンティティ(OAI)またはオリジンアクセスコントロール(OAC)が使用されている場合、それらが適切に許可されている必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<CloudFront OAI ID>:root"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<your-bucket-name>/*"
}
]
}
オブジェクトの所有権
S3バケットが「パブリックリードアクセス」を許可している場合、バケットとオブジェクトが同じAWSアカウントによって所有されている必要があります。オブジェクトが他のアカウントでアップロードされた場合、403エラーが発生する可能性があります。
オブジェクトの存在
CloudFront経由でリクエストしているオブジェクトがバケット内に実際に存在しているか確認してください。存在しないオブジェクトへのリクエストは403または404エラーを引き起こします。
Amazon S3 Block Public Access設定
S3バケットで「パブリックアクセスをブロックする」設定が有効になっている場合、バケットやオブジェクトへのパブリックアクセスがブロックされます。この設定を無効にすることで、CloudFront経由でのアクセスを許可する必要があります。
Requester Pays設定
バケットで「Requester Pays」が有効になっている場合、リクエストにrequest-payerパラメータを含める必要があります。この設定があると、リクエストを行う側が料金を支払う形になるため、適切なパラメータが必要です。
Refererヘッダーの確認
RefererヘッダーでCloudFrontからのアクセスを制限している場合、カスタムヘッダー設定を確認してください。Refererヘッダーが不一致の場合、403エラーが発生します。
CloudFront キャッシュの確認
CloudFrontでキャッシュが残っている場合、キャッシュのクリアを試みてください。設定変更が反映されていないことが403エラーの原因となる場合もあります。
CloudFrontディストリビューション設定の変更が反映されていない
CloudFrontのディストリビューション設定に変更を加えた場合、設定の反映に時間がかかることがあります。ステータスが「Deployed」となるまで待ってから再確認してみてください。
参考サイト