本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適應性身分驗證
透過調適式身分驗證,您可以將使用者集區設定成封鎖可疑的登入,或是新增第二個要素身分驗證,以便回應更高的風險等級。每次嘗試登入時,Amazon Cognito 都會針對有關登入請求是否可能來自洩漏來源的風險情況進行評分。此風險分數是根據應用程式提供的裝置和使用者因素,以及 Amazon Cognito 從請求衍生的其他因素。Amazon Cognito 風險評估的一些因素包括 IP 地址、使用者代理程式,以及與其他登入嘗試的地理距離。當 Amazon Cognito 偵測到使用者工作階段中的風險,且使用者尚未選擇 MFA 方法時,調整型身分驗證可以為使用者集區中的使用者開啟或要求多重要素驗證 (MFA)。當您為使用者啟用 MFA 時,無論您如何設定調整型身分驗證,他們都會在驗證期間接到提供或設定第二個要素的挑戰。從使用者的角度來看,您的應用程式提供協助他們設定 MFA 的功能,而 Amazon Cognito 則可選擇防止他們再次登入,直到設定其他要素為止。
Amazon Cognito 會將有關登入嘗試、其風險等級和失敗挑戰的指標發佈至 Amazon CloudWatch。如需詳細資訊,請參閱檢視威脅防護指標。
若要將適應性身分驗證新增到使用者集區,請參閱 具有威脅防護的進階安全性。
適應性身分驗證概觀
從 Amazon Cognito 主控台的威脅防護選單中,您可以選擇適應性身分驗證的設定,包括在不同風險層級要採取的動作,以及自訂通知訊息給使用者。您可以將全域威脅防護組態指派給所有應用程式用戶端,但將用戶端層級組態套用至個別應用程式用戶端。
Amazon Cognito 適應性身分驗證會為每個使用者工作階段指派下列其中一個風險層級:高、中、低或無風險。
當您將 Enforcement method (強制執行方法) 從 Audit-only (僅供稽核使用) 變更為 Full-function (全功能) 時,請仔細考量您的選擇。您套用至風險等級的自動回應會影響 Amazon Cognito 指派給具有相同特性的後續使用者工作階段的風險等級。例如,在您選擇不採取任何動作或 Allow (允許) Amazon Cognito 最初評估為高風險的使用者工作階段後,Amazon Cognito 會將類似工作階段視為較低的風險。
選項 |
動作 |
---|---|
允許 | 使用者無需額外的要素即可登入。 |
選用 MFA | 已經設定第二個要素的使用者必須通過第二個挑戰,才能成功登入。簡訊的電話號碼和 TOTP 軟體權杖是可用的第二個要素。沒有設定第二個要素的使用者只能使用一組憑證登入。 |
需要 MFA | 已經設定第二個要素的使用者必須通過第二個挑戰,才能成功登入。Amazon Cognito 會阻擋未設定第二要素的使用者登入。 |
封鎖 | Amazon Cognito 會阻擋指定風險層級的所有登入嘗試。 |
注意
您無需驗證電話號碼,即可將其使用於文字簡訊,作為第二個身分驗證要素。
將使用者裝置與工作階段資料新增至 API 請求
當您使用 API 註冊、登入和重設密碼時,您可以收集有關使用者工作階段的資訊,並將其傳遞給 Amazon Cognito 威脅防護。此資訊包括使用者的 IP 地址和唯一裝置識別碼。
您的使用者與 Amazon Cognito 之間可能有一個中介網路裝置,如代理服務或應用程式伺服器。您可以收集使用者的內容資料,並將資料傳遞給 Amazon Cognito,讓調整性身分驗證根據使用者端點的特性來計算風險,而非根據您的伺服器或代理。如果您的用户端應用程式直接呼叫 Amazon Cognito API 操作,則調整性身分驗證會自動記錄來源 IP 地址。但是,它不會記錄如 user-agent
等其他裝置資訊,除非您也收集裝置指紋。
使用 Amazon Cognito 內容資料收集程式庫產生此資料,並使用 ContextData 和 UserContextData 參數將其提交至 Amazon Cognito 威脅防護。內容資料收集程式庫包含在 AWS SDKs中。如需詳細資訊,請參閱將 Amazon Cognito 身分驗證和授權與 Web 和行動應用程式整合。ContextData
如果您有 Plus 功能計劃,您可以提交。如需詳細資訊,請參閱設定威脅防護。
當您從應用程式伺服器呼叫以下經過 Amazon Cognito 驗證的 API 操作時,請以 ContextData
參數傳遞使用者裝置的 IP。此外,傳遞您的伺服器名稱、伺服器路徑和編碼的裝置指紋資料。
當您呼叫 Amazon Cognito 未經驗證的 API 操作時,您可以提交UserContextData
至 Amazon Cognito 威脅防護。此資料在 EncodedData
參數中包含裝置指紋。如果您滿足下列條件,則也可以在您的 UserContextData
中提交 IpAddress
參數:
-
您的使用者集區位於 Plus 功能計劃中。如需詳細資訊,請參閱使用者集區功能計劃。
-
您的應用程式用户端具有用戶端密碼。如需詳細資訊,請參閱使用應用程式用戶端的應用程式特定設定。
-
您已在應用程式用户端中啟動 Accept additional user context data (接受其他使用者內容資料)。如需詳細資訊,請參閱 接受其他使用者內容資料 (AWS Management Console)。
您的應用程式可在以下 Amazon Cognito 未驗證的 API 操作中,將已編碼裝置的指紋資料與使用者裝置的 IP 地址填入 UserContextData
參數。
接受其他使用者內容資料 (AWS Management Console)
在您啟動 Accept additional user context data (接受其他使用者內容資料) 功能後,您的使用者集區會接受 UserContextData
參數中的 IP 地址。在下列情況下,您不需要啟動此功能:
-
您的使用者僅透過如 AdminInitiateAuth 等已驗證 API 操作登入,且您使用
ContextData
參數。 -
您只希望未經驗證的 API 操作傳送裝置指紋,而不是 IP 地址給 Amazon Cognito 威脅防護。
在 Amazon Cognito 主控台中如下所示更新您的應用程式用戶端,以新增對其他使用者內容資料的支援。
-
在導覽窗格中選擇 Manage your User Pools (管理您的使用者集區),然後選擇您要編輯的使用者集區。
-
選擇應用程式用戶端選單。
-
選擇或建立應用程式用戶端。如需詳細資訊,請參閱設定使用者集區應用程式用戶端。
-
從 App client information (應用程式用戶端資訊) 容器中選擇 Edit (編輯)。
-
在您應用程式用戶端的 Advanced authentication settings (進階驗證設定) 中,選擇 Accept additional user context data (接受其他使用者內容資料)。
-
選擇 Save changes (儲存變更)。
若要在 Amazon Cognito API 中設定應用程式用戶端以接受使用者內容資料,請在 CreateUserPoolClient 或 UpdateUserPoolClient 請求中將 EnablePropagateAdditionalUserContextData
設定為 true
。如需有關如何在 Web 或行動應用程式中使用威脅防護的資訊,請參閱 在應用程式中收集威脅防護的資料。當您的應用程式從伺服器呼叫 Amazon Cognito 時,將從用戶端收集使用者內容資料。下面是使用 JavaScript SDK 方法 getData
的範例。
var EncodedData = AmazonCognitoAdvancedSecurityData.getData(
username
,userPoolId
,clientId
);
當您將應用程式設計為使用適應性身分驗證時,我們建議您將最新的 Amazon Cognito SDK 整合到您的應用程式中。SDK 的最新版本將收集裝置指紋資訊,例如裝置 ID、型號和時區。如需有關 Amazon Cognito SDK 的詳細資訊,請參閱安裝使用者集區 SDK。Amazon Cognito 威脅防護只會儲存並指派風險分數給應用程式以正確格式提交的事件。如果 Amazon Cognito 傳回錯誤回應,請檢查確認您的請求包含有效的私密雜湊,且 IPaddress
參數是有效的 IPv4 或 IPv6 地址。
ContextData
和 UserContextData
資源
-
AWS Amplify 適用於 Android 的 SDK:GetUserContextData
-
AWS Amplify 適用於 iOS 的 SDK:userContextData
-
JavaScript:amazon-cognito-advanced-security-data.min.js
檢視和匯出使用者事件歷史記錄
當您啟用威脅防護時,Amazon Cognito 會為每個身分驗證事件產生日誌。根據預設,您可以在 Amazon Cognito 主控台的使用者功能表中或使用 AdminListUserAuthEvents API 操作檢視使用者日誌。您也可以將這些事件匯出至外部系統,例如 CloudWatch Logs、Amazon S3 或 Amazon Data Firehose。匯出功能可讓您自己的安全分析系統更容易存取應用程式中使用者活動的安全資訊。
檢視使用者事件歷史記錄 (AWS Management Console)
若要查看使用者的登入歷史記錄,您可以從 Amazon Cognito 主控台的使用者選單中選擇使用者。使用者事件歷史記錄將由 Amazon Cognito 保留 2 年。

每個登入事件都有一個事件 ID。事件還具有對應的內容資料,例如位置、裝置詳細資訊和風險偵測結果。
您還可以在事件 ID 與 Amazon Cognito 記錄事件時發放的字符之間建立關聯。ID 和存取權杖在其承載中包含此事件 ID。Amazon Cognito 還會在重新整理權杖使用與原始事件 ID 之間建立關聯。您可以將原始事件 ID 回溯至導致發放 Amazon Cognito 權杖之登入事件的事件 ID。您可以追溯系統中的字符使用記錄,以找出特定的身分驗證事件。如需詳細資訊,請參閱了解使用者集區 JSON Web 權杖 JWTs)。
檢視使用者事件歷史記錄 (API/CLI)
您可以使用 Amazon Cognito API 操作 AdminListUserAuthEvents 查詢使用者事件歷史記錄,或使用 admin-list-user-auth-events 查詢 AWS Command Line Interface (AWS CLI)。
匯出使用者身分驗證事件
設定您的使用者集區,將使用者事件從威脅防護匯出到外部系統。支援的外部系統 –Amazon S3、CloudWatch Logs 和 Amazon Data Firehose – 可能會為您傳送或擷取的資料增加 AWS 帳單成本。如需詳細資訊,請參閱匯出威脅防護使用者活動日誌。
提供事件意見回饋
事件意見回饋會影響即時的風險評估,並可隨著時間改善風險評估演算法。您可以透過 Amazon Cognito 主控台和 API,在登入嘗試的有效期間內提供意見回饋。
注意
您的事件意見回饋會影響 Amazon Cognito 指派給具有相同特性之後續使用者工作階段的風險等級。
在 Amazon Cognito 主控台中,從使用者功能表中選擇使用者,然後選取提供事件意見回饋。您可以查看事件詳細資訊,並 Set as valid (設定為有效) 或 Set as invalid (設定為無效)。
主控台會在使用者選單的使用者詳細資訊中列出登入歷史記錄。如果您選取一個項目,可以將事件標記為有效或無效。您也可以透過使用者集區 API 操作 AdminUpdateAuthEventFeedback,以及透過 AWS CLI 命令 admin-update-auth-event-feedback 提供意見回饋。
當您在 Amazon Cognito 主控台中選取 Set as valid (設定為有效) 或在 API 中為 FeedbackValue
提供 valid
值時,這會告訴 Amazon Cognito 您信任 Amazon Cognito 已評估具一定風險程度的使用者工作階段。當您在 Amazon Cognito 主控台中選取 Set as invalid (設定為無效) 或在 API 中提供 invalid
的 FeedbackValue
值時,您會告訴 Amazon Cognito 您不信任用者工作階段,或者您認為 Amazon Cognito 評估的風險程度不夠高。
傳送通知訊息
透過威脅防護,Amazon Cognito 可以通知使用者有風險的登入嘗試。Amazon Cognito 還可以提示使用者選取連結以指示登入是有效或無效。Amazon Cognito 使用此意見回饋來提高使用者集區的風險偵測準確性。
於 Automatic risk response (自動風險回應) 區段中,選擇低度、中度和高度風險案例適用的 Notify Users (通知使用者)。

Amazon Cognito 會傳送電子郵件通知給您的使用者,無論他們是否已驗證其電子郵件地址。
您可以自訂通知電子郵件訊息,並提供純文字和 HTML 兩種版本的訊息。若要自訂電子郵件通知,請在威脅防護組態中開啟自適應性身分驗證訊息的電子郵件範本。若要進一步了解電子郵件範本,請參閱 訊息範本。