客戶身分管理 - AWS 規範指引

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

客戶身分管理

客戶身分和存取管理 (CIAM) 是一種技術,可讓組織管理客戶身分。它為註冊、登入和存取組織提供的消費者應用程式、入口網站或數位服務提供安全和增強的使用者體驗。CIAM 可協助您識別客戶、建立個人化體驗,以及判斷他們面對客戶的應用程式和服務所需的正確存取權。CIAM 解決方案也可以協助組織符合跨產業法規標準和架構的合規要求。如需詳細資訊,請參閱 CIAM 網站上的什麼是 Word?。 AWS

Amazon Cognito 是適用於 Web 和行動應用程式的身分服務,可為任何規模的企業提供 CIAM 功能。Amazon Cognito 包含使用者目錄、身分驗證伺服器和 OAuth 2.0 存取權杖的授權服務,也可以提供暫時的 AWS 憑證。您可以使用 Amazon Cognito 從內建使用者目錄、企業目錄等聯合身分提供者或 Google 和 Facebook 等社交身分提供者驗證和授權使用者。

Amazon Cognito 的兩個主要元件是使用者集區和身分集區。使用者集區是為 Web 和行動應用程式使用者提供註冊和登入選項的使用者目錄。身分集區提供暫時性 AWS 憑證,以授予使用者對其他 AWS 服務的存取權。

何時使用 Amazon Cognito

Amazon Cognito 是當您需要適用於 Web 和行動應用程式的安全且符合成本效益的使用者管理解決方案時的絕佳選擇。以下是您可能決定使用 Amazon Cognito 的一些案例:

  • 身分驗證。如果您要原型設計應用程式,或想要快速實作使用者登入功能,您可以使用 Amazon Cognito 的使用者集區和託管 UI 來加速開發。您可以在 Amazon Cognito 處理使用者註冊、登入和安全性時,專注於核心應用程式功能。

    Amazon Cognito 支援各種身分驗證方法,包括使用者名稱和密碼、社交身分提供者,以及透過 SAML 和 OpenID Connect (OIDC) 的企業身分提供者。

  • 使用者管理。Amazon Cognito 支援使用者管理,包括使用者註冊、驗證和帳戶復原。使用者可以註冊並登入其偏好的身分提供者,而且您可以根據您的應用程式需求自訂註冊程序。

  • 安全存取 AWS 資源。Amazon Cognito 與 IAM 整合,為 AWS 資源提供精細的存取控制。您可以定義 IAM 角色和政策,以根據使用者身分和群組成員資格來控制對 AWS 服務的存取。

  • 聯合身分。Amazon Cognito 支援聯合身分,允許使用者使用其現有的社交或企業身分登入。這讓使用者不需要為應用程式建立新的憑證,因此可增強使用者體驗並減少註冊程序期間的摩擦。

  • 行動和 Web 應用程式。Amazon Cognito 非常適合行動和 Web 應用程式。它為各種平台提供 SDKs,並可輕鬆將身分驗證和存取控制整合到您的應用程式程式碼中。它支援行動應用程式的離線存取和同步,因此即使使用者離線,也可以存取其資料。

  • 延展性。​ Amazon Cognito 是一項高可用性且完全受管的服務,可以擴展到數百萬使用者。它每月處理超過 1,000 億個身分驗證。

  • 安全性。Amazon Cognito 具有數個內建的安全功能,例如敏感資料的加密、多重要素驗證 (MFA),以及防止跨網站指令碼 (XSS) 和跨網站請求偽造 (CSRF) 等常見 Web 攻擊的保護。Amazon Cognito 也提供進階安全功能,例如適應性身分驗證、檢查遭入侵憑證的使用情況,以及存取權杖自訂。

  • 與現有 AWS 服務整合。Amazon Cognito 與 AWS 服務無縫整合。這可以簡化對依賴 AWS 資源之功能的開發和使用者管理。

下圖說明其中一些案例。

使用 Amazon Cognito 作為客戶身分和存取管理 (CIAM)
  1. 應用程式會使用 Amazon Cognito 使用者集區進行身分驗證並取得權杖。

  2. 應用程式使用 Amazon Cognito 身分集區來交換權杖作為 AWS 憑證。

  3. 應用程式會使用 憑證存取 AWS 服務。

我們建議您在需要將使用者身分驗證、授權和使用者管理功能新增至 Web 或行動應用程式時,使用 Amazon Cognito,尤其是當您有多個身分提供者、需要安全存取 AWS 資源,以及具有可擴展性要求時。

設計考量
  • 根據您的需求建立 Amazon Cognito 使用者集區或身分集區。

  • 請勿太常更新使用者設定檔 (例如,每次登入請求時)。如果需要更新,請將更新的屬性存放在外部資料庫中,例如 Amazon DynamoDB。

  • 請勿使用 Amazon Cognito 人力資源身分管理。

  • 您的應用程式應一律先驗證 JSON Web 權杖 (JWTs),再透過驗證其簽章和有效性來信任它們。此驗證應在用戶端完成,而不將 API 呼叫傳送至使用者集區。驗證權杖之後,您可以信任權杖中的宣告,並使用它們,而不是進行額外的 getUser API Word呼叫。如需詳細資訊,請參閱 Amazon Cognito 文件中的驗證 JSON Web 權杖。您也可以使用其他 JWT 程式庫進行權杖驗證。

  • 只有在您未使用CUSTOM_AUTH流程、AWS Lambda 觸發條件來應對自訂身分驗證挑戰或聯合登入時,才啟用 Amazon Cognito 的進階安全功能。如需進階安全功能的考量和限制,請參閱 Amazon Cognito 文件。

  • 啟用 WAF AWS 以使用速率型規則並合併多個請求參數來保護 Amazon Cognito 使用者集區。如需詳細資訊,請參閱 AWS 部落格文章使用 AWS 保護您的 Amazon Cognito 使用者集WAF

  • 如果您想要多一層保護,請使用 Amazon CloudFront 代理來額外處理和驗證傳入的請求,如 AWS 部落格文章所述,使用 Amazon CloudFront 代理保護 Amazon Cognito 的公有用戶端

  • 使用者登入後的所有 API 呼叫都應從後端服務進行。例如,使用 WAF AWS 拒絕對 的呼叫UpdateUserAttribute,然後改為AdminUpdateUserAttribute從應用程式後端呼叫,以更新使用者屬性。

  • 建立使用者集區時,您可以選擇使用者登入的方式,例如使用使用者名稱、電子郵件地址或電話號碼。建立使用者集區後,無法變更此組態。同樣地,自訂屬性在新增至使用者集區之後,就無法變更或移除。

  • 建議您在使用者集區中啟用多重要素驗證 (MFA)

  • Amazon Cognito 目前不提供內建備份或匯出函數。若要備份或匯出使用者的資料,您可以使用 Amazon Cognito Profiles Export Reference Architecture

  • 使用 IAM 角色進行 AWS 資源的一般存取。對於精細的授權要求,請使用 Amazon Verified Permissions。此許可管理服務與 Amazon Cognito 原生整合。您也可以使用存取字符自訂來豐富應用程式特定的宣告,以判斷使用者可用的存取和內容層級。如果您的應用程式使用 Amazon API Gateway 作為進入點,請使用 Amazon Cognito 功能,使用 Amazon Verified Permissions 保護 Amazon API Gateway。此服務會管理和評估參考使用者屬性和群組的精細安全政策。您可以確保只有授權 Amazon Cognito 群組中的使用者才能存取應用程式的 APIs。如需詳細資訊,請參閱 API 社群網站上的文章 Protect Word Gateway with Amazon Verified Permissions。 AWS

  • 使用 SDKs AWS 來呼叫和擷取使用者屬性、狀態和群組資訊,以從後端存取使用者資料。您可以在 Amazon Cognito 的使用者屬性中存放自訂應用程式資料,並在裝置間保持同步。

下列各節討論將 Amazon Cognito 與其他 AWS 服務整合的三種模式:Application Load Balancer、Amazon API Gateway 和 Amazon OpenSearch Service。

與 Application Load Balancer 整合

您可以使用 Amazon Cognito 設定 Application Load Balancer 來驗證應用程式使用者,如下圖所示。

使用 Amazon Cognito 設定 Application Load Balancer 以進行身分管理

透過設定 HTTPS 接聽程式預設規則,您可以將使用者識別資料卸載至 Application Load Balancer,並建立自動身分驗證程序。如需詳細資訊,請參閱 Word Knowledge Center 中的如何設定 Application Load Balancer,以透過 Amazon Cognito 使用者集區來驗證使用者。 AWS如果您的應用程式託管在 Kubernetes 上,請參閱 AWS 部落格文章如何使用 Application Load Balancer 和 Amazon Cognito 來驗證 Kubernetes Web 應用程式的使用者。 

與 Amazon API Gateway 整合

Amazon API Gateway 是一項完全受管的雲端型 API 閘道服務,可讓您輕鬆大規模建立、發佈和管理 APIs。這是使用者流量進入後端服務的進入點。您可以整合 Amazon Cognito 與 API Gateway,以實作身分驗證和存取控制,保護 APIs 免於誤用,或用於任何其他安全或業務使用案例。您可以使用 Amazon Cognito 授權方、Amazon Verified Permissions 或 Lambda 授權方實作身分驗證和存取控制,以保護 API Gateway APIs。下表說明這三種方法如何支援授權。

授權方類型 支援的授權

Amazon Cognito 授權方

存取權杖:範圍

ID 權杖:有效性

已驗證許可 – Lambda 授權方

已驗證許可會針對設定的權杖執行權杖驗證 (簽章、過期)。

存取權杖:任何簡單的屬性、複雜的屬性、範圍或群組。

ID 字符:任何簡單的屬性、複雜的屬性、範圍或群組。

政策也可以使用內容資料進行零信任授權 (例如 IP 地址、請求內容或裝置指紋)。

自訂 Lambda 授權方

您可以實作自訂權杖驗證和授權方案。

Amazon Cognito 授權方

您可以整合 Amazon Cognito 與 API Gateway,以實作身分驗證和存取控制,如下圖所示。Amazon Cognito 授權方會驗證 Amazon Cognito 產生的 JSON Web 權杖 (JWT),並根據存取權杖中的自訂範圍或有效的 ID 權杖來授權請求。若要進一步了解實作,請參閱 AWS 知識庫中的如何將 Amazon Cognito 使用者集區設定為 API Gateway REST 上的授權方API?

使用 Amazon Cognito 授權方搭配 API Gateway 進行身分管理

已驗證許可 – Lambda 授權方

您可以使用 Amazon Verified Permissions 將 Amazon Cognito 或您自己的身分提供者與 API Gateway 整合,以進行身分驗證和精細存取控制。已驗證許可支援 Amazon Cognito 或任何 OpenID Connect (OIDC) 供應商的 ID 和存取權杖驗證,並可根據簡單的權杖屬性、複雜的權杖屬性 (例如陣列或 JSON 結構)、範圍和群組成員資格來授權存取權。若要開始使用驗證許可APIs來保護 API Gateway REST,請參閱 AWS 安全部落格文章使用 Amazon Cognito 的驗證許可授權 API Gateway APIs,或攜帶您自己的身分提供者和影片 Amazon 驗證許可 – 快速入門概觀和示範

使用 Verified Permissions Lambda 授權方搭配 API Gateway 進行身分管理

Lambda 授權方

您可以使用 AWS Lambda 授權方來實作自訂授權方案。您的配置可以使用請求參數來判斷來電者的身分,或使用 OAuth 或 SAML 等不記名字符身分驗證策略。此選項提供最大的彈性,但需要您為 APIs 安全邏輯編寫程式碼。如需詳細資訊,請參閱 API Gateway 文件中的使用 Word Gateway Lambda 授權方。 API

與 Amazon OpenSearch Service 整合

您可以使用 Amazon Cognito 來保護 Amazon OpenSearch Service 網域。例如,如果使用者可能需要從網際網路存取 OpenSearch Dashboards,如下圖所示。在此案例中,Amazon Cognito 可以透過將 Amazon Cognito 群組和使用者映射到 internal OpenSearch Service 許可,提供存取許可,包括精細許可。如需詳細資訊,請參閱 OpenSearch Service 文件中的設定 Word Dashboards 的 Amazon Cognito 身分驗證。 OpenSearch

使用 Amazon Cognito 保護 Amazon OpenSearch Service 網域