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

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

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

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

URL 使用自訂政策建立已簽署
  1. 如果您使用 .NET 或 Java 來建立已簽署的 URLs,而且尚未將金鑰對的私有金鑰從預設 .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.Base URL for the file

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

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

    • 以下是 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 URLs分佈中的映像檔案。兩種都使用備用網域名稱,第二個包含查詢字串:

      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.Your query string parameters, if any&

    此值是選用的。如果您希望新增自己的查詢字串參數,例如:

    color=red&size=medium

    然後在 Policy 參數之前,在 ?和 之後新增它們。在極少數情況下,您可能需要將查詢字串參數放在 Key-Pair-Id 之後。

    重要

    您的參數不能被命名為 PolicySignatureKey-Pair-Id

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

    4. Policy= base64 encoded version of policy statement

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

    政策陳述式控制已簽署URL授予使用者的存取權。它包含 檔案URL的 、過期日期和時間、 URL生效的選用日期和時間,以及允許存取檔案的選用 IP 地址或 IP 地址範圍。

    5. &Signature= hashed and signed version of the policy statement

    JSON 政策陳述式的雜湊、簽章和 base64 編碼版本。如需詳細資訊,請參閱為使用自訂政策URL的已簽署 建立簽章

    6. &Key-Pair-Id= public key ID for the CloudFront public key whose corresponding private key you're using to generate the signature

    CloudFront 公有金鑰的 ID,例如 K2JCJMDEHXQW5F。公有金鑰 ID 會說明要使用 CloudFront 哪個公有金鑰來驗證簽署的 URL. CloudFront compared the signature 中的資訊與政策陳述式中的資訊,以確認 URL 尚未遭到竄改。

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

為使用自訂政策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. Base64-encode來編碼政策陳述式。 MIME如需詳細資訊,請參閱 20Base64 Content-Transfer-Encoding4,(多用途網際網路郵件延伸)第一部分:網際網路訊息機構格式。 RFC MIME

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

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

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. 在 URL之後,將產生的值附加到您簽署的 Policy=

  6. 建立URL以雜湊、簽署和 base64 編碼政策陳述式簽署的 簽章。如需詳細資訊,請參閱為使用自訂政策URL的已簽署 建立簽章

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

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

資源

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

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

您只能為 指定一個URL值Resource

重要

您可以省略政策中的 Resource 參數,但這樣做意味著具有 簽署的任何人URL都可以存取與您用來建立已簽署 之金鑰對相關聯的任何分發中的所有檔案URL。

注意下列事項:

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

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

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

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

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

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

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

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

    當您在 政策URL的 中使用萬用字元時,萬用字元比對僅適用於包含萬用字元的區段邊界。例如,在政策URL中考慮這一點:

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

    在此範例中,星號萬用字元 (*) 僅適用於路徑區段,因此與 URLshttps://www.example.com/helloworld和 相符https://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中的 可以省略通訊協定區段,並在網域區段中以星號開頭。在這種情況下,通訊協定部分暗中設為星號。例如,政策URL*example.com中的 相當於 *://*example.com/

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

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

    • 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),則HTTP請求必須使用網頁或應用程式中的替代網域名稱。請勿在政策中URL為 檔案指定 Amazon S3。

DateLessThan

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

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

這是 Condition區段中唯一必要的參數。 CloudFront 需要此值,以防止使用者永久存取您的私有內容。

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

DateGreaterThan (選用)

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

IpAddress (選用)

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

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

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

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

    "IPv4 IP address/32"

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

    重要

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

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

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

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

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

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

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

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

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

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

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

{ "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 相關聯的所有檔案

下列範例自訂政策可讓您URLs為與任何分佈相關聯的任何檔案建立簽署,如 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:00UTC:

{ "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,該 ID 必須與您在 中指定的分佈 (d111111abcdef8.cloudfront.net) 中信任的金鑰群組相關聯URL。

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

使用自訂政策URL的已簽章是政策陳述式的雜湊、已簽章和 base64 編碼版本。若要建立自訂政策的簽章,請完成以下步驟。

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

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

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

    注意

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

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

  3. Base64-encode來編碼字串。 MIME如需詳細資訊,請參閱 20Base64 Content-Transfer-Encoding4,(多用途網際網路郵件延伸)第一部分:網際網路訊息機構格式。 RFC MIME

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

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

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. 在 URL之後將產生的值附加到 簽署的 &Signature=,然後返回 URL 使用自訂政策建立已簽署 以完成串連已簽署 的 部分URL。