使用自訂政策建立已簽章的 URL - Amazon CloudFront

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

使用自訂政策建立已簽章的 URL

若要使用自訂政策建立已簽署的 URL,請完成下列程序。

使用自訂政策建立簽章的 URL
  1. 如果您使用 .NET 或 Java 建立簽章的 URL,並且您還沒有將金鑰對的私有金鑰從預設的 .pem 格式重新格式化為與 .NET 或 Java 相容的格式,則現在執行此操作。如需詳細資訊,請參閱重新格式化私有金鑰 (僅限 .NET 和 Java)

  2. 串連下列值。您可以在此範例簽章的 URL 中使用 格式。

    https://d111111abcdef8.cloudfront.net/image.jpg?color=red&size=medium&Policy=eyANCiAgICEXAMPLEW1lbnQiOiBbeyANCiAgICAgICJSZXNvdXJjZSI6Imh0dHA6Ly9kemJlc3FtN3VuMW0wLmNsb3VkZnJvbnQubmV0L2RlbW8ucGhwIiwgDQogICAgICAiQ29uZGl0aW9uIjp7IA0KICAgICAgICAgIklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIyMDcuMTcxLjE4MC4xMDEvMzIifSwNCiAgICAgICAgICJEYXRlR3JlYXRlclRoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTI5Njg2MDE3Nn0sDQogICAgICAgICAiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjEyOTY4NjAyMjZ9DQogICAgICB9IA0KICAgfV0gDQp9DQo&Signature=nitfHRCrtziwO2HwPfWw~yYDhUF5EwRunQA-j19DzZrvDh6hQ73lDx~-ar3UocvvRQVw6EkC~GdpGQyyOSKQim-TxAnW7d8F5Kkai9HVx0FIu-5jcQb0UEmatEXAMPLE3ReXySpLSMj0yCd3ZAB4UcBCAqEijkytL6f3fVYNGQI6&Key-Pair-Id=K2JCJMDEHXQW5F

    移除所有空格 (包括標籤和換行字元)。您可能必須在應用程式的程式碼的字串中包含逸出字元。所有值都有 類型String

    1. 檔案的基本 URL

    如果您未使用簽署的 URL,包括您自我的查詢字串參數 (如果有),則基本 URL 是您用來存取檔案的 CloudFront URL。在上述範例中,基本 URL 為 https://d111111abcdef8.cloudfront.net/image.jpg。如需有關分佈的 URL 格式的詳細資訊,請參閱 自訂 CloudFront 中檔案的 URL 格式

    以下範例說明您為分佈指定的值。

    • 下列 CloudFront URL 適用於分佈中的映像檔案 (使用 CloudFront 網域名稱)。請注意,image.jpg 位於 images 目錄中。在 URL 中檔案的路徑必須與 HTTP 伺服器或 Amazon S3 儲存貯體中的檔案的路徑相符。

      https://d111111abcdef8.cloudfront.net/images/image.jpg

    • 下列 CloudFront URL 包含查詢字串:

      https://d111111abcdef8.cloudfront.net/images/image.jpg?size=large

    • 下列 CloudFront URL 適用於分佈中的圖片檔案。兩種都使用備用網域名稱,第二個包含查詢字串:

      https://www.example.com/images/image.jpg

      https://www.example.com/images/image.jpg?color=red

    • 以下 CloudFront URL 用於分佈中使用備用網域名稱和 HTTPS 通訊協定的圖片檔案:

      https://www.example.com/images/image.jpg

    2. ?

    ? 表示查詢字串參數遵循基本 URL。? 即使您未指定任何查詢參數,也請包含 。

    注意

    您可以依任何順序指定下列查詢參數。

    3. 您的查詢字串參數,如果有的話&

    (選用) 您可以輸入自己的查詢字串參數。若要這樣做,請在每個 之間新增 ampersand (&),例如 color=red&size=medium。您可以在 URL 內以任何順序指定查詢字串參數。

    重要

    您的查詢字串參數無法命名為 PolicySignatureKey-Pair-Id

    如果您新增自己的參數,請在每個參數&後面附加 ,包括最後一個參數。

    4. Policy=政策陳述式的 base64 編碼版本

    您的 JSON 格式政策陳述式,移除空格,然後移除 base64 編碼。如需詳細資訊,請參閱為使用自訂政策的已簽章 URL 建立政策陳述式

    政策陳述式可控制簽署的 URL 授予使用者的存取權限。它包括檔案的 URL、到期日期和時間、URL 變成有效的選擇性日期和時間,以及允許存取檔案的選用 IP 地址或 IP 地址範圍。

    5. &Signature=政策陳述式的雜湊和簽章版本

    JSON 政策聲明的雜湊、簽章和 base64-encoded 版本。如需詳細資訊,請參閱為使用自訂政策的已簽章 URL 建立簽章

    6. &Key-Pair-Id= CloudFront 公有金鑰的公有金鑰 ID,其對應私有金鑰是您用來產生簽章的

    CloudFront 公有金鑰的 ID,例如 K2JCJMDEHXQW5F。公有金鑰 ID 會告訴 CloudFront 要使用哪個公有金鑰來驗證已簽署的 URL。CloudFront 將簽章中的資訊與政策聲明中的資訊進行比較,以驗證該 URL 尚未遭到篡改。

    此公有金鑰必須屬於分佈中信任的簽署者金鑰群組。如需詳細資訊,請參閱指定可以建立已簽署 URLs簽署者

為使用自訂政策的已簽章 URL 建立政策陳述式

請完成以下步驟,以為使用自訂政策之簽署的 URL 建立政策陳述式。

如需以各種方式控制對檔案存取的政策聲明範例,請參閱 使用自訂政策的已簽署 URL 範例政策陳述式

為使用自訂政策的已簽章的 URL 建立政策聲明
  1. 使用下列 JSON 格式建構政策聲明。使用您自己的值取代小於 (<) 和大於 (>) 符號及其中的描述。如需詳細資訊,請參閱您在使用自訂政策的已簽署 URL 政策陳述式中指定的值

    { "Statement": [ { "Resource": "<Optional but recommended: URL of the file>", "Condition": { "DateLessThan": { "AWS:EpochTime": <Required: ending date and time in Unix time format and UTC> }, "DateGreaterThan": { "AWS:EpochTime": <Optional: beginning date and time in Unix time format and UTC> }, "IpAddress": { "AWS:SourceIp": "<Optional: IP address>" } } } ] }

    注意下列事項:

    • 您只能在政策中包含一個陳述式。

    • 使用 UTF-8 字元編碼。

    • 完全按照規定包含所有標點符號和參數名稱。不接受參數名稱的縮寫。

    • Condition 部分的參數順序不重要。

    • 如需有關 ResourceDateLessThanDateGreaterThanIpAddress 值的詳細資訊,請參閱 您在使用自訂政策的已簽署 URL 政策陳述式中指定的值

  2. 從政策陳述式中移除所有空格 (包括標籤和換行字元)。您可能必須在應用程式的程式碼的字串中包含逸出字元。

  3. 使用 MIME base64 編碼 Base64-encode 政策聲明。如需詳細資訊,請參閱 RFC 2045,MIME (多用途網際網路郵件延伸) 第一部分:網際網路訊息內文的格式中的第 6.8 節:Base64 Content-Transfer-Encoding

  4. 將 URL 查詢字串中無效的字元替換為有效的字元。下表列出無效和有效的字元。

    取代這些無效的字元 有了這些有效的字元

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. Policy= 之後,將結果值附加到已簽章的 URL。

  6. 透過政策聲明進行雜湊、簽名和 base64-encoding 來建立用於簽章 URL 的簽章。如需詳細資訊,請參閱為使用自訂政策的已簽章 URL 建立簽章

您在使用自訂政策的已簽署 URL 政策陳述式中指定的值

當您為自訂政策建立政策聲明時,您可以指定以下值。

資源

包括任何查詢字串,但不包括 CloudFront PolicySignatureKey-Pair-Id 參數的 URL。例如:

https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

您只能為 Resource 指定一個 URL 值。

重要

您可以省略政策中的 Resource 參數,但如此便代表任何擁有已簽署 URL 的人,都可以存取與您建立已簽署 URL 的金鑰對關聯的任何分發中的所有檔案。

注意下列事項:

  • 通訊協定 – 此值必須以 http://https://*:// 開頭。

  • 查詢字串參數 – 如果 URL 擁有查詢字串參數,請使用反斜線字元 (\) 來逸出開始查詢字串的問號字元 (?)。例如:

    https://d111111abcdef8.cloudfront.net/images/horizon.jpg\?size=large&license=yes

  • 萬用字元 – 您可以在政策中的 URL 中使用萬用字元。支援下列萬用字元:

    • 星號 (*),符合零或更多字元

    • 問號 (?),剛好符合一個字元

    在 CloudFront 將政策中的 URL 與 HTTP 要求中的 URL 相符時,政策中的 URL 會分為四個區段-通訊協定、網域、路徑和查詢字串),如下所示:

    [protocol]://[domain]/[path]\?[query string]

    當您在政策的 URL 中使用萬用字元時,萬用字元比對只會套用在包含萬用字元的區段邊界內。例如,在政策中考量此 URL:

    https://www.example.com/hello*world

    在此範例中,星號萬用字元 (*) 僅適用於路徑區段中,因此它符合 URL https://www.example.com/helloworldhttps://www.example.com/hello-world,但與 URL https://www.example.net/hello?world 不相符。

    下列例外適用於萬用字元相符的區段邊界:

    • 路徑區段中的結尾星號表示查詢字串區段中的星號。例如,http://example.com/hello* 等同於 http://example.com/hello*\?*

    • 網域區段域部分中的結尾星號表示路徑和查詢字串部分中都有星號。例如,http://example.com* 等同於 http://example.com*/*\?*

    • 政策中的 URL 可以省略通訊協定區段,並在網域區段中以星號開頭。在這種情況下,通訊協定部分暗中設為星號。例如,策略 *example.com 中的 URL 等同於 *://*example.com/

    • 星號本身 ("Resource": "*") 符合任何 URL。

    例如,策略 https://d111111abcdef8.cloudfront.net/*game_download.zip* 中的值:符合下列所有 URL:

    • https://d111111abcdef8.cloudfront.net/game_download.zip

    • https://d111111abcdef8.cloudfront.net/example_game_download.zip?license=yes

    • https://d111111abcdef8.cloudfront.net/test_game_download.zip?license=temp

  • 替代網域名稱 – 如果在 URL 中指定了替代網域名稱 (CNAME),則在引用網頁或應用程式中的檔案時,必須指定替代網域名稱。請勿在政策中為檔案指定 Amazon S3 URL。

DateLessThan

Unix 時間格式 (以秒為單位) 和國際標準時間 (UTC) 的 URL 的到期日期和時間。在政策中,不要將值括在引號中。如需世界協調時間的詳細資訊,請參閱網際網路上的日期和時間:時間戳記

例如,2023 年 1 月 31 日上午 10:00 UTC 以 Unix 時間格式轉換為 1675159200。

這是 Condition 部分中唯一需要的參數。CloudFront 請求這個值,以防止使用者永久存取您的私有內容。

如需詳細資訊,請參閱當 CloudFront 檢查已簽章 URL 中的過期日期和時間時

DateGreaterThan (選用)

Unix 時間格式 (以秒為單位) 和國際標準時間 (UTC) 的 URL 的選用日期和時間。不允許使用者在指定的日期和時間當天或之前存取檔案。不要將值括在引號中。

IpAddress (選用)

提出 HTTP 請求的用戶端 IP 地址。注意下列事項:

  • 要允許任何 IP 位址存取該檔案,請省略 IpAddress 參數。

  • 您可以指定一個 IP 地址或一個 IP 地址範圍。如果用戶端的 IP 地址位於兩個不同的範圍之一,則無法設定政策以允許存取。

  • 若要允許從單一 IP 地址存取,您需要指定:

    "IPv4 IP 地址/32"

  • 必須以標準 IPv4 CIDR 格式指定 IP 地址範圍 (例如 192.0.2.0/24)。如需詳細資訊,請參閱《無類別域間路由 (CIDR):網際網路地址指派和彙總計劃》

    重要

    不支援 IPv6 格式的 IP 地址,例如 2001:0db8:85a3::8a2e:0370:7334。

    如果您使用的是包括 IpAddress 的自訂政策,請不要為分佈啟用 IPv6。如果您希望透過 IP 地址限制對某些內容的存取,並支援對其他內容的 IPv6 請求,則可以建立兩個分佈。如需詳細資訊,請參閱 分佈設定參考 主題中的 啟用 IPv6

使用自訂政策的已簽署 URL 範例政策陳述式

以下範例說明政策聲明說明了如何控制對特定檔案的存取、目錄中的所有檔案,或與金鑰對 ID 相關聯的所有檔案。此範例還會說明了如何控制來自個別 IP 地址或各種 IP 地址的存取,以及如何防止使用者在指定的日期和時間過期後使用簽章 URL。

如果您複製並貼上任何這些範例,請移除任何空格 (包括標籤和換行字元)、將值取代為您自己的值,並在關閉括弧 () 後包含換行字元}

如需詳細資訊,請參閱您在使用自訂政策的已簽署 URL 政策陳述式中指定的值

範例政策陳述式:從 IP 地址範圍存取一個檔案

以下範例自訂政策在已簽署的 URL 中指定使用者在到 UTC 2023 年 1 月 31 日上午 10:00 之前可以從 192.0.2.0/24 範圍內的 IP 地址存取檔案 https://d111111abcdef8.cloudfront.net/game_download.zip

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1675159200 } } } ] }

範例政策陳述式:從一系列 IP 地址存取目錄中的所有檔案

以下範例自訂政策允許您為 training 目錄中的任何檔案建立簽章的 URL,如 Resource 參數中的 (*) 萬用字元所示。使用者在到 UTC 2023 年 1 月 31 日上午 10:00 之前可以從 192.0.2.0/24 範圍內的 IP 地址存取該檔案:

{ "Statement": [ { "Resource": "https://d111111abcdef8.cloudfront.net/training/*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1675159200 } } } ] }

您使用此政策的每個已簽章的 URL 都包括一個識別特定的檔案的基本 URL,例如:

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

範例政策陳述式:從一個 IP 地址存取與金鑰對 ID 相關聯的所有檔案

以下範例自訂政策允許您為與任何分佈關聯的任何檔案建立簽章的 URL,如 Resource 參數中的 (*) 萬用字元所示。已簽署的 URL 必須使用 https:// 通訊協定,而不是 http://。使用者必須使用 IP 地址 192.0.2.10/32。(CIDR 表示法中的 192.0.2.10/32 值是指單個 IP 地址 192.0.2.10。) 這些檔案只能在 2023 年 1 月 31 日上午 10:00 UTC 至 2023 年 2 月 2 日上午 10:00 UTC 之間使用:

{ "Statement": [ { "Resource": "https://*", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.10/32" }, "DateGreaterThan": { "AWS:EpochTime": 1675159200 }, "DateLessThan": { "AWS:EpochTime": 1675332000 } } } ] }

您使用此政策的每個已簽署的 URL 都包括一個基本 URL,用於識別特定 CloudFront 分佈中的特定檔案,例如:

https://d111111abcdef8.cloudfront.net/training/orientation.pdf

該已簽署 URL 還包括金鑰對 ID,必須與在基本 URL 中指定的分佈 (d111111abcdef8.cloudfront.net) 中的可信金鑰群組相關聯。

為使用自訂政策的已簽章 URL 建立簽章

使用自訂政策的已簽章的 URL 的簽章是政策聲明的雜湊、簽章和 base64-encoded 版本。若要建立自訂政策的簽章,請完成以下步驟。

如需有關如何對政策聲明進行雜湊、簽章和編碼的詳細資訊和範例,請參閱:

選項 1:使用自訂政策建立簽章
  1. 使用 SHA-1 雜湊函數和 RSA 對您在為使用自訂政策的已簽章的 URL 建立政策聲明程序中建立的 JSON 政策聲明進行雜湊和簽署。使用不再包含空格但尚未以 base64 編碼的政策陳述式版本。

    對於雜湊函數所需的私有金鑰,使用其公有金鑰在活動的信任金鑰組中的私有金鑰進行分佈。

    注意

    用於雜湊和簽名政策聲明的方法取決於您的程式設計語言和平台。如需程式碼範例,請參閱 為已簽署 URL 建立簽章的程式碼範例

  2. 從雜湊和簽章字串中移除空格 (包括標籤和換行字元)。

  3. 使用 MIME base64 編碼的 Base64-encode 字串。如需詳細資訊,請參閱 RFC 2045,MIME (多用途網際網路郵件延伸) 第一部分:網際網路訊息內文的格式中的第 6.8 節:Base64 Content-Transfer-Encoding

  4. 將 URL 查詢字串中無效的字元替換為有效的字元。下表列出無效和有效的字元。

    取代這些無效的字元 有了這些有效的字元

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. &Signature= 之後,將結果值附加到已簽章的 URL,然後返回到使用自訂政策建立簽章的 URL以完成已簽章的 URL 的各個部分的連接。