AWS - API Gateway Lambda Authorizer


API Gateway Lambda Authorizer

這是一種組合,由 lambda function 負責驗證 API 請求身份,驗證成功回傳 IAM Policy 或 Allow/Deny decision 控制 API Gateway 是否允許進入後端 Lambda/Service

間單說: API Gateway 問 Lambda 此 request 是否可以進入,Lambda 不處理資料業務,只負責身份與授權

image


Authorizer 兩種類型

Type Token-based Request parameter-based
Name Token Authorizer Request Authorizer
驗證輸入來源 Authorization Header / JWT Header / Query String / Stage variables
使用場景 JWT/OAuth2/Cognito token 客制多屬性驗證(IP/Device ID/Tenant ID)
效能 較快 較多資源需處理
  • TOKEN Authorizer Pattern 常用於
    • Cognito JWT Tokens
    • OAuth2 access token
    • Internal Signed token
  • REQUEST Authorizer Patter 適合
    • Multi-tenant 驗證
    • 根據客制 metadata 判斷授權
    • 多欄位驗證(header + query)

範例

  • x-tenant-id
  • device-id

回傳格式(IAM Policy Example)

Lambda Authorizer 回傳 IAM Policy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"principalId":"user123",
"policyDocument":{
"Version":"2012-10-17",
"Statement":[
{
"Action":"execute-api:Invoke",
"Effect":"Allow",
"Resource":"arn:aws:execute-api:us-east-1:123456789012:api-id/*/GET/example"
}
]
},
"context":{
"role":"admin",
"plan":"premium"
}
}

context 可以傳入後端 Lambda 作細粒度的存取控制


Cache 效能提升

  • Authorizer TTL: 可 Caching 授權結果(預設 300s)
  • 決策重複利用: 大幅降低 Lambda Authorizer 成本與延遲

Lambda Authorizer VS Cognito

Lambda Authorizer Cognito Authorizer
自行驗證 Token/邏輯客制化 自動驗證 Cognito JWT
適合 OAuth2 多來源身份提供者 適合 Mobile/Web w/Cognito
較複雜/高維護成本 無需維護,內建 Scaling
  • 客制 RBAC/External IdP/ Legacy Token -> Lambda Authorizer
  • Cognito User pool -> Cognito Authorizer

Reference

  • AWS - Use API Gateway Lambda authorizers