Amazon S3キャッシュリゾルバをLiip Imagineバンドルで設定し、ブラウザにディレクトリコンテンツが表示されないようにバケットに正しい権限を設定することに問題があります。Amazon S3ポリシー+ Liip Imagine Cache Resolver
私のシナリオ:
サイトでは、S3にかなりの数の画像資産を持っている - いくつか手動でアップロードされ、多くのもVICHアップロード・バンドルを使用してCMSを介してアップロード。私はImagineバンドルを使用して、config.ymlファイル(サムネイルやプレビューなど)で定義されたフィルタに基づいてキャッシュされたイメージを解決し、その後、S3バケットの別のディレクトリにフィルタの名前を付けて保存します。つまり、S3にオリジナルをアップロード - > S3に保存されたキャッシュファイルを自動的に解決します。よく働く。私が初めて要求されたときにキャッシュされたファイルを解決することができました
問題
唯一の方法は、バケットに大きく開いて、パブリックアクセス権を持つことです。これは良いことではありません。S3を実行すると、バケットの内容全体(または最初の1000個以上のレコード)をリストするXMLファイルの方法で「バケットエクスプローラ」が公開されるためです。すべてのファイルが公開されている必要がありますが、新製品の発売前にこのクライアントサイトを盗聴している人々に問題があったため、いつでもリストを公開することはできません。私は少なくともそこにファイル名のリストがほしいとは思わない。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[MY_BUCKET]/*"
}
]
}
そして、何私が見つけたことはということです:私は
は、私は、次のバケットポリシーと組み合わせたバケットACLの設定のいくつかの組み合わせを試してみた試してみた何
パブリックアクセスの「Everyone」グループに「List objects」権限が与えられていない限り、キャッシュされたファイルは解決されません。その権限を無効にすると(ブラウザでXMLファイルの表示が無効になると)、キャッシュされていないファイルはアップロードから解決できなくなります。
は私が
を試してみた他に何私はまた、ウェブサイトとしてバケツを設定しようと、私はここにあるいくつかの提案ごとに、ルートにデフォルトindex.html
ファイルをアップロードしました。これは何もしなかった。たぶん私は何かが欠けているでしょう。
また、キャッシュ解決フォルダがS3内で公開されていることを確認しましたが、オブジェクトの権限がバケットで無効になっています。これはどちらもうまくいかなかった。リストには、許可が次のエラーが解決しようとは
Error executing "CreateBucket" on "https://[MY_BUCKET].s3.amazonaws.com/";
AWS HTTP error: Client error: `PUT https://[MY_BUCKET].s3.amazonaws.com/`
resulted in a `403 Forbidden` response:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code>
<Message>Access Denied</Message><RequestId>94D939 (truncated...)
AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message>
<RequestId>[HIDDEN]</RequestId>
<HostId>[HIDDEN]</HostId>
</Error>
行われるときバケットの構造は、この
[MY_BUCKET]
-thumbnails // <-- where thumbnails are resolved
-previews // <-- where previews are resolved
-uploads // <-- primary uploads parent dir
--products // <-- where products are uploaded
--other // <-- where other files are uploaded
--images // <-- where images are manually uploaded
のようなものである製造され削除されるオブジェクト
エラー
私の前提は、リゾルバがcファイルが解決されているかどうかを判断するために、ディレクトリの内容を調べます。
必要に応じて、私はsymfonyから設定情報を提供することができますが、私はそれに問題がないので、必要ではないと思いました。
最終的には、リゾルバにそのことをさせ、バケットのコンテンツへのブラウザアクセスを防ぐことができればいいだけです。