

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

# 使用已簽署 URL
<a name="private-content-signed-urls"></a>

已簽章的 URL 包含附加資訊，例如到期日期和時間，以便您更有效地控制對內容的存取。此附加資訊顯示在政策聲明中，該政策聲明基於標準政策或自訂政策。標準和自訂政策之間的差異將在接下來的兩節中說明。

**注意**  
您可使用標準政策建立一些簽章的 URL，並使用自訂政策為相同的分佈建立一些簽章的 URL。

**Topics**
+ [決定對已簽署 URL 使用標準或自訂政策](#private-content-choosing-canned-custom-policy)
+ [已簽署 URL 的工作方式](#private-content-how-signed-urls-work)
+ [決定已簽署 URL 的有效時間](#private-content-overview-choosing-duration)
+ [CloudFront 何時檢查已簽署 URL 中的到期日期和時間](#private-content-check-expiration)
+ [範例程式碼和第三方工具](#private-content-overview-sample-code)
+ [使用標準政策建立已簽署 URL](private-content-creating-signed-url-canned-policy.md)
+ [使用自訂政策建立已簽署 URL](private-content-creating-signed-url-custom-policy.md)

## 決定對已簽署 URL 使用標準或自訂政策
<a name="private-content-choosing-canned-custom-policy"></a>

當您建立已簽章的 URL 時，您將編寫一個 JSON 格式的政策聲明來指定對已簽章的 URL 的限制，例如 URL 的有效時間。您可以使用標準政策或自訂政策。以下是標準和自訂政策的比較：


****  

| 描述 | 標準政策 | 自訂政策 | 
| --- | --- | --- | 
| 您可以重複使用多個檔案的政策聲明。要重複使用政策聲明，您必須在 `Resource` 物件中使用萬用字元。如需詳細資訊，請參閱 [您在使用自訂政策的已簽署 URL 政策陳述式中指定的值](private-content-creating-signed-url-custom-policy.md#private-content-custom-policy-statement-values))。 | 否 | 是 | 
| 您可以指定使用者可以開始存取您的內容的日期和時間。 | 否 | 是 (選用) | 
| 您可以指定使用者無法再存取您的內容的日期和時間。 | 是 | 是 | 
| 您可以指定可以存取您的內容的使用者的 IP 位址或 IP 位址範圍。 | 否 | 是 (選用) | 
| 該已簽章的 URL 包含該政策的 base64 編碼版本，這會導致較長的 URL。 | 否 | 是 | 

如需使用*標準*政策建立已簽署的 URL 的詳細資訊，請參閱 [使用標準政策建立已簽署 URL](private-content-creating-signed-url-canned-policy.md)。

如需使用*自訂*政策建立已簽署的 URL 的詳細資訊，請參閱 [使用自訂政策建立已簽署 URL](private-content-creating-signed-url-custom-policy.md)。

## 已簽署 URL 的工作方式
<a name="private-content-how-signed-urls-work"></a>

以下概述您如何為已簽署的 URL 設定 CloudFront 和 Amazon S3，以及當使用者使用已簽署的 URL 要求檔案時，CloudFront 如何回應。

1. 在您的 CloudFront 分佈中，指定一或多個信任的金鑰群組，其中包含 CloudFront 可用來驗證 URL 簽章的公有金鑰。您可以使用對應的私有金鑰來簽署 URL。

   CloudFront 支援具有 RSA 2048 和 ECDSA 256 金鑰簽章的已簽署 URL。

   如需詳細資訊，請參閱[指定可以建立已簽署 URL 和已簽署 Cookie 的簽署者](private-content-trusted-signers.md)。

1. 開發應用程式以判斷使用者是否應該有權存取您的內容，並為您所要限制存取的應用程式的檔案或某些部分建立的簽署 URL。如需詳細資訊，請參閱下列主題：
   + [使用標準政策建立已簽署 URL](private-content-creating-signed-url-canned-policy.md)
   + [使用自訂政策建立已簽署 URL](private-content-creating-signed-url-custom-policy.md)

1. 使用者請求檔案用於所要請求的簽章 URL。

1. 您的應用程式會驗證使用者是否有權存取檔案：他們已經登入，他們已經支付存取內容的費用，或者他們已經滿足其他一些存取要求。

1. 您的應用程式會建立和傳回已簽章的 URL 給使用者。

1. 已簽章的 URL 允許使用者下載或串流內容。

   這個步驟是自動的；使用者通常不需要執行任何額外操作來存取內容。例如，如果使用者在 Web 瀏覽器l中存取您的內容時，則應用程式會將已簽章的 URL 傳回到瀏覽器。瀏覽器立即使用已簽署的 URL 存取 CloudFront 邊緣快取中的檔案，無需使用者的任何干預。

1. CloudFront 使用公有金鑰來驗證簽章，並確認 URL 尚未遭到篡改。如果簽章無效，請求會遭到拒絕。

   如果簽章有效，CloudFront 將查看 URL 中的政策聲明 (或如果使用的是標準政策，則建構一個聲明) 以確認請求仍然有效。例如，如果您為 URL 指定了開始和結束日期和時間，CloudFront 會確認使用者在您希望允許存取的時間段內嘗試存取您的內容。

   如果請求符合政策聲明中的請求，CloudFront 會執行標準操作：決定檔案是否已經在邊緣上快取，如果需要，將請求轉傳到原始伺服器，並將該檔案傳回給使用者。

**注意**  
如果不帶正負號的 URL 包含查詢字串參數，請務必將這些參數包含在您已簽署 URL 部分中。如果在簽署已簽署 URL 之後，將查詢字串新增此 URL，則 URL 會傳回 HTTP 403 狀態。

## 決定已簽署 URL 的有效時間
<a name="private-content-overview-choosing-duration"></a>

您可以分配私有內容以僅在短時間內使用已簽章的有效 URL (可能只有區區幾分鐘)。有效期很短的簽章 URL 適合於為了特定目的而將內容即時分佈給使用者，例如按需要對客戶作電影租賃或音樂下載的分佈。如果已簽章的 URL 僅在短時間內有效，您可能會希望使用您開發的應用程式自動產生他們。當使用者開始下載檔案或開始播放媒體檔案時，CloudFront 會將 URL 中的到期時間與目前時間進行比較，以判斷 URL 是否仍然有效。

您還可以使用有效期較長的 (可能會持續數年) 已簽章的 URL 分配私有內容。有效期較長的已簽章的 URL 對於向已知使用者分佈私有內容非常有用，例如向投資者分佈業務計畫或向員工分佈培訓教材。您可以開發應用程式，為您產生這些長期簽署的 URL。

## CloudFront 何時檢查已簽署 URL 中的到期日期和時間
<a name="private-content-check-expiration"></a>

CloudFront 會在 HTTP 請求時，在已簽署 URL 中檢查過期日期和時間。如果用戶端在到期前一刻才開始下載大型檔案，則即使在下載期間過期了，下載也應該要完成。如果 TCP 連線中斷並且用戶端在到期時間過後嘗試重新啟動下載，則下載將失敗。

如果用戶端使用範圍 GET 以取得較小型的檔案，則到期時間過後發生的任何 GET 請求都將失敗。如需範圍 GET 的詳細資訊，請參閱 [CloudFront 如何處理物件的部分請求 (範圍 GET)](RangeGETs.md)。

## 範例程式碼和第三方工具
<a name="private-content-overview-sample-code"></a>

如需建立已簽署 URL 的雜湊和已簽署部分的範例程式碼，請參閱下列主題：
+ [使用 Perl 建立 URL 簽章](CreateURLPerl.md)
+ [使用 PHP 建立 URL 簽章](CreateURL_PHP.md)
+ [使用 C\$1 和 .NET 架構建立 URL 簽章](CreateSignatureInCSharp.md)
+ [使用 Java 建立 URL 簽章](CFPrivateDistJavaDevelopment.md)