[AWS] API Gateway - api key 사용하기
API Key란
API Gateway에 key를 등록하여, 해당 key를 요청에 포함할 때에만 api 호출을 허용할 수 있도록 보안을 강화할 수 있다.
또한, key 별로 api 호출 수 제한을 설정해 과도한 api 호출을 제한할 수도 있다.
1) API 응답 Lambda 생성
{“message” : “hello”} 를 반환하는 간단한 Python 람다를 생성한다.
import base64
import json
import logging
import os
logger = logging.getLogger()
handler = logging.StreamHandler()
formatter = logging.Formatter("[%(levelname)s] %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info(event)
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Credentials': 'true',
'Content-Type': 'application/json'
},
'body': json.dumps({"message" : "hello"})
}
2) API Gateway 생성
API Gateway -> REST API를 하나 생성한다.
[1] 에서 생성한 Lambda를 호출하는 GET 메소드를 구성한다.
메소드를 요청할 때 API Key를 요구하도록 설정한다.
설정 완료된 API를 배포한다.
3) API Key, Usage Plan 구성
API Keys 메뉴에서 새로운 API key를 하나 생성한다.
Key를 API 리소스에 연결하기 위해서는 Usage Plan 을 구성해야한다.
Usage Plan 은 api 호출 빈도나 호출 수를 제한하기 위해 사용된다.
이 글에서는 key를 사용해 API Gateway를 호출할 경우에 대해 제한해본다.
Throttling 은 초당 호출 수를 제한하고,
Quota 는 일/월/년 동안 최대 호출 수를 제한한다.
Usage Plan이 적용될 API와 스테이지를 추가하는 화면이다.
Usage Plan이 인증에 사용할 수 있는 API Key를 추가하는 화면이다.
만약 Usage Plan에 여러 key를 등록한다면, Throttling/Quota 제한은 각 key별로 적용된다.
4) 테스트
Stages 메뉴에 들어가면 배포한 API의 URL 이 있다.
PostMan에서 별다른 인증 없이 api를 호출하면 접근이 제한된다.
x-api-key 에 [3] 에서 생성한 키값을 넣으면 정상 동작함을 확인할 수 있다.
댓글남기기