本頁面提供私人來源驗證總覽,並說明如何搭配 Cloud CDN 使用這項功能。
Cloud CDN 透過私人來源驗證,可長期存取私人 Amazon S3 儲存貯體或其他相容物件儲存庫中的資源。使用私人來源可防止用戶端略過 Cloud CDN,直接存取來源。
這項功能適用於具備全域外部應用程式負載平衡器或傳統版應用程式負載平衡器的 Cloud CDN。
私人來源驗證是面向來源,而已簽署的網址和已簽署的 Cookie 則是面向用戶端。您可為相同內容同時啟用這兩項功能。私人來源驗證限制非 CDN 存取來源和內容,已簽署的網址和 Cookie 可控管哪些使用者能存取 Cloud CDN。
事前準備
建立雜湊式訊息驗證碼 (HMAC) 金鑰來驗證要求,並將金鑰與服務帳戶建立關聯。記下存取金鑰與密鑰。
請參閱 AWS 說明文件中的「使用 AWS 憑證存取 AWS:程式設計存取權」。
-
如果物件儲存庫預期 HTTP 要求的
Host標頭會包含特定值,請務必在後端服務中設定該值。如果您未設定自訂要求標頭,後端服務會保留用戶端用來連線至外部應用程式負載平衡器的Host標頭。如需設定步驟,請參閱「使用自訂要求標頭」。如需具體範例,請參閱「設定具備外部後端的負載平衡器」。
請視需要更新至最新版本的 Google Cloud CLI:
gcloud components update
設定私人來源的驗證機制
如要設定私人來源驗證,請按照下列操作說明操作:
主控台
前往 Google Cloud 控制台的「Cloud CDN」頁面。
按一下要設定的來源名稱。來源必須為「Custom origin」(自訂來源) 類型。
在「Origin details」(來源詳細資料) 頁面上,按一下「Edit」(編輯) 按鈕。
如要前往「Host and path rules」(主機與路徑規則) 部分,請按一下「Next」(下一步)。
如要前往「Cache performance」(快取效能) 部分,請按一下「Next」(下一步)。
在「Private origin authentication」(私人來源驗證) 部分,選取「Authenticate requests to this origin with AWS Signature Version 4」(使用 AWS 第 4 版簽署程序,驗證傳送至這個來源的要求)。接著指定下列資訊:
- 金鑰 ID:Amazon S3 儲存貯體或其他相容物件儲存庫的存取金鑰。
- 金鑰:用於向物件儲存庫驗證的密鑰。如果您使用私人 Cloud Storage bucket,請指定 HMAC 金鑰。
- 金鑰版本:代表金鑰版本的專屬名稱。
- 區域:物件儲存庫所在的區域,例如
us-east-1。
按一下「Done」(完成)。
gcloud
使用
gcloud compute backend-services export指令,將私人來源的後端設定匯出至 YAML 檔案:gcloud compute backend-services export BACKEND_SERVICE_NAME \ [--destination=DESTINATION]
將
DESTINATION替換成 YAML 檔案的名稱,例如my-private-origin.yaml。如要使用 HMAC 金鑰驗證後端要求,請在
backendServices的securitySettings部分中指定下列額外設定選項:securitySettings: awsV4Authentication: accessKeyId: ACCESS_KEY_ID accessKey: ACCESS_KEY [accessKeyVersion: ACCESS_KEY_VERSION] originRegion: REGION …]更改下列內容:
ACCESS_KEY_ID:HMAC 存取金鑰 IDACCESS_KEY:HMAC 存取金鑰ACCESS_KEY_VERSION(選用):您可以設定專屬名稱來代表金鑰版本REGION:儲存空間供應商的有效區域。如果是 Amazon S3,該值不是 Google Cloud區域。
下列程式碼片段顯示範例
my-private-origin.yaml檔案的內容:name: shopping-cart-services backends: - description: cart-backend-1 group: 'https://www.googleapis.com/compute/v1/projects/my-project-id/global/networkEndpointGroups/my-network-origin-group' securitySettings: awsV4Authentication: accessKeyId: AKIDEXAMPLE accessKey: c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9 accessKeyVersion: prod-access-key-v1.2 originRegion: us-east-2如要更新私人來源,請使用
gcloud compute backend-services import指令,將設定匯入後端服務:gcloud compute backend-services import BACKEND_SERVICE_NAME \ [--source=SOURCE]
將
SOURCE替換成 YAML 檔案的名稱。
API
如要使用 HMAC 金鑰驗證後端要求,請在 backendServices 的 securitySettings 部分中指定這些額外設定選項。
使用 Method: backendServices.insert 或 Method: backendServices.update API 呼叫。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
在 JSON 要求主體中新增下列程式碼片段:
securitySettings: {
awsV4Authentication: {
accessKeyId: ACCESS_KEY_ID,
accessKey: ACCESS_KEY,
[accessKeyVersion: ACCESS_KEY_VERSION],
originRegion: REGION
}
}
更改下列內容:
ACCESS_KEY_ID:HMAC 存取金鑰 IDACCESS_KEY:HMAC 存取金鑰ACCESS_KEY_VERSION(選用):您可以設定專屬名稱來代表金鑰版本REGION:儲存空間供應商的有效區域。如果是 Amazon S3,該值不是 Google Cloud區域。
下列程式碼片段顯示範例 JSON 要求主體範例的內容:
securitySettings: {
awsV4Authentication: {
accessKeyId: "AKIDEXAMPLE",
accessKey: "c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9",
accessKeyVersion: "prod-access-key-v1.2",
originRegion: "us-east-2"
}
}
建立簽章時,服務名稱會自動設為 s3。完成這些設定後,Cloud CDN 會為傳送至來源的所有要求產生 HTTP 授權標頭。
私下快取已驗證的回應
您可能想確保 Cloud CDN 會快取經私下驗證的內容。
如要這麼做,請將快取模式設為「Force cache all content」(強制快取所有內容),並指定存留時間,以便快取從來源提供的所有內容。
或者,如果您不想強制以相同方式快取所有內容,請將快取模式變更為「Use origin setting based on Cache-Control headers」(使用基於 Cache-Control 標頭的來源設定) 或「Cache static content」(快取靜態內容),並確保在從來源提供的內容中正確設定 Cache-Control 標頭。