-
AWS API Gateway 인증(Authorizers) 활용하기Serverless 2018. 11. 15. 00:21
X-API-Key 인증
AWS API Gateway는 기본적으로 X-API-Key 헤더를 활용한 인증을 제공합니다.하지만, 단순 Key 방식이기 때문에 OAuth 등 최근 많이 사용하는 인증을 구현하기 어렵습니다.
이 방식을 사용하길 원하시면, 위와 같이 API Key Required를 true로 변경하시고, 몇 가지 설정을 더 하면 됩니다.
이 방식에 대해서는 아래 링크를 참고해주시기 바랍니다.
https://blog.outsider.ne.kr/1206
이 글에서는 API Key 방식 대신,
좀 더 유연하게 활용할 수 있는 Lambda를 활용한 Custom Authorizer방식을 설명하겠습니다.
Authorizer Lambda Function 작성
인증용 람다 함수를 작성해보겠습니다.
그 전에 전반적인 구조를 그려보면 다음과 같습니다.
원래 호출하려는 람다 함수 전에 Authorizer 람다 함수를 한 번 거칩니다.
Authorizer를 통과하지 못하면 원래 호출하려는 람다 함수에 접근할 수 없습니다.
Authorizer 람다 함수를 생성하고
다음과 같이 간단한 코드를 넣어봅시다.
module.exports.handler = async (event, context) => { const {awsRequestId} = context; const {authorizationToken, methodArn} = event; return authorizationToken === 'TEST_SIMPLE_AUTH_TOKEN' ? generateAllow(awsRequestId, methodArn) : generateDeny(awsRequestId, methodArn); }; const generateAllow = (principalId, resource) => { return generatePolicy(principalId, 'Allow', resource); }; const generateDeny = (principalId, resource) => { console.log(`[auth.js] deny. principalId: ${principalId}, resource: ${resource}`); return generatePolicy(principalId, 'Deny', resource); }; const generatePolicy = (principalId, effect, resource) => { const authResponse = {principalId}; if (effect && resource) { const policyDocument = {}; policyDocument.Version = '2012-10-17'; // default version policyDocument.Statement = []; const statementOne = {}; statementOne.Action = 'execute-api:Invoke'; // default action statementOne.Effect = effect; statementOne.Resource = resource; policyDocument.Statement[0] = statementOne; authResponse.policyDocument = policyDocument; } return authResponse; };
'TEST_SIMPLE_AUTH_TOKEN'만 허용하고 나머지는 거부하는 Authorizer입니다.
Authorizer 생성
Authorizer를 생성합니다.
위와 같이 구성하면,
auth라는 헤더로 토큰이 들어오고,
그 토큰을 custom-authorizer라는 람다 함수가 검사하게 됩니다.
테스트해봅시다!
auth 헤더가 'TEST_SIMPLE_AUTH_TOKEN'이면 통과
아니면 거부입니다.
잘 동작합니다.
Authorizer 연동
이제 Authorizer를 api 리소스에 붙여봅시다.
Authorization 방식으로 직접 만든 custom authorizer를 선택한 후 저장하고,
API를 배포합니다.
이제 Authorizer가 연동 되었으니 그냥 접근할 수 없겠죠? 테스트 해봅시다.
'TEST_SIMPLE_AUTH_TOKEN'을 넣어야만 통과가 되는 걸 확인할 수 있습니다.
이제 Authorizer를 입맛에 맞게 구성해보세요!
정리
- AWS API Gateway의 인증 방식은 크게 api key를 생성하는 방식과 커스텀하게 authorizer를 만드는 2가지 방식이 있다.
- 1번째 방식에 비해 2번째 방식이 자유도가 높다.
- 잘 응용하면 key방식, OAuth, JWT 활용 등 자유롭게 API의 보안을 설정할 수 있다.
- 물론, Auth0이나 Firebase와 같은 외부 서비스를 활용하는 것 또한 가능하다
'Serverless' 카테고리의 다른 글
AWS Lambda로 랜덤아재개그 슬랙봇 만들기 1편 | 기본설정 (0) 2018.12.14 [AWS Re:Invent 2018 정리 (1)] AWS Lambda 로그 개선 (0) 2018.12.04 CloudWatch 활용하기 2편 | 클라우드워치로 Lambda 반복 실행하기 (0) 2018.11.14 CloudWatch 활용하기 1편 | 클라우드워치에서 Lambda 로그 확인하기 (0) 2018.11.14 AWS Lambda로 랜덤아재개그 카카오 플러스친구 만들기 6편 | 텍스트로 반응하는 API (2) (0) 2018.11.08 댓글