[AWS] 강의실습 - (7) 보안 그룹, 네트워크 ACL + Flow Logs
AWS 강의 커리큘럼을 통해, 기본적인 사용법 학습과 경험을 취득하고자 수강을 시작했다!
애초에 코딩하면서 수기노트를 한 적도 까마득하며, 글씨 쓰는것도 귀찮아하는 나이기에 포스팅으로나마 주요내용을 정리하며 강의를 들으려한다!
- 강의 : CloudNet@와 함께하는 AWS 네트워킹 입문 (인프런 링크)
* CloudNet@ 측에서 강의영상 및 자료 저작권이 있어, 최대한 내용이해를 도울 수 있는 사진으로 대체해보려고 합니다 😁😁
☁️ 기본 인프라 생성(CloudFormation)
먼저, CloudFormation의 스택 메뉴로 진입한다. 여기서 스택을 새로 생성할 수 있다.
탬플릿 파일을 선택한 뒤, 스택명과 키페어 등 설정들을 진행해주면 된다.
마지막 검토단계에서, CloudWatch의 권한 설정을 위해 IAM 리소스를 생성하도록 최하단 박스를 체크한다.
일정 시간이 경과하면 스택 생성이 완료된다. 생성자원 정보는 위 내용을 참고하자.
☁️ 보안 그룹을 통한 접근 제어(Stateful)
먼저 보안 그룹을 통한 Stateful 접근 제어를 실습한다.
위 사진처럼, VPC 메뉴의 보안 탭에 보안 그룹, 네트워크 ACL 가 존재하는 것을 볼 수 있다.
이렇게 보안 그룹을 선택하면 인바운드 규칙, 아웃바운드 규칙 등 하위 메뉴가 표시되며, 규칙 편집으로 추가/삭제 등이 가능하다.
나는 실습을 위해 아웃바운드 규칙을 개인적으로 삭제한 뒤 진행할 예정이다.
- SSH로 EC2 인스턴스 접근
먼저, PC에서 EC2 로 SSH 접근하는 케이스이다. 인스턴스의 Public IP 주소로 정상접근이 된 것을 확인할 수 있다. (SSH 참고글)
인바운드 규칙의 프로토콜, 원본(IP대역), 포트 등을 체크하여 트래픽이 접근하였다.
아웃바운드는 규칙이 없지만, Stateful 특성으로 인해 인바운드에서 허용된 트래픽은 보안 그룹에서 기억했다가 아웃바운드를 허용한다.
- 브라우저(HTTP)에서 EC2 인스턴스 접근
브라우저에서 퍼블릭 IP로 접근하면, 무한로딩이 걸리면서 접근이 불가능한 것을 볼 수 있다.
브라우저의 기본 포트는 80으로, 인바운드 규칙에서 허용하는 포트가 22 뿐이므로 트래픽 접근이 불가능한 것이다.
인바운드 규칙 편집에서 규칙을 추가하고, 유형(HTTP), 소스(Anywhere-IPv4) 등을 선택해준다. 그리고 규칙을 저장하면 된다.
추가된 규칙으로 인해, 이제 퍼블릭 IP로 접근이 가능해졌다!
- Flow Logs 정보 확인
VPC의 플로우 로그 메뉴로 진입하면, 대상 이름 에 Flow Logs를 확인할 수 있는 CloudWatch 링크가 존재한다.
CloudWatch 의 로그 스트림에서 해당 서버에 해당하는 스트림으로 진입하면 된다.
* 스트림은 인스턴스 정보 네트워크 탭의 인터페이스 ID를 참고하면 된다
아웃바운드 역시 같은 방법으로 규칙을 추가하면 된다. SSH로 HTTP 접근을 하는 명령어로 확인이 가능하다.
curl ininfo.io --connect-timeout-3
☁️ 네트워크 ACL을 통한 접근 제어(Stateless)
다음으로, 네트워크 ACL을 통한 Stateless 접근 제어를 알아보자. 마찬가지로, VPC 보안 탭에서 진입이 가능하다.
우선 신규 네트워크 ACL을 생성했다. 이름, VPC 등을 설정해주면 바로 생성이 가능하다.
생성한 뒤에는 서브넷 연결 탭에서 편집을 통해 서브넷을 연결해주면 된다.
이제 추가된 네트워크 ACL 규칙으로 인해, SSH 접근이 불가능하다. 이를 위해, 인바운드, 아웃바운드 규칙을 추가해줘야 한다.
먼저 인바운드 규칙을 추가했다. 규칙번호, 허용/거부 등을 설정하여 추가하면 된다. (규칙 번호는 작을수록 우선순위가 높음)
인바운드 규칙만 추가해도 동일하게 트래픽이 통신되지 않는다. 네트워크 ACL은 Stateless 이므로 아웃바운드 규칙도 추가해줘야 한다.
아웃바운드 규칙 역시 추가하는 방법은 동일하다. 인스턴스로부터 TCP 통신에 임시포트를 사용하기에 위처럼 설정했다.
이제 정상적으로 EC2 인스턴스에 접근이 가능한 것을 확인할 수 있다!
이제 EC2 인스턴스에서 직접 HTTP 접근을 해보았다. 80번 포트가 허용되지 않아, 아웃바운드 규칙에서 거부되고 있다.
이렇게 아웃바운드는 HTTP(80번 포트), 그에 상응하는 인바운드는 모든 임시포트를 허용하는 규칙을 생성하면 EC2 통신도 가능해진다.
네트워크 ACL은 인바운드/아웃바운드가 민감하여 잘 사용되진 않으나, 서버 내 대규모 IP제어가 필요할 경우 설정한다.
📎 출처
- [Network Access Control] code-lab1 님의 블로그 : https://code-lab1.tistory.com/234
- [접근 제어] Peemang 님의 블로그 : https://peemangit.tistory.com/189.
- [보안 그룹과 네트워크 ACL] Inpa 님의 블로그 : https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-VPC-%EA%B0%9C%EB%85%90-%EC%82%AC%EC%9A%A9-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95-Security-Group-NACL