如何允許不使用 TLS 1.2 或更高版本的客戶,存取我的 Amazon S3 儲存貯體?

3 分的閱讀內容
0

我的客戶不使用 TLS 1.2 版或更高版本,因此無法存取存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中的內容。我想要允許這些客戶使用 TLS 1.0 或 1.1,存取我的 Amazon S3 儲存貯體中的內容。

簡短說明

AWS 在所有 AWS API 端點上強制使用 TLS 1.2 或更高版本。若要繼續連線到 AWS 服務,請更新所有使用 TLS 1.0 或 1.1 的軟體。

解決方法

Amazon CloudFront 允許使用舊版 TLS 版本,方法是將客戶從 CloudFront 發行版本與 Amazon S3 之間使用的 TLS 通訊協定中抽取出來。

使用 OAC 建立 CloudFront 發行版本

您可以使用 CloudFront,支援對 S3 儲存貯體的匿名和公開請求。或者,您可以要求只有簽署的請求才能存取 S3 儲存貯體,藉此將 S3 儲存貯體設為私有,且只能透過 CloudFront 存取。

支援 S3 儲存貯體的匿名和公開請求

注意: 以下範例中假設您已有使用中的 S3 儲存貯體。如果您沒有 S3 儲存貯體,請建立一個

若要建立 CloudFront 發行版本,請遵循下列步驟:

  1. 開啟 CloudFront 主控台
  2. 選擇建立發行版本
  3. 原始下的原始網域中,從下拉式清單中選擇 S3 儲存貯體的 REST API 端點。
  4. 檢視器通訊協定政策中,選取將 HTTP 重新導向至 HTTPS
  5. 允許的 HTTP 端點中,選取 GET, HEAD, OPTIONS 以支援讀取要求。
  6. 原始伺服器存取權限區段中,選取原始伺服器存取控制設定 (建議使用)
  7. 選取建立控制項設定,並使用預設名稱。對於簽署行為,請選取簽署要求 (建議使用),然後選取**建立。**OAC 建議的設定會自動驗證檢視者的要求。
  8. 在下拉式清單中選取身份。建立發行版本後,請更新儲存貯體政策以限制對 OAC 的存取。
  9. 預設快取行為檢視器下,在檢視器通訊協定政策中選取將 HTTP 重新導向至 HTTPS,其他設定則保留預設值。
  10. 快取金鑰和原始請求下方,選取快取政策和原始請求政策 (建議使用)。然後,使用 CachingOptimized 作為快取政策,並使用 CORS-S3Origin 作為原始請求政策
  11. 選取建立發行版本,然後等待其狀態更新為已啟用

要求只有簽署的請求才能存取 S3 儲存貯體

藉由僅支援簽署的請求,可以增加 S3 儲存貯體的安全性。有了簽署的請求,OAC 會遵循您的驗證參數,並將它們轉送至 S3 來源,然後拒絕匿名請求。

若要建立需要簽署的請求才能存取 S3 儲存貯體的 CloudFront 發行版本,請遵循下列步驟:

  1. 開啟 CloudFront 主控台
  2. 選擇建立發行版本
  3. 原始下的原始網域中,從下拉式清單中選擇 S3 儲存貯體的 REST API 端點。
  4. 檢視器通訊協定政策中,選取將 HTTP 重新導向至 HTTPS
  5. 允許的 HTTP 端點中,選取 GET, HEAD, OPTIONS 以支援讀取要求。
  6. 原始伺服器存取權限區段中,選取原始伺服器存取控制設定 (建議使用)
  7. 勾選不簽署請求選項,可以封鎖所有未簽署的請求。
    **注意:**封鎖未簽署的請求,讓每個客戶都必須簽署自己的請求,這樣 S3 來源就可以評估許可。
  8. 請建立自訂的快取政策,將客戶的授權標頭轉送至來源。
  9. 快取金鑰和原始請求之下,選取快取政策和原始請求政策 (建議使用)
  10. 選取建立政策
  11. 名稱區段中,輸入快取政策的名稱。
  12. 快取金鑰設定下方,前往標頭,並選取包含下列標頭
  13. 新增標頭之下,選取授權
  14. 選取建立

控制客戶的安全政策

若要在 CloudFront 中控制安全政策,必須擁有自訂網域。最佳實務是為您的發行版本指定替代網域名稱。使用 AWS Certificate Manager (ACM) 中設定的自訂 SSL 憑證,也屬於最佳實務。這樣可讓您更能掌控安全政策,並允許客戶繼續使用 TLS 1.0。如需詳細資訊,請參閱檢視器與 CloudFront 之間支援的通訊協定和密碼

如果您使用預設的 *.cloudfront.net 網域名稱,則 CloudFront 會自動佈建憑證,並將安全政策設定為允許 TLS 1.0 和 1.1。如需詳細資訊,請參閱發行版本設定

若要為您的 CloudFront 發行版本設定替代網域名稱,請遵循下列步驟:

  1. 登入 AWS 管理主控台,然後開啟 CloudFront 主控台
  2. 選擇您要更新的發行版本的 ID
  3. 一般索引標籤上,選擇編輯
  4. 替代網域名稱 (CNAME) 中,選擇新增項目,然後輸入您的網域名稱。
    **注意:**最佳實務是使用自訂的正規名稱記錄 (CNAME) 來存取資源。使用 CNAME 可讓您對路由擁有更大的掌控能力,並為您的客戶提供更順暢的轉換。
  5. 自訂 SSL 憑證中,從涵蓋 CNAME 的下拉式清單中選擇自訂 SSL 憑證,將其指派給發行版本。
    **注意:**如需有關安裝憑證的詳細資訊,請參閱如何設定 CloudFront 分佈以使用 SSL/TLS 憑證?
  6. 選擇建立發行版本,並等待其狀態更新為已啟用

建立發行版本之後,您必須允許 OAC 存取您的儲存貯體。完成下列步驟:

  1. 導覽至 CloudFront 主控台頁面,然後開啟您的 CloudFront 發行版本。
  2. 選取原始索引標籤,選取您的原始伺服器,然後按一下編輯
  3. 選擇複製政策,開啟儲存貯體權限,然後更新儲存貯體政策。
  4. 開啟前往 S3 儲存貯體權限頁面。
  5. 儲存貯體政策下方,選擇編輯。貼上您先前複製的政策,然後選擇儲存。如果您的儲存貯體政策需要讀取 S3 以外的功能,則可以新增必要的 API。

如果使用自訂網域名稱,則請變更您的 DNS 項目,以使用新的 CloudFront 發行版本網址。如果不使用自訂網域名稱,則必須向使用者提供新的 CloudFront 發行版本網址。此外,您必須更新任何使用舊有網址的用戶端或裝置軟體。

如果您目前使用 AWS SDK 存取 Amazon S3 物件,則必須變更程式碼以使用一般 HTTPS 端點。此外,請確定您使用的是新的 CloudFront 網址。如果物件不是公用,而且需要更完善的控制,則可以使用已簽署的網址和已簽署的 Cookie 來提供私人內容

使用 S3 預先簽署的網址存取物件

如果工作流程依賴 S3 預先簽署的網址,請使用 CloudFront 發行版本,將查詢轉送到 S3 原始伺服器。首先,請為您想要的物件產生預先簽署的網址。然後,將網址中的主機替換為 CloudFront 端點,以透過 CloudFront 傳遞呼叫,並自動升級加密通訊協定。若要測試並產生預先簽署的網址,請執行下列 CLI 命令:

aws s3 presign s3://BUCKET_NAME/test.jpg

範例輸出:

https://bucket_name.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=%5b...%5d%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=%5b...%5d&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature">https://BUCKET_NAME.s3.us-east-1.amazonaws.com/test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature    =[...]

現在,將 S3 網址變更為新的 CloudFront 端點。例如,替換調這個 S3 網址:

BUCKET_NAME.s3.eu-west-1.amazonaws.com

使用此端點:

https://DISTRIBUTION_ID.cloudfront.net.

範例輸出:

https://<DISTRIBUTION_ID>.cloudfront.net /test.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=[...]%2F20220901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=[...]&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=[...]

若要使用預先簽署的網址,請套用下列 CloudFront 設定:

  1. 將 OAC 簽署行為設定為不簽署請求
  2. 將 CloudFront 發行版本來源請求政策設定為來源請求設定標頭 — 無;Cookie — 無;查詢字串 — 全部
  3. 將快取政策設定為標頭 — 無;Cookie — 無;查詢字串 — 無

在 AWS CloudTrail 中,從 S3 預先簽署的網址進行下載的 GET 請求,會顯示為產生預先簽署網址的身分。

如果您使用 AWS SDK 存取 S3 物件,則必須變更程式碼以使用預先簽署的網址。請改用一般 HTTPS 請求,並使用新的 CloudFront 網址。

確認您使用的是 Amazon S3 的現行加密通訊協定

若要測試新政策,請使用下列範例 curl 命令,使用特定的舊版通訊協定發出 HTTPS 請求:

curl https://${CloudFront_Domain}/image.png -v --tlsv1.0 --tls-max 1.0

此範例 curl 命令會使用 TLS 1.0 向 CloudFront 發出請求。這會使用 TLS 1.2 連線至 S3 原始伺服器,並成功下載檔案。

最佳實務是使用 AWS CloudTrail Lake 識別連線到 AWS 服務端點的舊版 TLS 連線。您可以設定 CloudTrail Lake 事件資料存放區,以擷取管理事件或資料事件。CloudTrail Lake 中對應的 CloudTrail 事件顯示 TLS 版本 1.2,確認您的客戶是使用現行的安全政策連線到 Amazon S3。

AWS 官方
AWS 官方已更新 1 年前