API 보안기법
- 인증
: API 서비스를 사용하고자 하는 대상자가 서비스 사용이 가능한지 여부를 확인하는 것
= 웹 서비스의 로그인과 같은 기능
- 인가
: API 서비스가 제공하는 기능별로 사용자의 권한을 관리하는 것
= 유료사용자와 무료사용자의 차이를 두는 것과 같은 기능
- 인증기법 종류
: API Key
: API Token
: OAuth2.0
: HTTP Basic Auth
: JWT (JSON Web Token)
: OpenID
: SAML
: Digest Access Authentification
: 클라이언트 인증 추가
: IP White List를 이용한 터널링
: Bi-directional Certification (Mutual SSL)
- 인가기법 종류
: 클라이언트에서 인가 처리
: API Gateway
: API서버
- 네트워크 레벨 암호화 (Network Level Encryption)
: 네트워크 프로토콜 단에서 사용자와 API 서비스 제공자 간에 주고받는 데이터를 암호화
: 일반적으로 HTTPS 기반의 프로토콜이 이에 해당
- 메시지 보호
: 사용자와 API 서비스 제공자간에 주고받는 메시지 자체를 보호하는 기능
: 무결성 보장 (HMAC)
: 암호화 (대칭키, 공개키)
API 인증 기술
API Key
- 서비스 제공자가 발급해준 KEY를 통해 인증하는 방식
- 특징
: KEY는 사용자 별로 임의의 문자열로 구성
: 사용자는 API KEY 정보를 메시지 안에 포함하여 서비스 호출
: 한번 노출시 전체 API의 보안이 뚫리는 문제 발생 위험
API Token
- Token을 활용하여 API 인증을 하는 방식
: ID, PW를 입력하면 API 서비스 제공자는 유효한 토큰을 사용자에게 발행하고 토큰을 통해 사용자를 인증하는 방식
- 특징
: key와 달리 토큰이 노출되어도 ID와 PW가 보호될 수 있어 보안성이 더 높음
OpenID Connect (OAuth2.0)
- 특정 서비스에 대한 회원 가입 필요없이 기존에 사용하던 서비스들의 계정으로 인증하는 방식
: 인증은 OAuth2.0 프로토콜을 이용
※ OAuth2.0
= 웹 또는 앱에서 타사의 API를 사용하고자 할때 권한을 획득하기 위한 프로토콜 방식
- 특징
: facebook, google, naver와 같은 기존에 사용하던 서비스들의 계정으로 로그인을 진행
: 보다 안전하고 편리하게 검증된 API를 사용할 수 있으며 사용자의 편의성도 증대
HTTP Basic Auth
- ID, PW 정보를 HTTP 헤더에 Base64 인코딩 형태로 넣어서 인증에 사용하는 방법
- 특징
: 더 높은 보안 수준을 위해 HTTPS 프로토콜 필요
JWT (JSON Web Token)
- 전자서명된 URL-safe JSON을 이용한 인증 방식
: 전자서명으로 JSON의 변조 체크
- 특징
: JWT는 속성정보(Claim)를 JSON 데이터 구조로 표현한 토큰 (RFC7519 표준)
: 클라이언트에서 http 리퀘스트 헤더에 JSON Token을 첨부한 후 서버로 전송,
서버에서는 별도의 인증과정 없이 헤더에 포함된 JWT 정보를 통해 인증
: JSON 데이터는 URL-safe하면서 URL에 포함가능한 문자만으로 생성
: HMAC알고리즘을 이용하여 비밀키 또는 RSA를 이용한 개인키/비밀키로 서명 가능
※ HMAC 알고리즘
=> 암호화를 위한 해싱 알고리즘
SSO (Single Sign On)
- 한 번의 로그인으로 여러 개의 다른 도메인을 이용하기 위한 방법
: SAML을 이용
※ SAML (Security Asserting Markup Language)
= 보안 인증에 관한 정보를 기술하는 미크업 언어
= 인증 / 인가 정보를 담은 XML파일
Digest Access Authentification
- 서버에서 생성한 난수를 통해 ID, PW 정보를 Hash화 하는 방법
: HTTP Basic Auth의 단점을 보강하기 위해 나온 인증 프로토콜
- 특징
: 서버에서 생성한 난수는 클라이언트와 서버가 모두 알고있는 값이며 이 난수를 통해 클라이언트에서
Hash화 하여 서버로 전송하기 때문에 ID와 PW의 노출 위험 감소
(Hash 알고리즘 [MD5, SRP6a 등]에 따라 보안수준 차이 발생 가능)
: 서버에서의 별도의 난수 관리 필요
클라이언트 인증 추가
- ID, PW 뿐만 아니라 Client ID와 Client Secret 정보를 추가로 입력 받아 API Token을 발급하는 방법
- 특징
: API 서비스를 사용할 앱을 등록하여 사용
ex) 트위터, 페이스북 개발자 사이트
=> 개발할 앱 또는 웹에 대한 정보를 입력하고 인증하는 절차
IP White List를 이용한 터널링
- API 서비스를 제공하고자 하는 아이피 정보를 별도로 관리함으로써
해당 아이피에서 온 요청만 처리하는 방식
- 특징
: 특정 서버간의 통신에서 많이 사용되며, 서버 정보가 많이 변경되지 않는 경우에 사용
Bi-directional Certification (Mutual SSL)
- 가장 높은 수준의 인증방식이며, 서버 뿐만 아니라 클라이언트에도 인증서를 놓고 사용하는 방식
Refference
'Devops > DevOps' 카테고리의 다른 글
[백엔드 개발자 로드맵 2020] 소프트웨어 개발 원칙 (SOLID + KISS, YAGNI, DRY) (0) | 2021.02.14 |
---|---|
[데브옵스 개발자 로드맵 2020] API 보안기법 - 2. API 인가 (Authorization) (0) | 2021.02.08 |
[데브옵스 개발자 로드맵 2020] API (Application Programming Interface) (0) | 2021.02.07 |
[데브옵스 개발자 로드맵 2020] WAS (Web Applicatiob Server)의 종류 (0) | 2021.02.07 |
[데브옵스 개발자 로드맵 2020] 웹 서버의 종류 (웹 서버 비교) (0) | 2021.02.07 |