使用預先簽章的 URL - Amazon Simple Storage Service

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

使用預先簽章的 URL

若要授予對 Amazon S3 中物件的有限時間存取權限,而不更新儲存貯體政策,您可以使用預先簽章 URL。您可以在瀏覽器中輸入預先簽章的 URL,或由程式用來下載物件。預先簽署的 URL 所使用的認證是產生 URL 之 AWS 使用者的認證。

您也可以使用預先簽章的 URL,允許某人將特定物件上傳到您的 Amazon S3 儲存貯體。這允許上傳,而不需要另一方擁有 AWS 安全認證或權限。如果儲存貯體中已具備預先簽章 URL 中指定之相同金鑰的物件,則 Amazon S3 會使用上傳的物件來取代現有物件。

您可以多次使用此預先簽章 URL,直到到期日期和時間為止。

當您建立預先簽章 URL 時,必須提供安全憑證,然後指定下列項目:

  • Amazon S3 儲存貯體

  • 物件金鑰 (如果下載,則此物件將位於 Amazon S3 儲存貯體中,如果上傳,則這是要上傳的檔案名稱)

  • HTTP 方法 (GET 用於下載物件,或 PUT 用於上傳)

  • 到期時間間隔

目前,Amazon S3 預先簽章 URL 不支援在上傳物件時使用下列資料完整性檢查總和演算法 (CRC32、CRC32C、SHA-1、SHA-256)。若要在上傳物件後驗證其完整性,您可以在透過預先簽章 URL 上傳物件時,提供物件的 MD5 摘要。如需有關物件完整性的詳細資訊,請參閱 檢查物件完整性

誰可以建立預先簽章的 URL

任何具備有效安全憑證的使用者,均可建立預先簽章的 URL。但為了讓某人能順利存取物件,預先簽章的 URL 必須由有權執行預先簽章的 URL 做為基礎之操作的人員來建立。

以下是您可用以建立預先簽章 URL 的憑證類型:

  • IAM 執行個體設定檔 - 有效期限最長 6 小時。

  • AWS Security Token Service - 有效期在使用長期安全憑證簽署時最長為 36 小時,或為暫時憑證的持續時間 (以先到者為準)。

  • IAM 使用者 — 當您使用 AWS 簽名版本 4 時,有效期最長為 7 天。

    若要建立有效期限最長 7 天的預先簽章 URL,請先將 IAM 使用者憑證 (存取金鑰和私密金鑰) 委派給您用於建立預先簽章 URL 的方法。

注意

如果使用暫時憑證建立了預先簽章的 URL,則 URL 會在憑證過期時過期。即使 URL 是以較晚的到期時間建立也一樣。有關臨時安全登入資料生命週期,請參閱 IAM 使用者指南中的比較 AWS STS API 操作

預先簽章網址的到期時間

預先簽章的 URL 在產生 URL 時指定的期間內會保持有效。如果您使用 Amazon S3 主控台建立預先簽章的 URL,到期時間可以設定在 1 分鐘到 12 小時之間。如果您使用 AWS CLI 或 AWS SDK,到期時間最多可設定為 7 天。

如果使用暫時字符建立了預先簽章的 URL,那麼 URL 會在字符過期時過期,即使您使用較晚的過期時間建立 URL 亦然。如需有關您使用的認證如何影響到期時間的詳細資訊,請參閱 誰可以建立預先簽章的 URL

Amazon S3 會在 HTTP 請求時,檢查已簽署的 URL 中的過期日期和時間。例如,如果用戶端在到期前一刻才開始下載大型檔案,則即使在下載期間過期了,下載也會繼續。然而,如果連線中斷並且用戶端在到期時間過後嘗試重新啟動下載,則下載會失敗。

限制預先簽章的 URL 功能

預先簽章的 URL 的功能,受到建立它的使用者許可所限制。實質上,預先簽章的 URL 是一種承載符記,可為擁有這些網址的客戶授與存取權。因此,我們建議您妥善保護它們。以下幾種方法可供您用來限制預先簽章的 URL 使用。

AWS 簽名版本 4

若要在使用 AWS 第 4 版簽署程序 (SigV4) 驗證預先簽章 URL 請求時強制執行特定行為,您可以在儲存貯體政策和存取點政策中使用條件金鑰。例如,下列儲存貯體政策,使用 s3:signatureAge 條件來拒絕任何 DOC-EXAMPLE-BUCKET1 儲存貯體中物件上的 Amazon S3 預先簽章 URL 請求 (如果簽章超過 10 分鐘)。若要使用此範例,請以您自己的資訊取代 user input placeholders

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 min old", "Effect": "Deny", "Principal": {"AWS":"*"}, "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge": 600000 } } } ] }

如需政策金鑰相關 AWS 簽章版本 4 的詳細資訊,請參閱 Amazon 簡單儲存服務 API 參考中的AWS 簽章版本 4 身份驗證

網路路徑限制

如果您想要限制使用預先簽署的 URL 和所有 Amazon S3 存取特定網路路徑,您可以撰寫 AWS Identity and Access Management (IAM) 政策。您可以在進行呼叫的 IAM 主體、Amazon S3 儲存貯體,或兩者上設定政策。

IAM 主體的網路路徑限制需要這些憑證的使用者從指定的網路發出請求。儲存貯體或存取點上的限制要求所有對該資源的請求都來自指定網路。這些限制也適用於預先簽章的 URL 案例之外。

您使用的 IAM 全域條件金鑰取決於端點類型。如果您正在使用 Amazon S3 的公有端點,請使用 aws:SourceIp。如果您正在使用虛擬私有雲端 (VPC) 端點到 Amazon S3,請使用 aws:SourceVpcaws:SourceVpce

下列 IAM 政策聲明要求主體 AWS 只能從指定的網路範圍存取。由於此政策聲明,所有存取均必須源自該範圍。這包含某人使用 Amazon S3 預先簽章 URL 的情況。若要使用此範例,請以您自己的資訊取代 user input placeholders

{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }

如需使用aws:SourceIp AWS 全域條件金鑰將 Amazon S3 儲存貯體存取限制在特定網路範圍內的其他儲存貯體政策範例,請參閱根據特定 IP 地位址管理存取