本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Synthetics Canary 的安全考量
下列章節說明在 Synthetics 中建立並執行 Canary 時,您應該考量的安全問題。
使用安全連線
由於 Canary 程式碼和 Canary 測試執行的結果可能包含敏感資訊,因此請勿讓 Canary 透過未加密的連線連至端點。請一律使用加密連線,例如以 https://
開頭的連線。
Canary 命名考量
Canary 的 Amazon Resource Name (ARN) 包含在使用者代理程式標題中,作為從 Puppeteteer 驅動 Chromium 瀏覽器發出之傳出呼叫的一部分,這是 CloudWatch Synthetics 包裝程式庫的一部分。這有助於識別 CloudWatch Synthetics Canary 流量,並可將其關聯至正在進行呼叫的 Canary。
Canary ARN 包括 Canary 名稱。請選擇不會透露專屬資訊的 Canary 名稱。
此外,請務必僅將 Canary 指向您控制的網站和端點。
Canary 程式碼中的秘密和敏感資訊
如果您使用 zip 檔案直接將 Canary 程式碼傳遞到 Canary,可以在 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 Canary 會擷取您 Canary 指令碼擲回的任何異常情況,無論指令碼是自訂的或是來自藍圖。CloudWatch Synthetics 會將異常情況訊息和堆疊追蹤記錄至三個位置:
當您描述測試執行時,記錄回 CloudWatch Synthetics 服務以加快偵錯
根據用於建立您 Lambda 函數的組態,記錄至 CloudWatch Logs
記錄至 Synthetics 日誌檔案,這是純文字檔案,此檔案會上傳至您為 Canary
resultsLocation
設定之值所指定的 Amazon S3 位置
如果您希望傳送及存放較少的資訊,您可以在異常情況傳回 CloudWatch Synthetics 包裝程式庫之前將其擷取。
您也可以在錯誤中包含請求 URL。CloudWatch Synthetics 會掃描指令碼擲回的錯誤中的任何 URL,並根據 restrictedUrlParameters 組態修訂其中的限制 URL 參數。如果您在指令碼中記錄錯誤訊息,則可以使用 getSanitizedErrorMessage 以在記錄之前修訂 URL。
以較小範圍限制您的 IAM 角色
建議您不要將 Canary 設定為前往潛在的惡意 URL 或端點。將 Canary 指向不受信任或未知的網站或端點,可能會將您的 Lambda 函數程式碼暴露在惡意使用者的指令碼中。假設惡意網站可以突破 Chromium,則如果您使用網際網路瀏覽器連線至該網站,該網站可能會以類似方式存取您的 Lambda 程式碼。
使用具有較小範圍許可的 IAM 執行角色,來執行您的 Lambda 函數。如此一來,如果您的 Lambda 函數遭到惡意指令碼入侵,其在作為 Canary AWS 的帳戶執行時所能採取的動作會受到限制。
當您使用 CloudWatch 主控台建立 Canary 時,會以較小範圍的 IAM 執行角色建立。
敏感資料修訂
CloudWatch Synthetics 會擷取 URL、狀態碼、失敗原因 (如有),以及請求和回應的標題和內文。這樣一來,canary 使用者即能了解、監控和偵測 canary。
以下各節中描述的組態可以在 canary 執行的任何時候進行設定。您也可以選擇將不同的組態套用至不同的綜合步驟。
請求 URL
根據預設,CloudWatch Synthetics 會記錄請求 URL、狀態碼以及 canary 日誌中每個 URL 的狀態原因。請求 URL 也可以出現在 canary 執行報告、HAR 檔案等中。您的請求 URL 可能包含敏感的查詢參數,例如存取字符或密碼。您可以修訂 CloudWatch Synthetics 中記錄的敏感資訊。
若要修訂敏感資訊,請設定組態屬性 restrictedUrlParameters。如需詳細資訊,請參閱「SyntheticsConfiguration 類別」。這樣一來,即會導致 CloudWatch Synthetics 在記錄之前根據 restrictedUrlParameters 修訂 URL 參數,包括路徑和查詢參數值。如果您在指令碼中記錄 URL,則可以使用 getSanitizedUrl(url, stepConfig = null) 以在記錄之前修訂 URL。如需詳細資訊,請參閱SyntheticsLogHelper 類別。
標頭
依預設,CloudWatch Synthetics 不會記錄請求/回應標頭。對於 UIcanary,這是使用執行時間版本 syn-nodejs-puppeteer-3.2
及更高版本的 canary 的預設行為。
如果您的標頭不包含敏感信息,您可以將 includeRequestHeaders 和 includeResponseHeaders 屬性設定為 true
,進而啟用 HAR 檔案中的標頭。您可以啟用所有標頭,但選擇限制敏感標頭金鑰的值。例如,您可以選擇僅修訂 canary 產生的成品中的 Authorization
標頭。
請求與回應內文
依預設,CloudWatch Synthetics 不會在 canary 日誌或報告中記錄請求/回應內文。此資訊對於 API canary 尤為實用。Synthetics 會擷取所有 HTTP 請求,並可顯示標頭、請求和回應內文。如需詳細資訊,請參閱executeHttpStep(stepName, requestOptions, [callback], [stepConfig])。您可以將 includeRequestBody 和 includeResponseBody 屬性設定為 true
,進而選擇啟用請求/回應內文。