[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를 하나 생성한다.

image

image

[1] 에서 생성한 Lambda를 호출하는 GET 메소드를 구성한다.

image

메소드를 요청할 때 API Key를 요구하도록 설정한다.

image

image

설정 완료된 API를 배포한다.

image

3) API Key, Usage Plan 구성

API Keys 메뉴에서 새로운 API key를 하나 생성한다.

image

Key를 API 리소스에 연결하기 위해서는 Usage Plan 을 구성해야한다.

Usage Plan 은 api 호출 빈도나 호출 수를 제한하기 위해 사용된다.

이 글에서는 key를 사용해 API Gateway를 호출할 경우에 대해 제한해본다.

image

Throttling 은 초당 호출 수를 제한하고,

Quota 는 일/월/년 동안 최대 호출 수를 제한한다.

image

Usage Plan이 적용될 API와 스테이지를 추가하는 화면이다.

image

Usage Plan이 인증에 사용할 수 있는 API Key를 추가하는 화면이다.

만약 Usage Plan에 여러 key를 등록한다면, Throttling/Quota 제한은 각 key별로 적용된다.

4) 테스트

image

Stages 메뉴에 들어가면 배포한 API의 URL 이 있다.

image

PostMan에서 별다른 인증 없이 api를 호출하면 접근이 제한된다.

image

x-api-key 에 [3] 에서 생성한 키값을 넣으면 정상 동작함을 확인할 수 있다.

카테고리:

업데이트:

댓글남기기