簡體   English   中英

編輯通過PHP SDK通過Cloudfront訪問的S3文件的ACL

[英]Edit ACLs of S3 files accessed via Cloudfront through PHP SDK

我正在尋找一種解決方案來動態更新我的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: 強制CloudFront分發/文件更新

我沒有嘗試過,但是在我嘗試之前,我想知道這是正確的解決方案。 我還讀到更新可能需要15分鍾。 沒有任何方法可以使其瞬間完成嗎?

謝謝!

實際上,從查看源代碼開始,您並沒有在PHP官方AWS開發工具包中使用S3支持-您可能正在使用Undesigned S3類該類由第三方開發人員維護。 以防萬一你不知道。 :)

現在,對您的問題:

由於CloudFront是緩存 ,因此在清除該緩存之前,它不會立即提取您在S3中所做的更改。 因此,是的,第一步是對S3對象進行更改,第二步是向CloudFront發出無效請求,指示其清除緩存。

我個人已經看到CloudFront需要3到15分鍾的時間才能完成失效。 如果您查看CloudFront邊緣位置列表,那么我目前算出了分布在北美,歐洲,亞太地區和南美的36個邊緣位置。 CloudFront必須遍歷每個邊緣位置,並確保為要失效的對象清除緩存。

沒有任何方法可以使其瞬間完成嗎?

現在? 沒有。

我敢肯定,它以最快的速度,因為它可以移動,但。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM