URL使用自訂原則建立已簽署 - Amazon CloudFront

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

URL使用自訂原則建立已簽署

若要URL使用自訂原則建立已簽署,請完成以下程序。

使用自訂原則建URL立已簽署的步驟
  1. 如果您使用. NET或 Java 創建簽名URLs,如果您尚未將密鑰 key pair 的私鑰從默認的 .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

    如果您未使用 CloudFront URL signedURLs,則基礎URL是您將用於訪問文件的基礎,包括您自己的查詢字符串參數(如果有的話)。在前面的例子中,基數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

    政策聲明的雜湊、簽署和 base64 編碼版本JSON。如需詳細資訊,請參閱為使用自訂原則的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 公開金鑰的識別碼,例如K2JCJMDEHXQW5F。公開金鑰 ID 會告訴要使用 CloudFront 哪個公開金鑰來驗證已簽署URL。 CloudFront 將簽名中的資訊與政策聲明中的資訊進行比較,以確認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 編碼來編碼政策陳述式MIME。如需詳細資訊,請參閱節 6.8, RFC 2045 年的 Base64 內容傳輸編碼 MIME (多用途網際網路郵件延伸模組) 第一部分:網際網路郵件內文的格式。

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

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

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. 將結果值附加到您的簽名URL後Policy=

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

您在政策聲明中為使用自訂策略的URL已簽署項目指定的值

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

資源

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

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

您只能為指定一個URL值Resource

重要

您可以省略原則中的Resource參數,但這麼做表示任何擁已簽署的人都URL可以存取與您用來建立已簽署之 key pair 相關聯的任何發行版中的所有檔案URL。

注意下列事項:

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

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

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

  • 萬用字元 — 您可以在策略中使用萬用字元。URL支援下列萬用字元:

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

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

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

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

    當您在原則中使用萬用字元時,萬用字元比對只會URL在包含萬用字元的區段邊界內套用。例如,在策略URL中考慮這一點:

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

    在此範例中,星號萬用字元 (*) 僅適用於路徑區段中https://www.example.com/hello-world,因此符合URLshttps://www.example.com/helloworld和,但不符合URLhttps://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

  • 替代網域名稱 — 如果您在原則中指定替代網域名稱 (CNAME),HTTP請求必須使用網頁或應用程式中的替代網域名稱。URL請勿在政策中URL為檔案指定 Amazon S3。

DateLessThan

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

例如,2023 年 1 月 31 日上午 10 時UTC將轉換為 Unix 時間格式的 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格式的 IP 位址,例如:分貝 8:85:: 8a2e:

    如果您使用的是包含的自訂原則IpAddress,請勿IPv6針對散佈啟用。如果您想要透過 IP 位址和對其他內容的支援要IPv6求來限制對某些內容的存取,您可以建立兩個分發。如需詳細資訊,請參閱 發佈設定參考 主題中的 啟用 IPv6

使用自訂原則URL之已簽署的原則陳述式範例

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

如果您複製並貼上這些範例中的任何一個,請移除任何空格 (包括定位字元和換行字元)、以您自己的值取代這些值,並在右括號 (}) 後加入新行字元。

如需詳細資訊,請參閱您在政策聲明中為使用自訂策略的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 位址範圍存取目錄中的所有檔案

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

{ "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 位址存取與 key pair 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 日上午十時UTC至二零二三年二月二日上午十時供應: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也包含 key pair 識別碼,此識別碼必須與您在中指定的分發 (d111111abcdef8.cloudfront.net) 中的受信任金鑰群組相關聯。URL

為使用自訂原則的URL已簽署建立簽名

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

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

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

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

    注意

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

  2. 從雜湊和簽署的字串中移除空格 (包括製表符和換行符)。

  3. 使MIME用 base64 編碼對字串進行編碼。如需詳細資訊,請參閱節 6.8, RFC 2045 年的 Base64 內容傳輸編碼 MIME (多用途網際網路郵件延伸模組) 第一部分:網際網路郵件內文的格式。

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

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

    +

    - (連字號)

    =

    _ (底線)

    /

    ~ (波狀符號)

  5. 將結果值附加到您的簽名URL後&Signature=,然後返回使用自訂原則建URL立已簽署的步驟以完成連接簽名URL的部分。