簡體   English   中英

在 response-content-disposition 中添加 *=utf-8'' 后,AWS CloudFront 返回來自 S3 Origin 的訪問被拒絕

[英]AWS CloudFront Returns Access Denied from S3 Origin after adding *=utf-8'' in response-content-disposition

目前,我簽名的 URL 如下所示,並且工作正常:

https://cloudfront/filekey?response-content-disposition=inline%3Bfilename%3D{utf-8-encoded-filename.pdf}&Expires=...

但有些文件名包含 unicode 字符,因此 CloudFront 會返回:

<Error>
    <Code>InvalidArgument</Code>
    <Message>
        Header value cannot be represented using ISO-8859-1.
    </Message>
    <ArgumentName>response-content-disposition</ArgumentName>
    <ArgumentValue>inline;filename=文件名 - abc.pdf</ArgumentValue>
    <RequestId>1234567890</RequestId>
    <HostId>
        123456789
    </HostId>
</Error>

因此,正如許多人建議的那樣(例如AWS 開發人員論壇),我在response-content-disposition中添加了 * =uft-8'' ,如下所示:

https://cloudfront/filekey?response-content-disposition=inline%3Bfilename%2A%3DUTF-8%27%27{utf-8-encoded-filename.pdf}&Expires=...

現在它回來了

<Error>
  <Code>AccessDenied</Code>
  <Message>Access denied</Message>
</Error>

它的源域名是這樣的格式: AWSDOC-EXAMPLE-BUCKET.s3.eu-west-1.amazonaws.com ,所以它是一個S3 REST ZDB974238714CA8DE63Z4A7ACE1端點。

源訪問身份 (OAI)配置有現有身份。 我選擇手動更新 S3 存儲桶的權限。

在 S3 中,對象是 AES-256 加密的。 在桶策略中,只有一條語句允許 OAI 訪問。 此存儲桶和對象的所有者是同一個帳戶。

閱讀后,我使用 S3 REST API 端點作為我的 CloudFront 分發的來源。 為什么我會收到 403 Access Denied 錯誤? ,我開始想也許是因為文件名不匹配?

上傳的文件名為文件名 - abc.pdf ,但在 s3 中顯示為__abc.pdf 但是我嘗試在response-content-disposition中使用__abc.pdf ,它仍然返回我訪問被拒絕。

我終於讓它工作了,所以我想我最好在這里寫下我的解決方案。

當一個 object 上傳到 S3 時,它的文件名將被編碼,正如我在問題中提到的:文件名 - abc.pdf -> __abc.Z437175BA4191210EE004E1D937Z449 但是我們數據庫中保存的文件名仍然是原始文件名,所以它會返回拒絕訪問,因為文件名是錯誤的。

但是,如果我在response-content-disposition中使用__abc.pdf ,它仍然返回拒絕訪問。 因為我忘記了我使用的是簽名的 URL,它是基於 object 密鑰和response-content-disposition簽名的。

所以在這里我根本不需要添加 utf-8。 我應該修改我的 url 生成代碼,而不是簡單地更改瀏覽器中的響應內容處置

此外,因為我不確定 S3 是如何編碼文件名的,所以我直接從 object 鍵中提取文件名。 以下是我用 Scala 編寫的代碼:

// r.s3ObjectKey is in format: YYYY/MM/DD/encodedFileName-digits
val fileName = r.s3ObjectKey.split("/").last.split("-").dropRight(1).mkString("-")

暫無
暫無

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

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