2017-06-15 113 views
0

我正在使用亞馬遜S3存儲以及服務器端加密與客戶提供的密鑰(SSE-C)存儲視頻文件。我使用Django作爲後端服務器,並將與EC2容器上的數據庫中每個文件關聯的所有名稱密鑰和密鑰存儲在其中。使用雲端服務器端S3加密視頻服務器端加密視頻

我想使用亞馬遜雲端服務來流式傳輸這些視頻。我已經使用S3存儲創建並配置了一個cloudfront發行版。我能夠非常容易地提供未加密的視頻,但我無法訪問加密的視頻,因爲它需要名稱密鑰和密鑰才能訪問服務器端的加密數據。

我在這方面找不到任何幫助。是否可以使用cloudfront爲服務器端加密的服務器(SSE-C)媒體文件提供服務?

如果可能,請引導我找到最佳解決方案。 在這方面的任何幫助將不勝感激。謝謝

回答

0

它需要名稱密鑰和密鑰才能訪問服務器端的加密數據。

這不是問題的全部;然而。 CloudFront signed URLs with an origin access identity將透明地重新簽名請求,以便在CloudFront得出該請求已獲得授權時,S3允許訪問這些對象,但無法創建與SSE-C兼容的CloudFront簽名URL。

這反過來又是因爲S3中的SSE-C不支持在查詢字符串中傳遞必要的參數給S3。

當使用presigned網址上傳一個新對象,檢索現有的對象,或只檢索對象元數據時,必須提供所有的加密報頭中的客戶端應用程序

http://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html

SSE-C必須將加密參數作爲標題發送,而不是查詢參數。

而且,如果你仔細想想,似乎沒有什麼目的是用每個請求發出的密鑰和記錄來加密對象,密鑰將在查詢字符串中。

SSE-S3透明地使用CloudFront。 SSE-KMS,我也希望得到支持(因爲基於S3 API文檔,對於GET請求沒有要求(或允許)與加密相關的頭文件)。

加密請求頭,如X-AMZ-服務器端加密,不應該對GET請求被髮送,如果你的對象使用與AWS KMS管理加密密鑰(SSE-KMS)或服務器的服務器端加密側的加密與Amazon S3管理加密密鑰(SSE-S3)

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

+0

邁克爾感謝您的答覆。但對我而言還是有點不清楚。你會進一步詳細闡述一下。這是我從你的答案中瞭解到的(如果我錯了,請糾正我):如果想通過cloudfront傳輸內容,SSE-C類型的加密不適合。爲了通過cloudfront提供數據並在S3上保存數據,必須使用一種服務器端加密,其中密鑰由亞馬遜本身管理,而不是像SSE-KMS這樣的客戶端。 –

+0

或者我仍然可以通過在請求標頭中傳遞密鑰和名稱密鑰來傳輸SSE-C加密視頻? –

+0

我不認爲即使您的應用程序可以將它們注入到請求中,CloudFront也會將必要的標頭傳遞給S3。事實上,考慮到這一點,我不確定CloudFront是否可以與SSE-KMS一起工作,至少在某些S3地區。像倫敦這樣的新地區可能會這樣,但是像俄勒岡州這樣的老地區幾乎肯定不會,因爲一些就地設計特點需要進行改變,以打破一些現有的用途。你能解釋一下用這種方式控制加密的動機嗎?也許你正在解決錯誤的問題? –

相關問題