Lambda Authorizer 摘要备忘录

Lambda Authorizer是什么?

    • Lambda 関数を使用して API へのアクセスを制御する API Gateway の機能。

クライアントが API リクエストを送信すると、API Gateway は Lambda Authorizerを呼び出す。
トークンやリクエストパラメータを入力として受け取り、IAM ポリシーを出力として返却する。

認証的步驟

lambda_authorizer.png

① 客户端向 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
广告
将在 10 秒后关闭
bannerAds