本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用自訂政策建立已簽章的 URL
若要使用自訂政策建立已簽署的 URL,請完成下列程序。
使用自訂政策建立簽章的 URL
-
如果您使用 .NET 或 Java 建立簽章的 URL,並且您還沒有將金鑰對的私有金鑰從預設的 .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.
檔案的基本 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 內以任何順序指定查詢字串參數。重要
您的查詢字串參數無法命名為
Policy
、Signature
或Key-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簽署者。
- 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 政策陳述式中指定的值。
-
-
從政策陳述式中移除所有空格 (包括標籤和換行字元)。您可能必須在應用程式的程式碼的字串中包含逸出字元。
-
使用 MIME base64 編碼 Base64-encode 政策聲明。如需詳細資訊,請參閱 RFC 2045,MIME (多用途網際網路郵件延伸) 第一部分:網際網路訊息內文的格式中的第 6.8 節:Base64 Content-Transfer-Encoding
。 -
將 URL 查詢字串中無效的字元替換為有效的字元。下表列出無效和有效的字元。
取代這些無效的字元 有了這些有效的字元 +
- (連字號)
=
_ (底線)
/
~ (波狀符號)
-
在
Policy=
之後,將結果值附加到已簽章的 URL。 -
透過政策聲明進行雜湊、簽名和 base64-encoding 來建立用於簽章 URL 的簽章。如需詳細資訊,請參閱為使用自訂政策的已簽章 URL 建立簽章。
您在使用自訂政策的已簽署 URL 政策陳述式中指定的值
當您為自訂政策建立政策聲明時,您可以指定以下值。
- 資源
-
包括任何查詢字串,但不包括 CloudFront
Policy
、Signature
和Key-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
在此範例中,星號萬用字元 (
*
) 僅適用於路徑區段中,因此它符合 URLhttps://www.example.com/helloworld
和https://www.example.com/hello-world
,但與 URLhttps://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:使用自訂政策建立簽章
-
使用 SHA-1 雜湊函數和 RSA 對您在為使用自訂政策的已簽章的 URL 建立政策聲明程序中建立的 JSON 政策聲明進行雜湊和簽署。使用不再包含空格但尚未以 base64 編碼的政策陳述式版本。
對於雜湊函數所需的私有金鑰,使用其公有金鑰在活動的信任金鑰組中的私有金鑰進行分佈。
注意
用於雜湊和簽名政策聲明的方法取決於您的程式設計語言和平台。如需程式碼範例,請參閱 為已簽署 URL 建立簽章的程式碼範例。
-
從雜湊和簽章字串中移除空格 (包括標籤和換行字元)。
-
使用 MIME base64 編碼的 Base64-encode 字串。如需詳細資訊,請參閱 RFC 2045,MIME (多用途網際網路郵件延伸) 第一部分:網際網路訊息內文的格式中的第 6.8 節:Base64 Content-Transfer-Encoding
。 -
將 URL 查詢字串中無效的字元替換為有效的字元。下表列出無效和有效的字元。
取代這些無效的字元 有了這些有效的字元 +
- (連字號)
=
_ (底線)
/
~ (波狀符號)
-
在
&Signature=
之後,將結果值附加到已簽章的 URL,然後返回到使用自訂政策建立簽章的 URL以完成已簽章的 URL 的各個部分的連接。