S3 ファイルの ACL を動的に更新し、Cloudfront に即座に伝播するソリューションを探しています。
これまでのところ、S3 で ACL を更新できますが、ファイルをプライベートに設定した場合でも、Cloudfront 経由でパブリックにアクセスでき、その逆も可能です。
そのために S3 PHP SDK を使用しています: Set file as public
$s3 = new S3($awsAccessKey, $awsSecretKey);
if (($acp = S3::getAccessControlPolicy($bucket, $uri)) !== false) {
$acp["acl"][] = array(
"type" => "Group", "uri" => "http://acs.amazonaws.com/groups/global/AllUsers", "permission" => "READ"
);
if (S3::setAccessControlPolicy($bucket, $uri, $acp)) {
echo "true";
}
}
ファイルを非公開に設定
$s3 = new S3($awsAccessKey, $awsSecretKey);
if (($acp = S3::getAccessControlPolicy($bucket, $uri)) !== false) {
foreach($acp['acl'] as $key => $val) {
if(isset($val['uri']) &&
$val['uri'] == 'http://acs.amazonaws.com/groups/global/AllUsers')
unset($acp['acl'][$key]);
}
if (S3::setAccessControlPolicy($bucket, $uri, $acp)) {
echo "true";
}
}
ファイルを更新するには、Cloudfront に無効化リクエストを送信する必要があることを読みました: Force CloudFront distribution/file update
試したことはありませんが、試す前に、これが正しい解決策であることを知りたいです。また、更新に15分かかる場合があることも読みました。瞬時にできる方法はありませんか?
ありがとう!