本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
附錄 A: AWS 服務 如何使用預先簽章URLs
此附錄提供使用預先簽章 URLs之 AWS 服務 和 功能的相關資訊。此資訊有兩種用途:
-
為實作控制項的安全工程師提供這些控制項可能影響的資訊。
-
建立此風險可能與 URL 記錄互動相關的情況意識。
重要
此附錄不提供預先簽章 URLs 的完整清單 AWS 服務 或其使用方式。它也不涵蓋自訂或第三方解決方案。
Amazon S3 主控台
主體:主控台使用者
預設過期時間:5 分鐘
免責聲明
本節記錄 Amazon S3 console. AWS console 行為的目前行為可能會有所變更,恕不另行通知。
Amazon S3 主控台支援下載和上傳物件。 下載使用過期時間為 300 秒 (5 分鐘) 的預先簽章 URL。 URL 是由對 的請求產生https://<bucket-region>.console.aws.amazon.com/s3/batchOpsServlet-proxy。
該請求會在使用者按一下下載按鈕時啟動,因此 URL 不會預先產生或傳送至用戶端,直到發生明確的下載請求為止。
上傳類似,但主控台會傳送兩個請求:OPTIONS做為預檢 CORS 檢查,以及 PUT。這兩個請求都使用相同的簽章。
用於簽署的登入資料是與目前登入使用者相關聯的臨時登入資料。取得這些臨時登入資料的方法詳細資訊超出本指南的範圍。
Amazon S3 Object Lambda
主體:存取點呼叫者
預設過期時間:61 秒
注意
自 2025 年 11 月 7 日起,S3 Object Lambda 僅適用於目前正在使用該服務的現有客戶,以及 select AWS Partner Network (APN) 合作夥伴。對於類似 S3 Object Lambda 的功能,請在此處進一步了解 – Amazon S3 Object Lambda 可用性變更。
Amazon S3 Object LambdainputS3Url),可用來從支援的存取點下載原始物件。
這些預先簽章URLs 會針對支援的 Amazon S3 存取點簽署,該存取點會在您設定 S3 Object Lambda 時提供。(這與 Object Lambda 存取點不同。) 不使用繫結至 Lambda 函數的角色,而是使用原始發起人的身分來簽署 URL,而且當使用 URL 時,將套用該使用者的許可。如果 URL 中有已簽章的標頭,Lambda 函數必須在對 Amazon S3 的呼叫中包含這些標頭。
傳回的預先簽章 URL 的過期時間為 61 秒 (比 S3 Object Lambda 函數的最長持續時間多一秒)。產生的 URL 只能與支援的存取點搭配使用。S3 Object Lambda 存取點的發起人需要能夠存取此存取點。您可以使用條件 來限制對 S3 Object Lambda 內容的存取"aws:CalledVia": ["s3-object-lambda.amazonaws.com"]。當該條件連接到支援的存取點或儲存貯體時,使用者無法直接存取支援的存取點或儲存貯體。
此方法的值是,不需要授予 Lambda 函數存取 S3 儲存貯體或存取點的權限。與 Lambda 函數相關聯的角色將需要 WriteGetObjectResponse 的許可,但不需要 GetObject 的許可。
當 S3 Object Lambda 產生預先簽章URLs 時,不會新增網路限制,因此 URL 可以在 Lambda 函數之外使用。不過,對 S3 Object Lambda 發起人施加的任何限制仍然適用。例如,如果您的 Lambda 函數在 VPC 中執行,且您將發起人限制為使用 VPC 端點,則擁有預先簽章 URL 的任何人都需要能夠透過該 VPC 端點傳送。此限制也適用於 SourceIp 和 VpcSourceIp。
注意
若要在 VPC 中使用 S3 Object Lambda 函數,VPC 必須具有公有 S3 端點的路由,才能呼叫 WriteGetObjectResponse。這並不表示使用 VPC 端點的需求不適用於從儲存貯體擷取資料的請求。
AWS Lambda 跨區域 CopyObject
委託人:AWS 內部
預設過期時間:3600 秒
當您使用 CopyObject 或 UploadPartCopy API 進行複製時 AWS 區域,Amazon S3 會在內部使用預先簽章URLs。這些 APIs可以直接從 SDKs或 AWS CLI 命令 aws s3api copy-object和 呼叫aws s3api upload-part。這些 APIs 不會用於 Amazon S3 複寫,但當來源和目的地是 S3 儲存貯體時, 和 aws s3 sync命令會使用這些 AWS CLI aws s3 cp API。它們也受到各種 AWS SDKs 中的TransferManager實作支援。
AWS Lambda GetFunction
Principal: AWS internal
預設過期時間:10 分鐘
AWS Lambda 會將使用者版本存放在 Lambda 團隊擁有的 S3 儲存貯體中, 在產生部署到 Lambda 容器的資產之前。當您想要存取函數的程式碼時, 您呼叫 GetFunction API。此 API 會以 回應Code.Location, 其中包含 10 分鐘內有效的預先簽章 URL (此過期時間是目前行為而非已發佈的合約)。如果您不想要程式碼, 您可以使用 GetFunctionConfiguration、 GetFunctionConcurrency、 和 ListTags,以擷取 傳回的其他資料GetFunction。
傳回的 URL 不會使用目前登入使用者的登入資料簽署,而是由 Lambda 代表使用者簽署。因此,套用至目前登入使用者或使用者臨時工作階段登入資料的條件金鑰 (例如 aws:SourceIP) 不適用於產生的 URL。無論條件金鑰是僅套用至 GetFunction,還是套用至使用者或工作階段的所有 AWS API 用量,都是如此。
Lambda 主控台也會使用 GetFunction 及其傳回的預先簽章 URL。主控台會使用與目前登入使用者相關聯的暫時登入資料來呼叫 GetFunction。取得這些臨時登入資料的詳細資訊超出本文件的範圍。
Amazon ECR
Principal: AWS internal
預設過期時間:1 小時
Amazon Elastic Container Registry (Amazon ECR) 提供 GetDownloadUrlForLayer API,傳回一個預先簽章的 URL,有效期為一小時,並支援從 Amazon ECR 映像下載單一層。不過,Amazon ECR 代理會使用此操作,使用者通常不會使用此操作來提取和推送映像。
Amazon Redshift Spectrum
委託人:透過 傳遞給 CREATE EXTERNAL SCHEMA 的角色 IAM_ROLE
預設過期時間:1 小時
Amazon Redshift Spectrum 在內部使用預先簽章URLs,並禁止對儲存貯體和 Amazon Redshift 角色組合的限制,這會限制預先簽章URLs。您可以使用 16 分鐘s3:signatureAge的值,但非常低的值不可靠。您可以使用的最小值取決於查詢的時間和大小。雖然低於 16 分鐘的值適用於許多案例,但它需要測試。角色可以且應該限制為僅供 Redshift Spectrum 使用,Redshift Spectrum 不會公開其產生的 URLs,因此可以減輕較低過期值的典型理由。
Amazon SageMaker AI Studio
Amazon SageMaker AI Studio 支援兩個 API 動作:CreatePresignedDomainUrl 和 CreatePresignedNotebookInstanceUrl。不過,這些 APIs 與 Signature 第 4 版預先簽章的 URL 功能無關。這些 APIs會建立使用 authToken 參數的 URL,但不支援任何標準 Signature 第 4 版查詢參數。
authToken 是不同的機制,但與預先簽章URLs 相似。它以查詢字串參數的形式傳送,並支援 5 分鐘的過期時間。
SageMaker AI 支援網路限制。如果您對sagemaker:CreatePresignedDomainUrl動作施加限制,該動作會同時套用到呼叫 CreatePresignedDomainUrl 和使用產生的 URL。如果 URL 從有效網路產生,然後由非有效網路傳送,則產生 URL 的 API 呼叫會成功,但傳送 URL 的請求會失敗。CreatePresignedNotebookInstanceUrl 和 sagemaker:CreatePresignedNotebookInstanceUrl動作也是如此。
如需詳細資訊,請參閱 SageMaker AI 文件。