Synthetics Canary 的安全考量 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Synthetics Canary 的安全考量

下列章節說明在 Synthetics 中建立並執行 Canary 時,您應該考量的安全問題。

使用安全連線

由於 Canary 程式碼和 Canary 測試執行的結果可能包含敏感資訊,因此請勿讓 Canary 透過未加密的連線連至端點。請一律使用加密連線,例如以 https:// 開頭的連線。

Canary 命名考量

金絲雀的 Amazon 資源名稱 (ARN) 包含在使用者代理程式標頭中,作為從木偶驅動的 Chromium 瀏覽器進行的輸出呼叫的一部分,該瀏覽器包含在 Synthetics 包裝程式庫中。 CloudWatch 這有助於識別 CloudWatch Synthetics 金絲雀流量,並將其關聯回正在撥打電話的金絲雀。

金絲雀ARN包括金絲雀名稱。請選擇不會透露專屬資訊的 Canary 名稱。

此外,請務必僅將 Canary 指向您控制的網站和端點。

Canary 程式碼中的秘密和敏感資訊

如果您使用 zip 文件將金絲雀代碼直接傳遞到金絲雀中,則可以在 AWS CloudTrail 日誌。

如果您在 Canary 指令碼中有敏感資訊或秘密 (例如存取金鑰或資料庫憑證),我們強烈建議您將指令碼存放為 Amazon S3 中的版本控制物件,並將 Amazon S3 位置傳遞至 Canary,而不是透過 zip 檔案傳遞 Canary 程式碼。

如果您確實使用 zip 檔案來傳遞 Canary 指令碼,我們強烈建議您不要在 Canary 原始碼中包含秘密或敏感資訊。有關如何使用的更多信息 AWS Secrets Manager 為了幫助保護您的秘密安全,請參閱什麼是 AWS Secrets Manager?.

許可考量

我們建議您限制對 CloudWatch Synthetics 所建立或使用的資源的存取。在 Canary 存放測試執行結果和其他成品 (例如日誌和螢幕擷取畫面) 的 Amazon S3 儲存貯體上,使用嚴密的許可。

同樣地,對存放 Canary 來源碼的位置保持使用嚴格的許可,以免使用者意外 (或惡意) 刪除用於 Canary 的 Lambda 圖層或 Lambda 函數。

為了協助確保執行您想要的 Canary 程式碼,您可以在存放 Canary 程式碼的 Amazon S3 儲存貯體上使用物件版本控制。然後,當您指定此程式碼做為 Canary 來執行時,您可以將物件 versionId 做為路徑的一部分,如下例所示。

https://bucket.s3.amazonaws.com/path/object.zip?versionId=version-id https://s3.amazonaws.com/bucket/path/object.zip?versionId=version-id https://bucket.s3-region.amazonaws.com/path/object.zip?versionId=version-id

堆疊追蹤和異常情況訊息

默認情況下,無論腳本是自定義還是來自藍圖, CloudWatch Synthetics 金絲雀都會捕獲由初期測試腳本拋出的任何異常。 CloudWatch Synthetics 將異常消息和堆棧跟踪記錄到三個位置:

  • 當您描述測試運行時,返回 CloudWatch Synthetics 服務以加快調試速度

  • 根據您建立 Lambda 函數的組態進入 CloudWatch 記錄檔

  • 記錄至 Synthetics 日誌檔案,這是純文字檔案,此檔案會上傳至您為 Canary resultsLocation 設定之值所指定的 Amazon S3 位置

如果您想發送和存儲較少的信息,則可以在異常返回到 CloudWatch Synthetics 包裝器庫之前捕獲異常。

您也可以URLs在您的錯誤中提出請求。 CloudWatch Synthetics 掃描腳本拋出URLs的任何錯誤,並根據配置從它們編輯受限URL參數。restrictedUrlParameters如果您在腳本中記錄錯誤消息,則可以使用在日誌記錄URLs之前getSanitizedError訊息 進行編輯。

限制您的IAM角色範圍

我們建議您不要將 Canary 設定為造訪潛在惡意URLs或端點。將 Canary 指向不受信任或未知的網站或端點,可能會將您的 Lambda 函數程式碼暴露在惡意使用者的指令碼中。假設惡意網站可以突破 Chromium,則如果您使用網際網路瀏覽器連線至該網站,該網站可能會以類似方式存取您的 Lambda 程式碼。

使用具有降低權限的IAM執行角色來執行 Lambda 函數。這樣,如果您的 Lambda 函數受到惡意腳本的攻擊,則作為初期測試運行時可能採取的操作受到限制 AWS 帳戶。

當您使用 CloudWatch 主控台建立初期測試時,會使用降低範圍IAM的執行角色建立該主控台。

敏感資料修訂

CloudWatch Synthetics 捕獲URLs,狀態代碼,故障原因(如果有的話),以及請求和響應的標題和主體。這樣一來,canary 使用者即能了解、監控和偵測 canary。

以下各節中描述的組態可以在 canary 執行的任何時候進行設定。您也可以選擇將不同的組態套用至不同的綜合步驟。

請求 URLs

根據預設, CloudWatch Synthetics 會記錄請求URLs、狀態碼以及每個測試記錄檔URL中的狀態原因。請求也URLs可以出現在初期測試執行報告,HAR文件等中。您的要求URL可能包含敏感的查詢參數,例如存取權杖或密碼。您可以編輯敏感信息,防止 CloudWatch Synthetics 記錄。

若要編輯敏感資訊,請設定組態屬性restrictedUrlParameters。如需詳細資訊,請參閱SyntheticsConfiguration 類別。這會導致 CloudWatch Synthetics 根據記錄restrictedUrlParameters之前編輯URL參數,包括路徑和查詢參數值。如果您正URLs在登錄腳本,則可以在日誌記錄URLs之前使用getSanitizedUrl(url, stepConfig = null)密文。如需詳細資訊,請參閱SyntheticsLogHelper 類別

標頭

默認情況下, CloudWatch Synthetics 不會記錄請求/響應頭。對於 UIcanary,這是使用執行時間版本 syn-nodejs-puppeteer-3.2 及更高版本的 canary 的預設行為。

如果您的標頭不包含敏感資訊,您可以將和includeResponseHeaders屬性設定為,以啟用HAR檔案includeRequestHeaders和HTTP報表中的標題true。您可以啟用所有標頭,但選擇限制敏感標頭金鑰的值。例如,您可以選擇僅修訂 canary 產生的成品中的 Authorization標頭。

請求與回應內文

默認情況下, CloudWatch Synthetics 不會在初期測試日誌或報告中記錄請求/響應主體。此信息對API加那利群島特別有用。Synthetics 捕獲所有HTTP請求,並可以顯示標題,請求和響應主體。如需詳細資訊,請參閱executeHttpStep(stepName、requestOptions、【回呼】、【stepConfig】)。您可以將includeRequestBodyincludeResponseBody屬性設定為,以選擇啟用要求/回應主體。true