【发布时间】:2012-09-17 22:47:47
【问题描述】:
我正在寻找一种解决方案来动态更新我的 S3 文件 ACL 并立即传播到 Cloudfront。
到目前为止,我可以更新 S3 上的 ACL,但如果我将文件设置为私有,它仍然可以通过 Cloudfront 公开访问,反之亦然。
我正在使用 S3 PHP SDK 来执行此操作: 将文件设为公开
$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 分钟。有没有办法让它瞬间完成?
谢谢!
【问题讨论】:
标签: php sdk amazon-s3 acl amazon-cloudfront