API Gateway에서 "Lambda 인증자"와 "API 키 인증"을 함께 사용

6828 단어 5람다AWS

소개



타이틀대로, API Gateway에서 Lambda 오소라이저와 API 키를 동시에 설정해 보았으므로, 그 정리입니다.

Lambda 권한 부여자는

Lambda 권한 부여자(이전 사용자 지정 권한 부여자)는 Lambda 함수를 사용하여 API에 대한 액세스를 제어하는 ​​API Gateway의 기능입니다.

이 논문에서는 설명하지 않으므로 자세한 내용은 공식 문서을 참조하십시오.

지금까지, API Gateway의 API 키와, Lambda 오소라이저를 각각 한쪽씩 이용한 적이 있었습니다만. 이번, API 실행수의 제어를 실시하면서, 인가를 할 필요가 있었기 때문에 동시에 이용하기로 했습니다.

Lambda 권한 부여자


package main

import (
    "context"
    "errors"
    "fmt"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

// Help function to generate an IAM policy
func generatePolicy(principalId, effect, resource string) events.APIGatewayCustomAuthorizerResponse {
    authResponse := events.APIGatewayCustomAuthorizerResponse{PrincipalID: principalId}
    if effect != "" && resource != "" {
        authResponse.PolicyDocument = events.APIGatewayCustomAuthorizerPolicy{
            Version: "2012-10-17",
            Statement: []events.IAMPolicyStatement{
                {
                    Action:   []string{"execute-api:Invoke"},
                    Effect:   effect,
                    Resource: []string{resource},
                },
            },
        }
    }
    return authResponse
}

func handleRequest(ctx context.Context, event events.APIGatewayCustomAuthorizerRequestTypeRequest) (events.APIGatewayCustomAuthorizerResponse, error) {
    if cookie, ok := event.Headers["Cookie"]; ok {
        // ここで認可処理をおこなう。例としてCookieを取得している
        fmt.Print("cookie: " + cookie)
    } else {
        return events.APIGatewayCustomAuthorizerResponse{}, errors.New("Unauthorized")
    }
    return generatePolicy("user", "Allow", event.MethodArn), nil
}

func main() {
    lambda.Start(handleRequest)
}


처리 흐름



실제로 동작시켜 확인한 처리 플로우는 이렇게 되었습니다.



처리되는 순서로서는, Lambda 오소라이저→API 키 인증이라고 하게 되었습니다.
검증 전의 예상에서는, API 키 인증→Lambda 오소라이저의 순서가 되어 생각하고 있었으므로, 조금 의외였습니다.

이는 API 키가 인증에 사용하는 것이 아니라 고객에게 '요청 속도와 할당량'을 제공하기 위한 키라는 위치이기 때문이라고 생각됩니다.
만약 오소라이저(허가)로 연주된 경우는 API 키 인증까지 도달하지 않기 때문에, APIGateway의 사용량 플랜으로 설정한 할당량이 낭비 소비되지 않습니다. (훌륭함)

요약


  • Lambda 인증자와 API 키 인증을 동시에 사용할 수 있습니다.
  • 순서로는, Lambda 오소라이저가 불려 간 뒤, 인증 OK의 경우 API 키 인증이 실행됩니다.
  • Lambda 권한 부여자로 401 Unauthorized를 반환하면 API 키 인증을 수행하지 않습니다.


  • 참고

    좋은 웹페이지 즐겨찾기