本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
URL使用自訂原則建立已簽署
若要URL使用自訂原則建立已簽署,請完成以下程序。
使用自訂原則建URL立已簽署的步驟
-
如果您使用. NET或 Java 創建簽名URLs,如果您尚未將密鑰 key pair 的私鑰從默認的 .pem 格式重新格式化為兼容的格式。 NET或者使用 Java,現在就這樣做。如需詳細資訊,請參閱重新格式化私密金鑰 (. NET和只有 Java)。
-
以列出的順序串連下列值,並複寫此範例中所示的格式經過簽署: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
之後。重要
您的參數不能被命名為
Policy
、Signature
或Key-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 的簽署者。
- 1.
針對使用自訂原則的URL已簽署建立政策聲明
請完成下列步驟,為使用自訂原則的URL已簽署建立原則陳述式。
如需以各種方式控制對檔案存取的政策聲明範例,請參閱 使用自訂原則URL之已簽署的原則陳述式範例。
若要為使用自訂原則的已簽署建立原則URL的原則陳述式
-
使用下列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
部分的參數順序不重要。 -
如需有關
Resource
、DateLessThan
、DateGreaterThan
和IpAddress
值的詳細資訊,請參閱 您在政策聲明中為使用自訂策略的URL已簽署項目指定的值。
-
-
從策略語句中刪除所有空格(包括製表符和換行符)。您可能必須在應用程式的程式碼的字串中包含逸出字元。
-
使用 base64 編碼來編碼政策陳述式MIME。如需詳細資訊,請參閱節 6.8, RFC 2045 年的 Base64 內容傳輸編碼 MIME
(多用途網際網路郵件延伸模組) 第一部分:網際網路郵件內文的格式。 -
以有效的字元取代URL查詢字串中無效的字元。下表列出無效和有效的字元。
取代這些無效的字元 有了這些有效的字元 +
- (連字號)
=
_ (底線)
/
~ (波狀符號)
-
將結果值附加到您的簽名URL後
Policy=
。 -
URL透過雜湊、簽署和 base64 編碼原則陳述式來為簽署建立簽章。如需詳細資訊,請參閱為使用自訂原則的URL已簽署建立簽名。
您在政策聲明中為使用自訂策略的URL已簽署項目指定的值
當您為自訂政策建立政策聲明時,您可以指定以下值。
- 資源
-
的URL,包括任何查詢字串,但不包括 CloudFront
Policy
Signature
、和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:使用自訂政策建立簽章
-
使用 SHA -1 雜湊函數和RSA雜湊並簽署您在程序中建立的JSON原則陳述式若要為使用自訂原則的已簽署建立原則URL的原則陳述式。使用不再包含空白空格,但尚未經 base64 編碼的原則陳述式版本。
對於雜湊函數所需的私有金鑰,使用其公有金鑰在活動的信任金鑰組中的私有金鑰進行分佈。
注意
用於雜湊和簽名政策聲明的方法取決於您的程式設計語言和平台。如需程式碼範例,請參閱 建立已簽署簽章的程式碼範例 URL。
-
從雜湊和簽署的字串中移除空格 (包括製表符和換行符)。
-
使MIME用 base64 編碼對字串進行編碼。如需詳細資訊,請參閱節 6.8, RFC 2045 年的 Base64 內容傳輸編碼 MIME
(多用途網際網路郵件延伸模組) 第一部分:網際網路郵件內文的格式。 -
以有效的字元取代URL查詢字串中無效的字元。下表列出無效和有效的字元。
取代這些無效的字元 有了這些有效的字元 +
- (連字號)
=
_ (底線)
/
~ (波狀符號)
-
將結果值附加到您的簽名URL後
&Signature=
,然後返回使用自訂原則建URL立已簽署的步驟以完成連接簽名URL的部分。