本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
方案元件
公共和私人等候室 APIs
關於 AWS 解決方案的主要目的的虛擬等待室是以受控的方式控制客戶端的 JSON Web Token(JWT)的生成,以避免可能使目標網站不堪重負的新用戶爆發。JWTs可用於網站保護,在獲得等候室令牌之前防止訪問網頁,以及用於API訪問授權。
核心模板安裝API用於大多數虛擬等候室的公共API和私有(IAM-授權)的 AWS 操作。公API用會根據API路徑設定具有多個快取原則的 CloudFront散佈。隨即建立 DynamoDB 資料表和 EventBridge事件匯流排。該範本會新增一個VPC包含兩個可用區域 (AZs)、兩者中的彈性疼 (RedisOSS) 叢集AZs,以及多個 Lambda 函數的新功能。與 Elasticache (RedisOSS) 互動的 Lambda 函數在其中具有網路介面,VPC而所有其他 Lambda 函數均具有預設網路連線能力。核心APIs是與解決方案的交互的最低層。其他 Lambda 函數、Amazon 彈性運算雲端 (AmazonEC2) 執行個體和容器都可以充當擴充功能,並呼叫核心APIs以建立等候室、控制入口流量,以及對解決方案產生的事件做出反應。
此外,核心堆疊會針對其所有 Lambda 函數錯誤和節流狀況建立警示,以及針對 4XX 和 5XX 狀態碼的每個API閘道部署建立警示。
-
CloudFront 分佈為客戶端提供公共API呼叫,並在適當的情況下緩存結果。
-
Amazon API Gateway 來自虛擬等候室的公有API程序佇列請求、追蹤佇列位置,並支援驗證允許存取目標網站的權杖。
-
SQSqueue 可調節處理佇列訊息之 AWS Lambda 函數的流量。
-
AssignQueueNum
Lambda 函數會驗證其批次接收的每則訊息、在 Elasticache (Redis) 中遞增佇列計數器,並將每個要求儲存在 Elasticache (RedisOSS) 中,並將每個要求及其相關聯的佇列位置儲存在 Elasticache (RedisOSS) 中。 -
L
GetPublicKey
ambda 函數會從 Secrets Manager 擷取公開金鑰值。 -
L
GenerateToken
ambda 函數會針JWT對已允許在目標網站完成交易的有效請求產生一個。它將事件寫入等候室的自定義事件總線,該事件已生成令牌。如果先前已為此請求生成令牌,則不會生成新令牌。 -
GetQueueNumber
Lambda 函數檢索並返回從彈性(Redis OSS 的)隊列中的客戶端的數字位置。 -
該
GetServingNumber
Lambda 函數檢索並返回當前由等待室從彈性(RedisOSS)提供服務的號碼。 -
L
GetWaitingNum
ambda 函數返回當前在等待室中排隊並尚未發出令牌的數字。 -
VPC端點可讓中的 Lambda 函數與VPC解決方案內的服務進行通訊。
-
Elasticache (RedisOSS) 叢集會儲存所有使用有效事件識別碼進入等候室的要求。它還存儲了幾個計數器,例如排入隊的請求數量,當前服務的數量,生成的令牌數量,完成的會話數以及放棄的會話數量。
-
API閘道私有API資源,以支援管理功能。私APIs有已 AWS IAM驗證。
-
L
GetExpiredTokens
ambda 函數返回帶IDs有過期令牌的請求列表。 -
L
AuthGenerateToken
ambda 函數會為已允許在目標網站完成交易的有效請求產生權杖。核心堆疊部署期間最初設定的權杖的發行者和有效期間可以覆寫。它將事件寫入等候室的自定義事件總線,該事件已生成令牌。如果先前已為此請求生成令牌,則不會生成新令牌。 -
IncrementServingCounter
Lambda 函數增加存儲在彈性(RedisOSS)中的等待室的服務計數器,給定的增量按值。 -
GetNumActiveTokens
Lambda 函數會查詢 DynamoDB 中尚未過期、尚未用來完成其交易且尚未標示為放棄的權杖數目。 -
ResetState
Lambda 函數會重設儲存在彈性痛 (RedisOSS) 中的所有計數器。它也會刪除和重新建立TokenTable
QueuePositionEntryTime
、和ServingCounterIssuedAt
DynamoDB 表格。此外,它執行 CloudFront 緩存失效。 -
UpdateSession
Lambda 函數會更新儲存在TokenTable
DynamoDB 表中的工作階段 (權杖) 的狀態。會話狀態由一個整數表示。工作階段設定為的狀態1
表示已完成,並-1
表示已放棄。它會將事件寫入等候室的自訂事件匯流排,表示工作階段已更新。 -
動
TokenTable
態資料表會儲存權杖資料。 -
QueuePositionEntryTime
DynamoDB 表格會儲存佇列位置和輸入時間資料。 -
ServingCounterIssuedAt
DynamoDB 資料表會將更新儲存至服務計數器。 -
當用戶端要求剩餘的佇列位置到期時間時,會叫用
GetQueuePositionExpireTime
Lambda 函數。 -
L
SetMaxQueuePositionExpired
ambda 函數設置已過期對應於ServingCounterIssuedAt
表值的最大隊列位置。如果true
在核心堆疊部署期間將IncrSvcOnQueuePositionExpiry
參數設定為,它會每分鐘執行一次。 -
GenerateEvents
Lambda 函數會將各種等候室指標寫入等候室的自訂事件匯流排。如果true
在核心堆疊部署期間將啟用事件產生參數設定為,它會每分鐘執行一次。 -
AWS Secrets Manager 存儲令牌操作和其他敏感數據的密鑰。
-
每次產生權杖並在
TokenTable
DynamoDB 表中更新工作階段時,Amazon EventBridge 自訂事件匯流排都會收到事件。當服務計數器在SetMaxQueuePositionExpired
Lambda 中移動時,它也會接收事件。如果在核心堆疊部署期間啟用,則會使用各種等候室指標寫入。 -
如果在核心堆疊部署期間將啟用 CloudWatch 事件產生參數設定為 true,則會建立 Amazon 事件規則。此事件規則會每分鐘啟動
GenerateEvents
Lambda 函數。
Authorizers
此解決方案包括API閘道 Lambda 授權者堆疊。該堆棧由一個IAM角色和一個 Lambda 函數組成。L APIGatewayAuthorizer
ambda 函數是API閘道的授權者,可驗證虛擬等候室所發行權杖的簽章和宣告。 AWS API堆疊隨附的 Lambda 函數可用於保護雲端,APIs直到使用者在等候室中進展並收到存取權杖為止。授權者會自動從核心檢索並緩存公鑰和配置以API進行令牌驗證。它可以在沒有修改的情況下使用,並且可以安裝在任何支持的 AWS 區域 AWS Lambda。
OpenID 適配器
OpenID 介面卡
-
CloudFront 散發將 S3 儲存貯體的內容提供給使用者。
-
S3 儲存貯體託管範例等候室頁面。
-
Amazon API Gateway API 提供一組與現有的OIDC網路託管軟體搭配使用,這些軟體可支援OIDC身分供應商的 Lambda 授權功能。APIs
-
APIHandler
Lambda 函數會處理所有API閘道資源路徑的要求。同一模塊中的不同 Python 函數映射到每個API路徑。例如,API閘道中的/authorize
資源路徑會在 Lambda 函數authorize()
內叫用。 -
OIDC設定會儲存在 Secrets Manager 中。
進水策略範例
入口策略決定解決方案的服務計數器何時應向前移動,以容納更多目標場地的使用者。若要取得有關等候室進水策略的更多概念資訊,請參閱設計考量。
解決方案提供了兩種取樣入口策略:MaxSize和「週期性」。
最大尺寸入口策略選項:
-
用戶端會發出 Amazon SNS 通知,呼叫
MaxSizeInlet
Lambda 函數,以根據訊息承載增加服務計數器。 -
MaxSizeInlet
Lambda 函數會預期收到一則訊息,說明它使用它決定要增加多少服務計數器。
週期性入口策略選項:
-
CloudWatch 規則會每分鐘叫用 Lambda 函數,將服務計數器增加固定數量。
-
如果時間在提供的開始和結束時間之間,則
PeriodicInlet
Lambda 函數會按給定大小遞增服務計數器。或者,它會檢查 CloudWatch 警示,如果警示OK
處於狀態,則執行增量,否則會略過它。
樣品等候室
樣品等候室除了定制授權者之外,還與公共和私人APIs集成,以展示最小的 end-to-end 等候室解決方案。主網頁存放在 S3 儲存貯體中,並作為的來源使用 CloudFront。它需要用戶完成以下步驟:
-
在等候室排隊進入現場。
-
獲得客戶在線的位置。
-
獲得等候室的服務位置。
-
當服務位置等於或大於客戶的位置時,獲取令牌集。
-
使用權杖呼叫受 Lambda 授權者API保護的權限。
-
S3 儲存貯體託管等候室和控制台的範例內容。
-
CloudFront 散發將 S3 儲存貯體內容提供給使用者。
-
使用類似購物的資源路徑 (如和) 的API閘道部署範例。
/search
/checkout
API它由堆棧安裝並使用令牌授權者配置。它旨在作為一個簡單的方法來保護候車室API的例子。顯示有效權杖的要求會轉送至 Lambda,否則會傳回錯誤。除了附加的 Lambda 函數的回應之外,沒有API其他功能。