Amazon Cognito 是一個以開發者為中心並注重安全的客戶身份和存取管理服務,簡化了在行動和網頁應用程式中新增用戶註冊、登入及存取控制的過程。Cognito 是一個高可用的服務,支援多種使用案例,從管理用戶身份驗證和授權到確保安全存取您的 API 和工作負載。它是一種託管服務,可以作為您應用程式的身份提供者,能夠擴展到數百萬用戶,提供先進的安全功能,並支援與第三方身份提供者的身份聯合。
Amazon Cognito 的一個功能是支援 OAuth 2.0 用戶端憑證授權,用於機器對機器(M2M)的授權。隨著您的 M2M 使用案例擴展,適當的監控、令牌發行的優化以及安全最佳實踐和考量變得重要。應用程式用戶端應在本地快取並重用仍然有效且未過期的存取令牌。您可以自訂發行令牌的有效時間,因此確保時間框架符合您的安全需求很重要。如果無法在用戶端層面快取和重用存取令牌,或無法強制執行,則可以結合使用 Amazon API Gateway 的 REST API 代理整合來快取令牌回應。通過使用 API Gateway 快取,您可以優化 M2M 授權的存取令牌請求和回應,從而減少對 Cognito 的冗餘呼叫,提升整體性能、可用性和安全性。
在這篇文章中,我們探討了幫助監控、優化和保護 Amazon Cognito M2M 授權的策略。您將首先學習一些有效的監控技術以追蹤您的使用情況,然後深入了解使用 API Gateway 和令牌快取的優化策略。最後,我們將介紹安全最佳實踐和考量,以增強您的 M2M 使用案例的安全性。讓我們深入了解如何充分利用您的 Amazon Cognito M2M 實施。
機器對機器授權
Amazon Cognito 使用 OAuth 2.0 用戶端憑證授權來處理 M2M 授權。Cognito 用戶池可以發行用戶端 ID 和用戶端密鑰,允許您的服務請求符合 JSON Web Token (JWT) 的存取令牌以存取受保護的資源。圖 1 說明了應用程式用戶端如何使用 Amazon Cognito 的用戶端憑證授權流程來請求存取令牌。
圖 1:用戶端憑證授權流程
用戶端憑證授權流程(圖 1)包括以下步驟:
- 應用程式用戶端向 Amazon Cognito 用戶池 /token 端點發出 HTTP POST 請求(詳情請參閱令牌發行者端點),提供包含用戶端 ID 和用戶端密鑰的授權標頭,以及包含授權類型、用戶端 ID 和範圍的請求參數。
- 在驗證請求後,Cognito 將返回符合 JWT 的存取令牌。
- 用戶端可以使用 Cognito 發行的存取令牌向下游資源伺服器發出後續請求。
- 資源伺服器從 Cognito 用戶池獲取 JSON Web Key Set (JWKS)。JWKS 包含用戶池的公鑰,應用於驗證令牌簽名。
- 資源伺服器使用公鑰驗證存取令牌的簽名是否有效(證明令牌未被篡改)。資源伺服器還需要驗證令牌未過期,並且所需的聲明和值,包括範圍,是否存在。資源伺服器應使用 aws-jwt-verify 庫來驗證存取令牌的有效性。
- 在存取令牌驗證通過並且應用程式用戶端獲得授權後,請求的資源將返回給應用程式用戶端。
您可以在《如何在 Amazon Cognito 中使用 OAuth 2.0:了解不同的 OAuth 2.0 授權》中了解有關用戶端憑證授權和 Amazon Cognito 支援的其他身份驗證流程的更多資訊。
現在,讓我們深入探討有關 Amazon Cognito M2M 授權的監控、優化和安全考量。
監控使用情況和成本
在 2024 年 5 月,Amazon Cognito 引入了 M2M 授權的定價,以支援持續增長並擴展 M2M 功能。2024 年 5 月 9 日之前使用 Cognito 的 M2M 的客戶帳戶在 2025 年 5 月 9 日之前免除 M2M 定價(詳情請參閱 Amazon Cognito 為機器對機器 (M2M) 使用引入分層定價)。為了更好地了解您現有的 Amazon Cognito 使用類型,您可以使用成本和使用儀表板操作解決方案(CUDOS)儀表板的安全標籤。此儀表板是雲端智慧儀表板的一部分,這是一個開源框架,為 AWS 客戶提供可行的洞察和優化機會,適用於組織規模。圖 2 顯示了 CUDOS 儀表板中的安全標籤,提供了 Amazon Cognito 每種使用類型的成本和支出以及豁免期後 M2M 應用程式用戶端和令牌請求的預測成本的視覺化。這種每日細分允許您追蹤您的成本優化努力的趨勢。

圖 2:Amazon Cognito 支出和每日細分的預測成本示例
您還可以查看每個帳戶的每種使用類型的每月支出,如圖 3 所示。

圖 3:每個 AWS 帳戶的 Amazon Cognito 支出和預測成本示例
您可以查看用戶池的每個資源 ID 的使用和支出,如圖 4 所示。這種資源級別的細分使您能夠識別支出最高的用戶池,並相應地優先考慮使用和成本管理工作。此儀表板的互動演示可用。更多資訊,請參閱雲端智慧儀表板。

圖 4:按資源 ID、帳戶和 AWS 區域顯示的 Amazon Cognito 資源使用和成本示例
除了使用 CUDOS 儀表板來幫助了解 Cognito M2M 使用情況和成本外,您還可以請求細粒度的使用詳情,直至應用程式用戶端層級。這可以包括每個應用程式用戶端成功請求的存取令牌數量以及應用程式用戶端最後一次用於發行令牌的時間。要了解細粒度的應用程式用戶端使用情況,您需要確保令牌請求包含 client_id 請求查詢參數。這將導致 AWS CloudTrail 日誌事件,其中包含與用戶端憑證令牌請求相關的 client ID,顯示在 additionalEventData JSON 物件中,如圖 5 所示。

圖 5:包含 client_id 的 CloudTrail 事件日誌示例
您還可以使用 Amazon CloudWatch 日誌群組來捕獲和存儲您的 CloudTrail 日誌以進行更長時間的保留和分析。然後使用 CloudWatch Logs Insights,您可以使用以下示例查詢來收集應用程式用戶端使用情況。
圖 6 是前述 CloudWatch Logs Insights 查詢的示例結果。結果包括 user_pool_id、client_id、count 和 last_used 欄位。按用戶池和用戶端 ID 分組的成功令牌請求總數將顯示在 count 欄位中,應用程式用戶端最後一次成功發行存取令牌的時間將顯示在 last_used 欄位中。

圖 6:CloudWatch Logs Insights 查詢的示例截圖結果集
優化令牌請求
現在您知道如何更好地監控您的 Amazon Cognito 使用情況和成本,讓我們深入了解如何優化您的令牌請求使用。對於 M2M,建議用戶端使用機制在本地快取存取令牌以用於授權。這將減少用戶端在先前發行的令牌不再有效之前請求新存取令牌的需求。然而,用戶端運行的環境可能由外部第三方託管或由不同的團隊擁有,作為資源所有者,您無法控制第三方是否在用戶端實施令牌快取。如果這是您遇到的情況,您可以使用 HTTP 代理整合來使用 API Gateway 快取存取令牌。由於 M2M 使用案例遵循 OAuth 2.0 規範的用戶端憑證授權流程,您的用戶池的 /token 端點將配置為 API Gateway 代理整合。這是可以使用 API Gateway 快取的代理整合。有了快取,您可以減少對用戶池 /token 端點的令牌請求數量,並改善用戶端接收快取令牌的延遲。通過快取,您可以實現額外的好處,例如成本優化、性能效率提升、更高的可用性和自訂域靈活性。
解決方案概述

圖 7:令牌快取解決方案
解決方案(如圖 7 所示)包括以下步驟。
- 用戶端向 API Gateway REST API 發出 HTTP POST 請求。
- API Gateway 方法請求將範圍 URL 查詢字串參數和授權 HTTP 請求標頭作為快取鍵。整合請求配置為指向 Amazon Cognito 用戶池的 /oauth2/token 端點的代理。
- Cognito 驗證請求,確保授權標頭中的用戶端 ID 和用戶端密鑰正確,提供的查詢字串參數中有有效的用戶端 ID,並且用戶端獲得了請求範圍的授權。
- 如果請求有效,Cognito 將通過整合回應將存取令牌返回給網關。啟用快取後,HTTP 整合(Cognito 令牌端點)的回應將在指定的存活時間(TTL)期間快取。
- 網關的方法回應將存取令牌返回給用戶端。
- 具有剩餘快取 TTL 的後續令牌請求將使用授權標頭和範圍作為快取鍵返回。
要設置令牌快取,請按照《管理用戶池令牌過期和快取》中的步驟進行。在通過 API Gateway 代理整合返回有效的令牌請求並快取後,匹配快取鍵(授權標頭和範圍參數)的後續令牌請求將返回相同的存取令牌。該令牌將返回給用戶端,直到快取令牌的 TTL 到期。建議將快取的 TTL 設置為比 Amazon Cognito 發行的存取令牌的 TTL 少幾分鐘。例如,如果您的安全姿態要求存取令牌有效期為 1 小時,則將快取 TTL 設置為比 1 小時的令牌有效性少幾分鐘。了解您的使用案例的理想快取容量也很重要。快取容量會影響網關內快取實例的 CPU、記憶體和網路頻寬。因此,快取容量會影響快取的性能。請參閱《啟用 Amazon API Gateway 快取》以獲取更多資訊。了解如何確定您的使用案例的理想快取容量,請參閱《如何選擇最佳的 Amazon API Gateway 快取容量以避免達到速率限制?》。現在讓我們探討一些安全最佳實踐和考量,以提高您的 M2M 使用案例的安全標準。
安全最佳實踐
現在您知道如何監控 Amazon Cognito M2M 使用情況和成本以及如何優化存取令牌請求,讓我們來回顧一些安全最佳實踐和考量。使用 OAuth 2.0 用戶端憑證授權進行 M2M 授權有助於保護您的 API。這其中的一個關鍵因素是用戶端用於連接到資源伺服器的存取令牌是一個臨時且有時間限制的令牌。用戶端必須在其先前的令牌過期後獲取新存取令牌,因此您不必發行直接在用戶端和資源伺服器之間使用的長期憑證。用戶端 ID 和用戶端密鑰在用戶端上保持機密,僅用於在用戶端和 Amazon Cognito 用戶池之間請求存取令牌。
使用 AWS Secrets Manager
如果工作負載在 AWS 上運行,請使用 AWS Secrets Manager,以免擔心將憑證硬編碼到工作負載和應用程式中。如果工作負載在本地或通過其他提供者運行,則使用類似的秘密保管庫或特權存取管理解決方案來存放工作負載憑證。工作負載應僅在運行時檢索憑證以進行身份驗證。
使用 AWS WAF
使用 AWS WAF 保護您的 Amazon Cognito 用戶池端點是一種安全最佳實踐。這可以幫助保護您的用戶池免受不需要的 HTTP 網頁請求,通過將選定的非機密標頭、請求正文、查詢參數和其他請求組件轉發到與您的用戶池相關聯的 AWS WAF 網頁存取控制清單 (ACL)。通過使用 AWS WAF,您還可以向您的用戶池添加管理規則組,例如 AWS 管理的 Bot Control 規則組,以增加對自動化機器人消耗過多資源、導致停機或執行惡意活動的保護。了解更多有關如何將 AWS WAF 網頁 ACL 與您的 Cognito 用戶池關聯的資訊。
始終驗證令牌
在用戶端獲得存取令牌後,確保用戶端獲得授權以存取請求的資源非常重要。如果資源使用 API Gateway 和內建的 Amazon Cognito 授權者,則令牌的完整性、簽名和令牌過期將為您檢查和驗證。然而,如果您需要使用 API Gateway 進行更自訂的授權決策,您可以使用 AWS Lambda 授權者以及 aws-jwt-verify 庫。通過這樣做,您可以驗證 JWT 令牌的簽名是否有效,確保令牌未過期,並且必要和預期的聲明存在(包括必要的範圍)。對於更細粒度的授權決策,考慮在資源伺服器中使用 Amazon Verified Permissions,甚至在 Lambda 授權者中使用。如果資源伺服器是 AWS 外部的系統或自訂資源伺服器,您需要確保在將請求的資源返回給用戶端之前驗證和驗證存取令牌。
在應用程式用戶端層級定義範圍
重要的是仔細定義和限制每個應用程式用戶端的存取範圍,以符合最小特權原則。通過將每個用戶端 ID 限制為僅必要的範圍,組織可以最大程度地減少發行具有超出所需存取和權限的存取令牌的風險。如果您的使用案例符合 M2M 多租戶,考慮為每個租戶創建一個專用的應用程式用戶端,並為該租戶使用定義的自訂範圍。請記住,M2M 應用程式用戶端的數量是一個定價維度,將產生成本。請參閱《自訂範圍多租戶最佳實踐》以獲取更多資訊。
安全考量
如果您使用 API Gateway 代理令牌請求並快取存取令牌,以下是一些提高您的 M2M 工作負載安全標準的安全考量。
僅允許通過 API Gateway 代理的令牌請求
在配置和設置 API Gateway 代理整合以進行優化並為您的用戶池配置 AWS WAF 後,您可以通過使用允許清單來增加一層安全性,以便僅接受來自您的 API Gateway 代理到 Amazon Cognito 用戶池的請求。為此,在 POST 方法執行的整合請求中注入自訂 HTTP 標頭,並在您的網頁 ACL 中創建一個允許規則以查找該特定標頭。您還將創建一個額外的網頁 ACL 規則以阻止所有流量。單一允許規則的優先順序為 0,阻止所有流量規則的優先順序為 1。最終,這將阻止所有直接發往 Cognito 用戶池 /token 端點的請求,僅允許通過 API Gateway 代理的請求。圖 8 隨後對此設置進行了更深入的解釋。

圖 8:具有 AWS WAF 的令牌快取解決方案
圖 8 所示的過程包括以下步驟:
- 用戶端直接向 Amazon Cognito 用戶池的 /oauth2/token 端點發出 HTTP POST 呼叫。此請求將被 AWS WAF 網頁 ACL 拒絕所有規則拒絕。
- 用戶端對 API Gateway 階段 (/token) 發起 OAuth2 用戶端憑證授權 (HTTP POST)。
- REST API 網關是 Cognito 用戶池的 /oauth2/token 端點的代理整合。
- 在整合請求設置中,配置自訂標頭(例如,x-wafAuthAllowRule)。將此標頭的值視為僅在 API Gateway 整合請求內部保留的秘密,並不暴露在網關之外。
- 考慮使用 Lambda、Amazon EventBridge 和 AWS Secrets Manager 自動輪換此標頭值,無論是在 API Gateway 整合請求中還是在 AWS WAF 網頁 ACL 規則中。
- 請求被代理到 Cognito /oauth2/token 端點,AWS WAF 被配置為保護 Cognito 用戶池端點,因此評估網頁 ACL 規則。
- 整合請求中的自訂標頭(前述步驟)將根據網頁 ACL 規則進行評估以允許此請求。
- Cognito 將驗證授權標頭(包含用戶端 ID 和用戶端密鑰)和請求的範圍。
- 在成功驗證憑證後,存取令牌將在整合回應中返回給網關。
- 使用以下快取鍵快取存取令牌:
- 授權標頭。
- 範圍查詢字串參數。
- 存取令牌通過 API Gateway 返回給用戶端。
- 具有剩餘快取 TTL 的後續令牌請求將立即返回給用戶端,使用授權標頭和範圍作為快取鍵。
使用 API Gateway 的額外授權者
使用用戶端憑證授權旨在獲取存取令牌,以便應用程式用戶端可以存取下游資源。如果您使用 API Gateway 作為您的令牌端點的代理整合,如前所述,您還可以使用 API Gateway 代理的單獨授權者。因此,要開始 OAuth 2.0 用戶端憑證授權流程,首先進行單獨的授權。例如,如果您處於高度受監管的行業中,您可能需要使用 mTLS 身份驗證來獲取存取令牌。這可能看起來像是雙重身份驗證場景;然而,這有助於防止未經身份驗證的嘗試針對您的 API Gateway 代理整合以從 Amazon Cognito 獲取存取令牌。
加密 API 快取
在配置您的 API Gateway 代理整合和配置您的 API 快取時,您可以啟用快取回應數據的加密。由於這會快取您選擇的 TTL 設置的存取令牌,您應考慮在必要時對此數據進行靜態加密,以幫助滿足您的安全需求。您可以使用默認的方法快取或設置覆蓋階段級別快取並啟用靜態加密。
結論
在這篇文章中,我們分享了如何監控、優化和提高您的機器對機器(M2M)授權使用案例的安全姿態,使用 Amazon Cognito。這涉及使用成本和使用儀表板操作解決方案 (CUDOS) 來了解您的 Cognito M2M 令牌請求和成本。我們還討論了使用 Amazon API Gateway 作為 HTTP 代理整合到 Cognito 用戶池 /oauth2/token 端點。通過遵循本文中的指導,您可以更好地了解您的 M2M 使用情況和成本,並實現額外的好處,例如成本優化、性能效率和更高的可用性。最後,我們提供了一些安全最佳實踐和考量,可以作為額外的層次來提升您的安全姿態。
如果您對本文有反饋,請在下方的評論區提交評論。如果您對本文有疑問,請在 Amazon Cognito re:Post 上開啟新主題或聯繫 AWS 支援。
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!