從 Amazon S3 移轉時,可以使用 Amazon CloudFront 分配做為輸出路徑。
相較於直接從 S3 移轉,透過 CloudFront 移轉資料可能享有較低的 AWS 輸出費用。詳情請參閱 CloudFront 定價和 S3 輸出費用。使用 CloudFront 做為輸出路徑,不會將 S3 物件公開。請參閱「使用 CloudFront 是否會將我的物件公開?」
總覽
如要透過 CloudFront 移轉 S3 資料,請務必按照下列步驟操作:
設定 IAM 權限
請按照「設定接收器的存取權:Cloud Storage」中的操作說明,為目的地 bucket 授予必要的 Google Cloud 權限。
設定 S3 bucket 的存取權
請按照「設定來源存取權:Amazon S3」中的操作說明,設定 Amazon S3 資料的存取權。
為 S3 bucket 建立 CloudFront 發布
- 在 AWS 帳戶中,前往「CloudFront」CloudFront。
- 按一下「Create a CloudFront distribution」。
- 在「Origin domain」(來源網域) 下方,選取 S3 bucket。
- 「Origin path」(來源路徑) 必須留空。
- 接受自動填入的「Origin name」(來源名稱),或自行指定值。
- 在「Origin access」(來源存取權) 部分,選取「Public」(公開)。這不會公開值區,而是向 CloudFront 指出不應設定存取機制。
- 在「快取鍵和來源要求」部分:
- 在「快取政策」部分,選取「CachingDisabled」CachingDisabled。這可防止 CloudFront 快取要求,並將要求提供給未經驗證的檢視者。
- 在「Origin request policy」部分,選取「AllViewerExceptHostHeader」AllViewerExceptHostHeader。這樣 CloudFront 就能將驗證標頭轉送至 S3,Storage 移轉服務也就能使用您的安全憑證存取 bucket。
- 在「網頁應用程式防火牆 (WAF)」部分,選取「不啟用」。
- 視需要選擇「Price class」(價格級別)。Storage 移轉服務會根據來源 bucket 的區域選取 worker 集區,因此 CloudFront 定價會以該區域為準。如要取得最低價格,請確保來源 bucket 位於美國或歐洲,或在 CloudFront 中選取「Use only North America and Europe」(僅限北美和歐洲) 做為「Price class」(價格等級)。
按一下「Create CloudFront distribution」。
建立成功後,系統會顯示 CloudFront 分布詳細資料頁面。
請記下「Distribution domain name」(分配網域名稱)。例如:
https://dy1h2n3l4ob56.cloudfront.net。如果詳細資料頁面的發布網域名稱前方未包含https://通訊協定,您必須在建立轉移工作時自行新增。
建立移轉工作
Google Cloud 控制台和 REST API 支援透過 CloudFront 分布轉移。
請勿在移轉工作名稱中加入機密資訊,例如個人識別資訊 (PII) 或安全性資料。資源名稱可能會傳播至其他 Google Cloud 資源的名稱,並可能在專案外部向 Google 內部系統公開。Google Cloud 控制台
如要使用 Google Cloud 控制台建立移轉作業,請按照建立移轉作業的操作說明進行。
系統提示您輸入 CloudFront 網域時,請輸入您在上一節記下的分配網域名稱。您也可以在 Amazon Web Services 控制台的 CloudFront 專區找到這個值。格式為 https://dy1h2n3l4ob56.cloudfront.net。
REST API
如要使用 REST API 建立移轉作業,請按照「建立移轉作業」頁面中的範例操作。
指定發布網域名稱做為 transferSpec.awsS3DataSource.cloudfrontDomain 欄位的值:
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_SOURCE_NAME",
"cloudfrontDomain": "https://dy1h2n3l4ob56.cloudfront.net",
"awsAccessKey": {
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}
},
...
}
疑難排解
AuthorizationHeaderMalformed 錯誤
如果遇到 AuthorizationHeaderMalformed 錯誤,且錯誤訊息指出區域不符 (例如 the region 'Location A' is wrong; expecting
'Location B'),可能是因為 CloudFront 設定不受支援。
如果您使用單一 CloudFront 發布項目,為位於不同 AWS 區域的多個 S3 bucket 提供前端服務,就會發生這項錯誤。
如要解決這個問題,請確保每個 CloudFront 發布項目只會將 S3 bucket 導向單一 AWS 區域。如果 S3 bucket 位於不同區域,請為各區域分別建立 CloudFront 分布。
常見問題
使用 CloudFront 會公開我的物件嗎?
不會。如果您已按照本頁的設定步驟操作,物件就不會公開。
- Cloudfront 無法直接存取 S3 物件。
- 如果使用者嘗試直接存取物件,或透過 CloudFront 存取 (如果值區為私人),就會收到
permission denied錯誤。 - Storage 移轉服務會使用您在移轉工作中提供的憑證,簽署傳送至 CloudFront 的要求,讓我們能安全下載物件,就像直接從 S3 下載一樣。這是因為標頭轉送設定
AllViewerExceptHostHeader。