View a markdown version of this page

POST 政策 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

POST 政策

使用 HTTP POST 提出已驗證請求所需的政策是以 JavaScript 物件標記法 (JSON) 撰寫的 UTF-8 和 base64 編碼文件,指定請求必須符合的條件。根據您設計政策文件的方式,您可以控制每個上傳、每個使用者、所有上傳的存取精細程度,或根據符合您需求的其他設計。

本節說明 POST 政策。如需使用 POST 政策的簽章計算範例,請參閱 範例:使用 HTTP POST 以瀏覽器為基礎的上傳 (使用 AWS Signature 第 4 版)

注意

雖然政策文件是選用的,但強烈建議您使用政策文件來控制請求中允許的項目。如果您讓儲存貯體可公開寫入,則完全無法控制哪些使用者可以寫入您的儲存貯體。

以下是 POST 政策文件的範例。

{ "expiration": "2007-12-01T12:00:00.000Z", "conditions": [ {"acl": "public-read" }, {"bucket": "johnsmith" }, ["starts-with", "$key", "user/eric/"], ] }

POST 政策一律包含 expirationconditions元素。範例政策使用兩種條件比對類型 (完全比對和開頭比對)。下列各節說明這些元素。

Expiration

expiration 元素會以 ISO8601 GMT 日期格式指定 POST 政策的過期日期和時間。例如, 2013-08-01T12:00:00.000Z 指定 POST 政策在 2013 年 8 月 1 日 GMT 午夜之後無效。

條件比對

以下是描述條件比對類型的表格,您可以用來指定 POST 政策條件 (下一節說明)。雖然您必須為表單中指定的每個表單欄位指定至少一個條件,但您可以透過為表單欄位指定多個條件來建立更複雜的相符條件。

條件比對類型 說明

完全符合

表單欄位值必須符合指定的值。下列範例表示 ACL 必須設定為 public-read:

{"acl": "public-read" }

您也可以使用下列範例來表示 ACL 必須設定為 public-read:

[ "eq", "$acl", "public-read" ]

開頭為

值必須以指定的值開頭。此範例指出物件金鑰必須以 user/user1 開頭:

["starts-with", "$key", "user/user1/"]

符合逗號分隔清單中的內容類型

包含逗號之starts-with條件的 Content-Types 值會解譯為清單。清單中的每個值必須符合要傳遞整個條件的條件。例如,提供下列條件:

["starts-with", "$Content-Type", "image/"]

下列值會傳遞 條件:

"image/jpg,image/png,image/gif"

下列值不會傳遞 條件:

["image/jpg,text/plain"]
注意

以外的資料元素Content-Type會視為字串,無論逗號是否存在。

符合任何內容

若要設定 POST 政策以允許表單欄位中的任何內容,請使用 starts-with搭配空值 ("")。此範例允許 的任何值success_action_redirect

["starts-with", "$success_action_redirect", ""]

指定範圍

對於接受範圍的表單欄位,請以逗號分隔上限和下限。此範例允許 1 到 10 MiB 的檔案大小:

["content-length-range", 1048576, 10485760]

POST 政策支援的特定條件如 中所述條件

條件

POST 政策conditions中的 是 物件陣列,每個都用來驗證請求。您可以使用這些條件來限制請求中允許的內容。例如,上述政策條件需要下列項目:

  • 請求必須指定儲存johnsmith貯體名稱。

  • 物件金鑰名稱必須有 user/eric字首。

  • 物件 ACL 必須設定為 public-read

您以形式指定的每個表單欄位 (除了 x-amz-signaturepolicyfile和具有字x-ignore-首的欄位名稱) 都必須出現在條件清單中。

注意

驗證 POST 政策之前,會展開表單中的所有變數。因此,所有條件比對都應該與展開的表單欄位相符。假設您想要將物件金鑰名稱限制為特定字首 (user/user1)。在此情況下,您將金鑰表單欄位設定為 user/user1/${filename}。您的 POST 政策應該是 [ "starts-with", "$key", "user/user1/" ](請勿輸入 [ "starts-with", "$key", "user/user1/${filename}" ])。如需詳細資訊,請參閱條件比對

下表說明政策文件條件。

元素名稱 說明
acl

指定必須在表單提交中使用的 ACL 值。

此條件支援精確比對,以及下節中討論starts-with的條件比對類型。

bucket

指定可接受的儲存貯體名稱。

此條件支援完全相符的條件比對類型。

content-length-range

上傳內容的允許大小下限和上限。

此條件支援content-length-range條件比對類型。

Cache-Control

Content-Type

Content-Disposition

Content-Encoding

Expires

REST 特定標頭。如需詳細資訊,請參閱POST 物件

此條件支援完全相符和starts-with條件相符類型。

key

可接受的金鑰名稱或已上傳物件的字首。

此條件支援完全相符和starts-with條件相符類型。

success_action_redirect

redirect

用戶端成功上傳時被重新導向的目標 URL。

此條件支援完全相符和starts-with條件相符類型。

success_action_status

如果success_action_redirect未指定 ,則在成功上傳時傳回用戶端的狀態碼。

此條件支援完全相符。

x-amz-algorithm

在簽章計算期間必須使用的簽署演算法。對於 AWS Signature 第 4 版,值為 AWS4-HMAC-SHA256

此條件支援完全相符。

x-amz-credential

您用來計算簽章的登入資料。它提供存取金鑰 ID 和範圍資訊,識別簽章有效的區域和服務。這應該與您用於計算簽署金鑰以進行簽章計算的範圍相同。

這是以下格式的字串:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

例如:

AKIAIOSFODNN7EXAMPLE/20130728/us-east-1/s3/aws4_request

對於 Amazon S3,aws-service 字串為 s3。如需 Amazon S3 aws-region字串的清單,請參閱 中的區域和端點AWS 一般參考。如果請求中包含 POST 政策文件,則此為必要項目。

此條件支援完全相符。

x-amz-date

ISO8601 格式字串中指定的日期值。例如 20130728T000000Z。日期必須與您在建立簽章計算的簽署金鑰時所使用的日期相同。

如果請求中包含 POST 政策文件,則此為必要項目。

此條件支援完全相符。

x-amz-security-token

Amazon DevPay 安全字符。

每個使用 Amazon DevPay 的請求都需要兩個 x-amz-security-token 表單欄位:一個表示產品字符,另一個表示使用者字符。因此,必須以逗號分隔其值。例如,如果使用者字符是 ,eW91dHViZQ==而產品字符是 b0hnNVNKWVJIQTA=,您可以將 POST 政策項目設定為:{ "x-amz-security-token": "eW91dHViZQ==,b0hnNVNKWVJIQTA=" }

如需 Amazon DevPay 的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用 DevPay

x-amz-meta-*

使用者指定的中繼資料。

此條件支援完全相符和starts-with條件相符類型。

x-amz-*

如需其他x-amz-*標頭,請參閱 POST 物件 (POST 物件

此條件支援完全相符。

注意

如果您的工具組新增更多表單欄位 (例如 Flash 新增 filename),您必須將它們新增至 POST 政策文件。如果您可以控制此功能,請在欄位前面加上 x-ignore-,讓 Amazon S3 忽略此功能,這不會影響此功能的未來版本。

字元逸出

下表說明必須在 POST 政策文件中逸出的字元。

逸出序列 描述

\\

反斜線

\$

美元符號

\b

退格鍵

\f

Form Feed

\n

新行

\r

歸位字元

\t

水平標籤

\v

垂直標籤

\uxxxx

所有 Unicode 字元

現在您已熟悉表單和政策,並了解簽署的運作方式,您可以嘗試 POST 上傳範例。您需要撰寫程式碼來計算簽章。此範例提供範例表單,以及可用來測試簽章計算的 POST 政策。如需詳細資訊,請參閱範例:使用 HTTP POST 以瀏覽器為基礎的上傳 (使用 AWS Signature 第 4 版)