簡體   English   中英

AWS CloudFront格式錯誤的策略

[英]Aws CloudFront Malformed Policy

我一直在嘗試使用php中的有限權限為Cloud Front創建一個簽名的URL(指向我的s3存儲桶),但是我一直收到格式錯誤的策略錯誤。

我在用 :

$customPolicy = '{"Id":"Policy1319566876317","Statement":[{"Sid":"Stmt1319566860498","Action":["s3:GetObject"],"Effect":"Allow","Resource":"arn:aws:s3:::my-bucket/*","Principal":{"CanonicalUser":["92cd670939a0460a1b48cbbfedcb5178139bcb315881d9ec3833e497a9e62959762d560feec321a749217754e5d02e5f"]}}]}';


// Create a signed URL for the resource using the canned policy
        $signedUrlCannedPolicy = $cloudFront->getSignedUrl([
            'url'         => $streamHostUrl . '/' . $resourceKey,
            'private_key' => base_path().'/'.'mypem file',
            'key_pair_id' => 'myid',
            'policy' => $customPolicy

        ]);

基本上,我希望此簽名URL的接收者僅具有我指定的那些s3對象特權(在上面的代碼中,將其設置為getObject,有時將其放置為object,有時可能將其設置為delete object。我該如何實現在雲戰線?

您的自定義策略看起來像S3 / IAM策略聲明。 這不是用於CloudFront簽名URL的策略文檔。 CloudFront具有完全不同的策略語言。

從技術上講,CloudFront中的自定義策略允許訪問CloudFront而不是其背后的資源。 CloudFront簽名的URL以及處理它們的邏輯不了解背面的實體或配置,例如存儲桶名稱,鍵,主體,原始訪問身份等……它們僅用於指定允許CloudFront服務於對特定URL或URL模式的請求,僅此而已。 它們嚴格在CloudFront的“前端”上運行,並且在這一層沒有對幕后情況的了解。 如果您的CloudFront發行版由於無限制的存儲桶訪問或由於授予原始訪問身份的權限而被授權對基礎資源執行請求,則操作成功。 否則,它將失敗。

查看為使用自定義策略的簽名URL創建策略聲明以獲取這些策略的正確格式。

從根本上講,如果您想對存儲桶而不是GET使用CloudFront簽名的URL進行其他操作,那么您很可能會嘗試以與其設計不一致的方式使用CloudFront簽名的URL。

可以通過CloudFront將GETHEADOPTIONS之外的其他操作“發送”到S3,但是這樣做的理由只有一個-乘坐從Edge網絡到原始S3位置的高質量路徑。 通過CloudFront進行PUT實際上不會在CloudFront中存儲任何內容-它只是將請求傳遞到存儲桶,並且對CloudFront中可能已經緩存的內容沒有影響。

您可以通過使用S3 Transfer Acceleration來實現相同的目的-提高非GET操作的全局網絡性能和吞吐量-當您啟用S3傳輸加速時 ,它會在https://example-bucket.s3-accelerate.amazonaws.com公開您的存儲桶。特征。 我有點過分簡化了,但實際上,這將您的存儲桶放在了不緩存的通用CloudFront發行版后面,使您可以利用Edge網絡進行更快的傳輸,但仍使用標准的S3簽名和策略來完成您的工作需要所有其他S3操作。

或者,只需將其他請求直接發送到存儲桶。

暫無
暫無

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

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