🙈

⃝ 동글동글 ⃝

🪐ᐩ˖ 🍎

AWS

AWS 보안 그룹(Security Group) 뜯어보기 with VPC, EC2

JONG_UK 2024. 9. 13. 11:53
728x90
반응형

아래 글에서 보안 그룹을 설정했는데 조금 더 알아보면 좋을 것 같아서 보안 그룹만 다루는 글을 쓸 예정입니다.

 

 

AWS Free Tier(프리티어)를 활용해 AWS 배포하기 - 2. EC2

이전 포스트에서 VPC를 생성했었습니다.  AWS Free Tier(프리티어)를 활용해 AWS 배포하기 - 1. VPCAWS 배포를 위한 첫 과정으로 VPC를 생성해 보도록 하겠습니다. 먼저 간단하게 VPC의 개념과 주요 기능

jonguk.tistory.com

 

아래 사진은 VPC 보안 그룹 인바운드 규칙 설정입니다.

 

근데 VPC에 인바운드 규칙을 설정하는 것과, EC2에 인바운드 규칙을 설정하는 것이 헷갈려서 한 번 시도해 보려고 합니다.

 

 

먼저 VPC에 인바운드 규칙을 이렇게 설정한 이유는, VPC가 독립적인 네트워크 환경이기 때문에 해당 VPC 안에 존재하는 EC2에 접근하려면 먼저 VPC를 거쳐야 한다는 생각이 있었습니다. 일반적인 다이어그램도 이렇게 그려지니까요

 

 

그렇다면 EC2에 지금 설정된 보안 그룹은 어떻게 되어 있을까요?

 

 

EC2에 설정된 보안 그룹은 jutest03-vpc의 default 보안 그룹으로 설정되어 있어서 VPC의 보안 그룹과 동일합니다.

 

이렇게 설정되어 있으면, VPC에서 설정한 대로 EC2도 똑같이 접근을 막을 수 있을 것입니다. 

 

근데 VPC의 보안 그룹과 EC2의 보안 그룹이 왜 같을까요?? 같아야만 하는 이유가 있을까?

 

 

사실 위에 말이 다 틀렸습니다. VPC에는 인바운드 규칙이라는 개념이 없습니다. 

 

 

저는 VPC를 생성하면 VPC 보안 그룹이 생성되어 자체적으로 적용되어 있는 줄 알았지만, 아무리 찾아봐도 VPC에는 보안 그룹을 할당하는 것이 보이지 않습니다. 

 

 

VPC를 생성하면 생기는 default 보안 그룹은 그냥 보안 그룹 하나의 파일일 뿐입니다. 이 보안 그룹을 EC2에 등록하거나, RDS에 등록하여 해당 서비스에서 네트워크 트래픽을 허용하거나 차단할 수 있게 되는 것뿐입니다.

 

VPC가 인터넷과 통신을 한다는 건,  VPC가 인터넷 게이트웨이를 제공하여 퍼블릭 서브넷에서 외부 인터넷과 통신을 가능하게 만들어주는 것이며, 인터넷 브라우저(HTTP, HTTPS) 또는 SSH 연결을 EC2와 할 수 있는 것은, EC2에 연결된 보안 그룹에서 해당하는 포트를 허용해 주었기 때문입니다.

 

즉, VPC는 AWS 서비스의 독립적인 네트워크 환경만 제공해 줄 뿐이며, 보안 그룹이 네트워크 트래픽을 허용하거나 차단하는 역할을 하며, EC2나 RDS에 적용되어 인바운드 및 아웃바운드 트래픽을 제어합니다!!

 

VPC가 특정 트래픽을 허용/차단하는 것은 NACL(Network Access Control List)입니다. 이것 때문에 보안 그룹이 VPC에도 존재한다라고 생각하게 되었네요...ㅜㅜ

 

VPC 탭에서 보안 그룹을 들어가게 되면 상단에 보이는 "VPC > 보안그룹 > {보안 그룹명}" 이거랑

 

 

EC2 탭에서 보안 그룹을 선택하여 들어가면 상단에 보이는 "EC2 > 보안 그룹 > {보안 그룹명}" 이거는 동일한 페이지라고 볼 수 있다..

 

 

https://ap-northeast-2.console.aws.amazon.com/vpcconsole/home?region=ap-northeast-2#SecurityGroup:groupId=sg-028762a2422e2a9f7

 

https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#SecurityGroup:groupId=sg-028762a2422e2a9f7

 

URL도 다른 게 vpcconsole과 ec2 부분밖에 없다 ㅋ..

 

이걸 왜 이제 알았을까... 

 

AWS 공부는 정말 천천히 집중해서 자세히 들여다보지 않으면 정말 내가 제대로 알고 쓰는 건지 모르겠습니다..

 


 

그럼 이제 보안 그룹에 대해서 다시 제대로 알아봅시다..!

 

제가 궁금했던 것은 보안 그룹 하나에 많은 인바운드 규칙을 설정하는 것은 올바르지 않다고 생각해서 "보안 그룹을 나누어 상속 형태로 쓸 수 있는가?" 였습니다.

 

먼저 EC2 인스턴스에 적용된 보안 그룹은 일단 default 보안 그룹이며, 초기 default 보안 그룹은 자기 자신을 인바운드 규칙에 소스로 가지는 형태였습니다. 아래 친구만 존재했었죠.

 

 

소스에 보안 그룹 자체를 넣을 수 있다는 것이 흥미로웠습니다. 

 

그래서 저도 새로운 보안 그룹을 만들어 default 보안 그룹의 소스로 넣어보려고 합니다.

 

일단 현재 default 보안 그룹에는 SSH 규칙이 여러 개 기 때문에, SSH를 분리해서 작성해 보도록 하겠습니다.

 

이렇게 3개를 분리하고, default sg에 존재하는 SSH 규칙들을 삭제해 주도록 하겠습니다.

 

 

새로 생성한 보안 그룹

 

 

기존 default 보안 그룹에 새로 생성한 보안 그룹을 SSH 트래픽 소스에 등록해 주도록 하겠습니다.

 

 

 

이제 EC2에 등록된 보안 그룹은 jutest03-vpc-sg-default 하나이며, jutest03-vpc-sg-default에 등록된 SSH 트래픽을 처리할 수 있는지 확인해 보도록 하겠습니다.

 

EC2 Connect 서비스로 접속했더니..!

 

 

접속이 되지 않습니다......

 

여기서 알 수 있는 건, 보안 그룹에 소스로 등록하면 사용할 수 없다는 것입니다.

 

이유가 뭘까요?

 

 

그렇다고 한다...

 

그럼 보안 그룹 간의 참조는 무엇일까?

 

먼저 보안 그룹 관련 영상을 보고 이해를 해보자.

https://www.youtube.com/watch?v=0hXYfi55_Ww

 

이 분의 영상은 정말 최고닷... 나만 알고싶은 AWS 강의실..

 

AWS 강의실

AWS를 쉽게 알려드리는 AWS 강의실입니다. 스타트업 Dev Lead 역할을 하면서 AWS와 관련된 문제를 해결하는 팁과 노하우도 공유합니다. - AWS Serverless Community Builder - AWS 공인 Solutions Architect Professional -

www.youtube.com

 

보안 그룹의 참조

보안 그룹은 하나의 방화벽이고, 그 내부에 EC2 인스턴스 또는 RDS가 존재하게 됩니다. 

 

SG-EC2에는 HTTP 80, HTTPS 443, SSH 22 트래픽을 허용하는 Inbound 규칙이 설정되어 있습니다. 해당 규칙을 통해 사용자가 EC2에 접속을 할 수 있죠.

 

SG-RDS에는 EC2 인스턴스가 RDS에 접속해야 하기 때문에 각 EC2의 IP가 3306 포트 Inbound 규칙으로 허용되어 있겠죠.

 

지금 SG-RDS에는 2개의 인바운드 규칙만 등록되어 있겠지만, 만약 EC2가 많아지거나 EC2의 IP가 변경되는 일이 발생하거나, 추가로 등록되는 EC2 인스턴스가 있다면, EC2에서 RDS로 트래픽을 받을 수 있게 해주는 SG-RDS의 인바운드 규칙을 추가하거나 수정해야 합니다. 

 

EC2의 IP를 직접 RDS 보안 그룹(SG-RDS)에 추가하는 방법은 비효율적일 수 있습니다. 이때 SG-EC2 보안 그룹을 참조로 추가하면, EC2의 IP가 바뀌거나 새로운 EC2가 추가될 때마다 규칙을 수정할 필요 없이, 보안 그룹 자체가 트래픽을 허용하게 됩니다.

 

즉, SG-EC2 보안 그룹이 설정되어 있는 인스턴스들의 트래픽을 RDS로 보낼 수 있도록 설정하는 것이 보안 그룹의 참조입니다.

 

여기서 헷갈리는 게 트래픽을 RDS로 보낼 수 있다면, SG-EC2에 설정되어 있는 인바운드 규칙 HTTP 80, HTTPS 443, SSH 22 같은 트래픽을 RDS로 보낼 수 있다는 걸까요??

 

아닙니다!! 보안 그룹 참조에서의 트래픽은 SG-EC2 보안 그룹이 설정되어 있는 인스턴스의 요청입니다. 

HTTP/HTTPS 트래픽웹 서버(EC2)로 들어가는 트래픽이며, RDS와는 관련이 없습니다. RDS로의 트래픽은 데이터베이스 관련 트래픽(예: 3306 포트, MySQL)만 해당됩니다.

 


자 그러면 보안 그룹을 상속처럼 사용하는 것은 불가능하고, 참조 형태로 사용하는 것은 가능하다고 배웠다.

 

먼저 default sg에 달아둔 SSH 참조 규칙을 제거하자.

 

 

 

 

그리고 SSH 보안 그룹을 EC2에 등록해 주자.

 

 

 

 

일단 보안 그룹이 잘 적용되었는지 AWS EC2 Connect Service를 이용해서 다시 EC2에 접속이 가능한지 확인해 보자.

 

 

다시 예전처럼 정상 접속이 된다!!

 

이제 내가 새로운 EC2 인스턴스를 추가하고, 이후에 추가할 RDS에 트래픽을 보내게 하려면, 새로 생성한 EC2에 jutest03-ssh-sg를 달아주고, 해당 jutest03-ssh-sg를 SG-RDS의 3306포트 인바운드 소스로 등록하여 SG가 동작하는 범위 내의 인스턴스들은 자동으로 RDS로 트래픽을 보내게 할 수 있게 될 것이다!!

 

다음 포스트에서 RDS를 생성해서 다시 진행해 보도록 하겠따.

728x90
반응형