指定された有効期間を持つクエリ文字列を使用して、S3 バケットに保存されているファイル リソースへのアクセスを制限しようとしています (ここで概説されているようにhttp://birkoff.net/blog/amazon-s3-query-string-authentication-using -php/ ) をバケットのエイリアスに追加します。たとえば、Route53 にはタイプ エイリアスの A レコードがあり、securefiles.mysite.comは S3 エイリアスsecurefiles.mysite.com.s3-website-ap-southeast-2.amazonaws.comを指しています。
これは、標準のS3アドレスを使用してアドレス指定されたファイルに対して非常にうまく機能し ます 。 /privateresource.png?biglongquerystring ですが、より短いsecurefiles.mysite.com/privateresource.png?biglongquerystring を使用してリンクしようとする と、403, Access Denied メッセージで失敗します。
調査のために、バケット ポリシーを編集して、すべてのユーザーがすべてのバケット リソースにアクセスできるようにしました。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::securefiles.mysite.com/*"
}
]
}
クエリ文字列は短いアドレスでも機能するようになりましたが、すべてのユーザーがアクセスできるようになったため、保護されなくなりました。
また、バケットに対して「Web サイトのホスティングを有効にしない」ことを試みましたが、これも完全な S3 アドレス、securefiles.mysite.com.s3.amazonaws.com/privateresource.png?biglongquerystring に対して正常 に機能しますが、アドレス指定時に 404 NoSuchWebsiteConfiguration で失敗します短いsecurefiles.mysite.com/privateresource.png?biglongquerystring
Route53 A レコードから S3 バケット エイリアスまで、S3 バケット内のファイルを安全にアドレス指定する方法についてのアイデアはありますか?