Lambda Authorizer 摘要备忘录
Lambda Authorizer是什么?
-
- Lambda 関数を使用して API へのアクセスを制御する API Gateway の機能。
クライアントが API リクエストを送信すると、API Gateway は Lambda Authorizerを呼び出す。
トークンやリクエストパラメータを入力として受け取り、IAM ポリシーを出力として返却する。
認証的步驟

① 客户端向 API 网关发送 API 请求。
※ API 网关会验证目标 API 方法是否设置了 Lambda 认证器。
如果存在授权者(Authorizer),API Gateway将调用Lambda函数。
③ Lambda函数用以下方式对客户端进行认证。
-
- OAuthプロバイダー呼び出し。
-
- SAMLプロバイダー呼び出し。
-
- リクエストパラメータ評価。
- データベースからの認証情報取得。
④(当调用成功时,)Lambda函数将返回一个包含IAM政策和Principal ID的对象,并进行许可访问。
API Gateway 对获取的策略进行评估。
- アクセスが拒否された場合、API Gateway は 403 ACCESS_DENIED などのステータスコードを返却する。
如果允许访问,API Gateway会执行方法。
- キャッシュ設定が有効になっている場合、ポリシーをキャッシュするため、Lambda Authorizer関数を再度呼び出す必要はない。
授权者的方式
支持以下两种方式的授权者(Authorizer)。
基于令牌的授权者
JWTや OAuth トークンなどのベアラートークンで認証を行う方式。
SAMテンプレート例
※公式より
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Auth:
DefaultAuthorizer: MyLambdaTokenAuthorizer
Authorizers:
MyLambdaTokenAuthorizer:
FunctionArn: !GetAtt MyAuthFunction.Arn
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: index.handler
Runtime: nodejs12.x
Events:
GetRoot:
Type: Api
Properties:
RestApiId: !Ref MyApi
Path: /
Method: get
MyAuthFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: authorizer.handler
Runtime: nodejs12.x
基于请求参数的授权器 de
ヘッダー、クエリ文字列パラメータ、stageVariables、$context 変数の組み合わせで認証を行う方式。
SAMテンプレート例
※公式より
※FunctionPayloadTypeにREQUESTを指定する。(デフォルトはTOKENのため)
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
StageName: Prod
Auth:
DefaultAuthorizer: MyLambdaRequestAuthorizer
Authorizers:
MyLambdaRequestAuthorizer:
FunctionPayloadType: REQUEST
FunctionArn: !GetAtt MyAuthFunction.Arn
Identity:
QueryStrings:
– auth
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: index.handler
Runtime: nodejs12.x
Events:
GetRoot:
Type: Api
Properties:
RestApiId: !Ref MyApi
Path: /
Method: get
MyAuthFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./src
Handler: authorizer.handler
Runtime: nodejs12.x
请提供一些相关的信息
-
- API Gateway Lambda オーソライザーを使用する
-
- Lambda オーソライザーの例
- LambdaRequestAuthorizer