보안 그룹 및 클래식 포트 개요
EC2 인스턴스는 만들었으나 보안 그룹은 아직 지정하지 않았다.
보안 그룹은 AWS 클라우드의 네트워크 보안을 수행하는데 아주 기본이 된다.
보안 그룹은 트래픽이 EC2 인스턴스로 들어오고 나가는 방식을 제어한다.
보안 그룹은 정말 쉽다. 그냥 룰만 포함하면 되기 떄문이다.
그래서 어떤 것이 들어올 수 있고 어떤 것을 내보내는지에 대한 설정을 해주면 된다.
- 보안 그룹은 규칙들을 포함하고 있다.
- 보안 그룹은 IP 주소나 다른 보안 그룹을 참조한다.
즉, 보안 그룹은 서로를 참조할 수 있는 규칙들을 가질 수 있다.
예를 들자면, 컴퓨터가 있고 인터넷을 사용하고 있다.
내 컴퓨터에서 EC2 인스턴스로 접근하고 싶은 상황이다. 일단 EC2 인스턴스를 중심으로 보안 그룹을 생성해야 한다. 이것은 일종의 방화벽이며 이 보안 그룹은 규칙들을 갖게 된다. 그리고 이러한 규칙들을 통해 EC2 인스턴스로 들어오고자 하는 인바운드 트래픽과 EC2 인스턴스에서 인터넷으로 나가는 아웃바운드 트래픽에 대해 관리를 한다.
보안 그룹은 EC2 인스턴스의 방화벽이고, 포트에 대한 접근을 규제한다. 인증된 IPv4 와 IPv6 의 ip 주소 범위를 지정한다.
인터넷에는 두가지 종류의 IP 가 있다.
- 외부에서 인스턴스로 들어오는 인바운드 네트워크
- 인스턴스에서 외부로 나가는 아웃바운드 네트워크
그리고 보안 그룹의 규칙들을 볼 때 아래와 같이 보일 것이다.
HTTP 는 TCP 프로토콜을 사용하고 허용된 포트인 80 번 포트로만 통신이 가능하며, IP 주소 범위를 나타내는 Source 여기서 0.0.0.0/0 은 모든 주소를 의미한다.
SSH 는 TCP 프로토콜을 사용하고 허용된 포트인 22 번 포트로만 통신이 가능하며, IP 주소 범위를 나타내는 Source 는 122.149.196.85/32 의 IP 주소만 허용한다.
여기에 EC2 인스턴스가 있고 하나의 보안 그룹이 설정된 상태이다. 보안 그룹은 인바운드 룰과 아웃바운드 룰이 존재한다.
인바운드 룰에 내 컴퓨터가 사용하는 IP 주소와 22번 포트로 들어왔을 때만 EC2 인스턴스에 접근할 수 있도록 했다. 만약 다른 사용자가 22번 포트로 접근을 한다해도 IP 주소가 틀리기 때문에 EC2 인스턴스에 접근을 할 수 없는 것이다.
아웃바운드 룰은 기본값으로 설정되어 있는데 EC2 인스턴스는 기본적으로 밖으로 나가는 모든 트래픽을 허용한다. 웹사이트에 접근하여 연결을 시작하려는 경우 보안 그룹에서 허가되었기 때문에 통과한다.
이것이 보안 그룹(방화벽) 이 작동하는 기본 방식이다.
보안 그룹과 인스턴스 사이는 1대 1 관계가 아니다. 하나의 인스턴스에 여러 개의 보안 그룹이 있을 수 있다. 보안 그룹은 region 과 VPC 조합으로 잠겨 있다.
그래서 지역을 바꾸려면 새로운 보안 그룹을 생성하던지 다른 VPC 를 생성해야 한다.
보안 그룹은 EC2 밖에 존재한다.
트래픽이 차단되면 EC2 인스턴스는 트래픽을 보지도 못한다. 즉, EC2 에서 실행되는 것이 아닌 EC2 인스턴스 외부의 방화벽인 것을 인지하자
SSH 접근만을 위한 별도의 보안 그룹을 유지하는 것이 좋다. SSH 접근은 무척이나 복잡한 작업이다.
만약 EC2 인스턴스에 접근이 불가능하다면 시간 초과 오류가 나타날 것이다. 하지만 시간 초과 오류가 아닌 연결 거절 에러 메시지를 받는다면 인스턴스에 연결은 됐지만 연결이 거부된 것이다.
즉, 보안 그룹이 제대로 작동한 것이고 트래픽이 통과했지만 인스턴스에 에러가 발생했거나 인스턴스 자체가 실행되지 않은 것일 수도 있다.
기본적으로 모든 인바운드 트래픽은 방화벽에 의해 막혀 있고, 모든 아웃바운드 트래픽은 인증되어서 밖으로 나가게 된다.
만약 로드 밸런서를 사용하게 되면 일반적인 보안 그룹에서 조금 다른 방식으로 변경된다.
EC2 인스턴스가 있고 보안 그룹이 존재한다. 보안 그룹 1번은 인바운드규칙으로 보안 그룹 1과 보안 그룹 2를 승인하고 있다.
이것을 왜 해야할까? 우리가 다른 EC2 인스턴스를 실행한다면 보안 그룹 2가 해당 인스턴스에서 사용되어야 한다.
첫 번째 EC2 인스턴스에서 보안 그룹에서 설정한 인바운드 규칙에 의해 123 이라는 포트를 통해 트래픽을 보낼 수 있고 또 다른 EC2 인스턴스가 포트 123을 통해 트래픽을 보내 직접 통신할 수 있도록 했다고 가정한다.
EC2 인스턴스들의 IP 에 관계없이 올바른 보안 그룹이 연결되어 있기 때문에 다른 인스턴스와 직접 통신할 수 있게 됐다. 왜냐하면 보안 그룹 1번의 인바운드 트래픽에 대한 룰로써 보안 그룹 1과 보안 그룹2를 갖기 때문에 보안 그룹 1이나 보안 그룹 2를 갖는 EC2 인스턴스들은 해당 보안 그룹에 속하기 때문에(물론 IP 에 상관없이 포트만 갖다면 통과 시킨다는 조건) 통신을 할 수 있는 것이다.
보안 그룹 3을 갖는 또 다른 EC2 인스턴스가 존재할 때 이 보안 그룹 3번은 보안 그룹 1번의 인바운드 룰에서 인증되지 못했기 때문에 비인가가 떠서 작동하지 않게 된다.
이런 방식은 로드 밸런서를 다룰 때 보게 될 패턴 중 하나이니 머릿속에 기억해 놓자.
SSA 시험에서 기억해야 할 몇 가지 포트들이 있다. 이 정도는 외우는 것이 좋다.
- SSH(Secure Shell) 는 22번 포트를 사용하고 리눅스 EC2 인스턴스에 로그인할 수 있게 허락해준다.
- FTP 파일 전송 프로토콜은 파일 공유, 파일을 업로드 할 때 사용하고 프로토콜은 21번 포트를 사용한다.
- SFTP 는 SSH 를 사용해서 파일을 업로드 할 때 사용하는 프로토콜이고 22 번 포트를 사용한다. 즉, 보안 파일 전송 프로토콜이다.
- HTTP 는 보안상 안전하지 않은 웹사이트에 접근할 때 사용하는 프로토콜이며 80번 포트를 사용한다.
- HTTPS 는 보안상 안전한 웹사이트에 접근할 때 사용되는 프로토콜이며 443 번 포트를 사용한다.
- RFP(Remote Desktop Protocol) 는 윈도우 EC2 인스턴스에 로그인 하는데 사용하는 프로토콜이며 3389 번 포트를 사용한다. 22는 리눅스 인스턴스를 위한 SSH 이고 3389 는 윈도우 인스턴스를 위한 RDP 이다.