使用預先簽章的 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 摘要。如需有關物件完整性的詳細資訊,請參閱 在 Amazon S3 中檢查物件完整性

誰可以建立預先簽章的 URL

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

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

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

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

  • IAM 使用者 – 使用 AWS Signature 第 4 版時,有效期最長為 7 天。

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

注意

如果使用暫時憑證建立了預先簽章的 URL,則 URL 會在憑證過期時過期。一般而言,預先簽章的 URL 會在您用來建立它的憑證遭到撤銷、刪除或停用時過期。即使 URL 是以較晚的到期時間建立也一樣。如需暫時性安全登入資料生命週期,請參閱《IAM 使用者指南》中的比較 AWS STS API 操作

預先簽章網址的到期時間

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

如果您使用臨時權杖建立了預先簽章的 URL,則 URL 會在權杖過期時過期。一般而言,預先簽章的 URL 會在您用來建立它的憑證遭到撤銷、刪除或停用時過期。即使 URL 是以較晚的到期時間建立也一樣。如需有關您使用的認證如何影響到期時間的詳細資訊,請參閱 誰可以建立預先簽章的 URL

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

限制預先簽章的 URL 功能

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

AWS Signature 第 4 版 (SigV4)

若要在使用 AWS 第 4 版簽署程序 (SigV4) 驗證預先簽章 URL 請求時強制執行特定行為,您可以在儲存貯體政策和存取點政策中使用條件金鑰。例如,下列儲存貯體政策,使用 s3:signatureAge 條件來拒絕任何 amzn-s3-demo-bucket 儲存貯體中物件上的 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:::amzn-s3-demo-bucket/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge": 600000 } } } ] }

如需政策金鑰相關 AWS Signature 第 4 版的詳細資訊,請參閱AWS 《Amazon Simple Storage Service API 參考》中的 Signature 第 4 版身分驗證

網路路徑限制

如果您想要限制使用預先簽章URLs 和所有 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"} } }