本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 政策一律包含 expiration和 conditions元素。範例政策使用兩種條件比對類型 (完全比對和開頭比對)。下列各節說明這些元素。
Expiration
expiration 元素會以 ISO8601 GMT 日期格式指定 POST 政策的過期日期和時間。例如, 2013-08-01T12:00:00.000Z 指定 POST 政策在 2013 年 8 月 1 日 GMT 午夜之後無效。
條件比對
以下是描述條件比對類型的表格,您可以用來指定 POST 政策條件 (下一節說明)。雖然您必須為表單中指定的每個表單欄位指定至少一個條件,但您可以透過為表單欄位指定多個條件來建立更複雜的相符條件。
| 條件比對類型 | 說明 |
|---|---|
|
完全符合 |
表單欄位值必須符合指定的值。下列範例表示 ACL 必須設定為 public-read:
您也可以使用下列範例來表示 ACL 必須設定為 public-read:
|
|
開頭為 |
值必須以指定的值開頭。此範例指出物件金鑰必須以 user/user1 開頭:
|
|
符合逗號分隔清單中的內容類型 |
包含逗號之
下列值會傳遞 條件:
下列值不會傳遞 條件:
注意以外的資料元素 |
|
符合任何內容 |
若要設定 POST 政策以允許表單欄位中的任何內容,請使用
|
|
指定範圍 |
對於接受範圍的表單欄位,請以逗號分隔上限和下限。此範例允許 1 到 10 MiB 的檔案大小:
|
POST 政策支援的特定條件如 中所述條件。
條件
POST 政策conditions中的 是 物件陣列,每個都用來驗證請求。您可以使用這些條件來限制請求中允許的內容。例如,上述政策條件需要下列項目:
-
請求必須指定儲存
johnsmith貯體名稱。 -
物件金鑰名稱必須有
user/eric字首。 -
物件 ACL 必須設定為
public-read。
您以形式指定的每個表單欄位 (除了 x-amz-signature、policy、 file和具有字x-ignore-首的欄位名稱) 都必須出現在條件清單中。
注意
驗證 POST 政策之前,會展開表單中的所有變數。因此,所有條件比對都應該與展開的表單欄位相符。假設您想要將物件金鑰名稱限制為特定字首 (user/user1)。在此情況下,您將金鑰表單欄位設定為 user/user1/${filename}。您的 POST 政策應該是 [ "starts-with", "$key", "user/user1/" ](請勿輸入 [ "starts-with", "$key", "user/user1/${filename}" ])。如需詳細資訊,請參閱條件比對。
下表說明政策文件條件。
| 元素名稱 | 說明 |
|---|---|
acl |
指定必須在表單提交中使用的 ACL 值。 此條件支援精確比對,以及下節中討論 |
bucket |
指定可接受的儲存貯體名稱。 此條件支援完全相符的條件比對類型。 |
content-length-range |
上傳內容的允許大小下限和上限。 此條件支援 |
Cache-Control
|
REST 特定標頭。如需詳細資訊,請參閱POST 物件。 此條件支援完全相符和 |
key |
可接受的金鑰名稱或已上傳物件的字首。 此條件支援完全相符和 |
success_action_redirect
|
用戶端成功上傳時被重新導向的目標 URL。 此條件支援完全相符和 |
success_action_status |
如果 此條件支援完全相符。 |
x-amz-algorithm |
在簽章計算期間必須使用的簽署演算法。對於 AWS Signature 第 4 版,值為 此條件支援完全相符。 |
x-amz-credential |
您用來計算簽章的登入資料。它提供存取金鑰 ID 和範圍資訊,識別簽章有效的區域和服務。這應該與您用於計算簽署金鑰以進行簽章計算的範圍相同。 這是以下格式的字串:
例如:
對於 Amazon S3,aws-service 字串為 此條件支援完全相符。 |
x-amz-date |
ISO8601 格式字串中指定的日期值。例如 如果請求中包含 POST 政策文件,則此為必要項目。 此條件支援完全相符。 |
x-amz-security-token |
Amazon DevPay 安全字符。 每個使用 Amazon DevPay 的請求都需要兩個 如需 Amazon DevPay 的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用 DevPay。 |
x-amz-meta-* |
使用者指定的中繼資料。 此條件支援完全相符和 |
x-amz-* |
如需其他 此條件支援完全相符。 |
注意
如果您的工具組新增更多表單欄位 (例如 Flash 新增 filename),您必須將它們新增至 POST 政策文件。如果您可以控制此功能,請在欄位前面加上 x-ignore-,讓 Amazon S3 忽略此功能,這不會影響此功能的未來版本。
字元逸出
下表說明必須在 POST 政策文件中逸出的字元。
| 逸出序列 | 描述 |
|---|---|
|
\\ |
反斜線 |
|
\$ |
美元符號 |
|
\b |
退格鍵 |
|
\f |
Form Feed |
|
\n |
新行 |
|
\r |
歸位字元 |
|
\t |
水平標籤 |
|
\v |
垂直標籤 |
|
\u |
所有 Unicode 字元 |
現在您已熟悉表單和政策,並了解簽署的運作方式,您可以嘗試 POST 上傳範例。您需要撰寫程式碼來計算簽章。此範例提供範例表單,以及可用來測試簽章計算的 POST 政策。如需詳細資訊,請參閱範例:使用 HTTP POST 以瀏覽器為基礎的上傳 (使用 AWS Signature 第 4 版)。