개발자의 길/Infra

[Network][AWS] AWS 네트워크 구성요소 - 3. 네트워크 보안과 부가 서비스

토아드 2024. 2. 10. 18:35
반응형

이번장에서는 AWS 의 보안 구성 요소와 부가적인 서비스 들에 대해 알아보겠다.

보안 그룹(Security Group)

보안 그룹은 인스턴스(RDS, EC2) 단위로 인바운드와 아웃바운드를 정의하는 가상의 방화벽이다. 특정 인스턴스의 특정 Port(예: HTTP/HTTPS 등) 에 대한 요청을 할 수 있는 IP 리스트를 관리함으로써 인스턴스에 접근할 수 있는 범위를 규정한다.

 

보안 그룹은 상태를 유지하는(stateful) 정책으로 접근가능여부를 판단한다. 무슨 소리냐면, 이전에 들어온 요청의 상태정보를 기억해서 요청에 대한 응답을 할 때 같은 '상태' 라고 판단되면 보안정책으로 통신을 막거나 하지 않는다는 소리이다.

 

간단하게 예를 들어서 우리가 가장 흔하게 사용하는 HTTP 프로토콜 통신으로 예를 들어보자. 클라이언트 A와 서버 B 가있고, 서버B는 클라이언트 A가 요청을 할 수 있는 인바운드 규칙을 가진 보안 그룹에 속해 있다.

 

이때, 클라이언트 A 가 HTTP 요청을 통해 서버 B 에 접근하고자 하면 인바운드 규칙이 정해져 있으므로 요청을 받을 수 있다. 서버 B 는 HTTP 요청에 대한 응답을 줘야 하는데 아웃바운드에는 클라이언트 A 가 등록되어있지 않다. 하지만 stateful 정책으로 클라이언트 A 의 요청의 상태를 저장하여 클라이언트 A 에대한 응답은 같은 상태라고 판단하게 되고, 아웃바운드에 등록되어있지 않아도 서버 B 는 클라이언트 A 에게 응답을 전달 해 줄 수 있다.

 

EC2 콘솔의 보안 그룹 관리창(VPC 에서도 확인 가능하다)

ACL(Access Control List)

ACL 은 보안 그룹과 비슷하게 인바운드와 아웃바운드를 관리하는 리스트인데, 인스턴스 단위가 아닌 서브넷 단위로 들어오고 나가는 통신을 막는 역할을 한다. VPC 내의 서브넷 간의 통신을 제어하거나, 서브넷과 외부 인터넷의 통신을 제어한다.

 

ACL 은 상태를 유지하지 않는(stateless) 정책으로 접근가능여부를 판단한다. 마찬가지로 HTTP 요청 하나에 대해 예를 들어보자

클라이언트 A 와 서버 B 가 있을때, 서버 B 는 클라이언트 A 의 인바운드는 허용하지만 아웃바운드를 허용하지 않는다고 하자.

 

클라이언트 A 가 서버 B 에게 요청을 보내면 서버 B 는 요청을 받을수는 있지만, 아웃바운드는 허용하지 않기 때문에 ACL 에서 막혀서 클라이언트는 응답을 받을 수 없게 된다. 현재 온 요청이던 뭐던 간에 아주 단순하게 나갈 수 없게만 한다는 것이다.

VPC 콘솔의 ACL 관리창

 

AWS Certificate Manager

AWS 에서 인증과 관련된 것들을 관리할 수 있도록 하는 서비스이다. SSL/TSL 인증서를 관리하고, 인증서의 자동 갱신또한 지원한다.

인증서

인증서는 웹 서비스, 즉 서버가 우리는 안전하고 인증받은 곳이다! 라고 증명하는 인증서이다. 이 인증서는 보통 신뢰할수 있는 기관 (은행, 보안기관, 정부부처 등) 에서 발급을 한다. 또한 인증서를 통해서 생성된 세션 키로 서버와 메시지를 주고받을 때 데이터를 암호화 하는 역할 또한 한다. 가장 대표적으로 HTTPS 요청의 경우에 이 인증서를 이용해서 통신을 하게 된다. HTTPS 요청은 기존의 HTTP 요청에서 공개키 방식의 암호화를 도입해서 주고받는 데이터를 암호화 하여 보내는 방식이다.

 

1) 클라이언트 A 가 서버 B 에게 요청을 하는 상황에서 클라이언트 A는 서버 B 에게 클라이언트가 지원하는 암호화 방식이나 SSL/TLS 버전을 전달하면서 인증서를 요청한다.
2) 서버 B 는 클라이언트가 전달한 정보를 보고 지원이 되는 인증서(공개키)와 랜덤 값을 클라이언트 A 에게 전달한다.
3) 클라이언트 A 는 이를 확인하여 정상적이라면(클라이언트 웹브라우저 내에 신뢰하는 인증기관 리스트가 저장되어 있음), 랜던 값인'프리마스터 시크릿' 을 생성하여 서버의 랜덤값과 합쳐서 공개키로 암호화 하여 전달한다.
4) 서버 B 는 자신이 가지고 있는 비밀키로 공개키로 암호화된 데이터를 복호화 하여 요청을 처리하여, 실제 서버와 클라이언트 간에 사용할 데이터를 암호화 할 공개키인 '세션 키'를 생성하여 전달한다
5) 이제 클라이언트와 서버는 세션키를 이용하여 암복화를 하며 통신한다.

 

실제 핸드쉐이킹 과정과 통신 과정은 훨씬 더 복잡하지만, 간략적으로 설명하자면 위와같다.

키 페어

키 페어는 AWS 인스턴스에 SSH 접속을 하기 위한 열쇠이다. 키 페어는 생성과 동시에 로컬 파일로 저장할 수 있으며, 이 파일을 이용해서 로컬에서 SSH 로 AWS 의 구성요소에 SSH 접속을 할 수 있다. 마찬가지로 공개키 방식의 암호화를 이용하여 인스턴스에 안전하게 접근할 수 있게 해준다. 

EC2 콘솔에서 볼 수 있는 키페어 관리창

반응형