Skip to content

Commit

Permalink
Merge pull request #58 from gdsc-ssu/sanghyeon/week18
Browse files Browse the repository at this point in the history
[week18] 보안 그룹을 참고하여 동적으로 접근 권한 부여 & NAT 게이트웨이를 사용한 프라이빗 서브넷의 외부 인터넷 접근
  • Loading branch information
halfmoon-mind authored Sep 24, 2024
2 parents 1d2342a + 9a34351 commit a1619f6
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
### 목차
- [[#문제 상황]]
- [[#문제 설명]]
- [[#해결 방법]]
- [[#참고]]
### 문제 상황
인터넷 게이트웨이에 대한 경로를 가진 퍼블릭 서브넷을 활용해 프라이빗 서브넷의 인스턴스에 외부 인터넷 접근을 허용해야한다.
### 문제 설명
프라이빗 서브넷은 보안상의 이유로 인터넷 게이트웨이를 통해 직접 인터넷에 접근할 수 없도록 설계되었습니다.
하지만 외부 서비스(소프트웨어 업데이트 등)에 접근이 필요할 경우가 존재할 수 있습니다.
이때 프라이빗 서브넷은 외부로의 인터넷 접근이 불가능함으로, 아예 외부 네트워크를 사용할 수 없습니다.
즉 여기서 원하는 상황은 외부에서 프라이빗 서브넷으로 접근은 막고, 프라이빗 서브넷에서 외부로 접근은 허용하는 방법을 찾는 중입니다.
### 해결 방법
퍼블릭 서브넷 중 하나에 NAT 게이트웨이를 생성하고, 탄력적 IP 주소를 생성하고 NAT 게이트웨이와 연결합니다.
프라이빗 서브넷과 연결된 라우팅 테이블에 NAT 게이트웨이를 대상으로 하는 인터넷 트래픽에 대한 경로를 추가합니다.

![[스크린샷 2024-07-14 오전 12.43.56.png]]
다음과 같은 순서로 작동할 수 있습니다.
1. 인스턴스 1에서 외부 인터넷으로 요청을 전송
2. 프라이빗 서브넷에 있는 라우팅 테이블에 있는 설정대로 퍼블릭 티어에 있는 NAT 게이트웨이로 이동
3. NAT 게이트웨이는 요청을 자신의 공인 IP로 변경하여 인터넷 게이트웨이를 통해 외부 인터넷을 전송
4. 응답이 들어오면 NAT 게이트웨이가 이 응답을 프라이빗 서브넷으로 전달


### 참고
결국 해당 챕터에서 말하고 싶은 부분은 인터넷의 아웃바운드 엑세스를 허용하면서 내부 리소스에 대한 인바운드 엑세스는 허용하지 않는 서브넷 계층의 네트워크 아키텍처를 구성합니다.

NAT 게이트웨이를 통과하는 모든 통신은 연결한 EIP 주소를 가진다.
따라서 외부 공급업체의 허용 목록에 IP를 추가해야하는 경우 NAT 게이트웨이의 EIP를 화이트리스트로 등록할 수 있습니다. (EIP는 프로비저닝된 상태를 유지하는 한 바뀌지 않는다.)
예시)
[페이플](https://www.payple.kr/)이라는 간편 결제 회사에선 서비스에서 보안상의 이유로 서버에 접속할 수 있는 IP를 1개만 허용합니다. (이외의 접근하는 IP는 차단)
일반적으로 AWS를 사용하면 서버에서 나가는 아웃바운드의 IP는 계속 변동될 수 있기 때문에 NAT 게이트웨이를 사용하여 아웃바운드로 나가는 IP를 고정적으로 EIP로 발급받은 값으로 유지할 수 있습니다.


IPv6를 지원하는 VPC를 생성한 경우에는 [송신 전용 인터넷 게이트웨이](https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/egress-only-internet-gateway.html)를 참고하면 프라이빗 서브넷에 대한 아웃바운드 트래픽을 허용하는 아웃바운드 전용 인터넷 게이트웨이를 생성할 수 있습니다.

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
### 목차
- [[#문제 상황]]
- [[#문제 설명]]
- [[#해결 방법]]
- [[#참고]]
- [[#레퍼런스]]
### 문제 상황
2개의 인스턴스로 구성된 애플리케이션 그룹 사이에 SSH를 허용해야한다. 또한 향후 인스턴스 수가 증가해도 이를 손쉽게 적용할 수 있어야한다.
### 문제 설명
새로운 인스턴스가 추가될 때마다 수동으로 보안 그룹 규칙을 업데이트하는 방법은 번거롭고 오류가 발생할 가능성이 높습니다.
또한 여기서 말하는건 보안 그룹을 한 번에 적용하는 것을 원합니다.
### 해결 방법
동일한 보안 그룹을 여러 EC2 인스턴스의 ENI(Elastic Network Interface)에 연결하더라도 이들 간의 통신은 불가능합니다.
![[스크린샷 2024-07-14 오전 1.20.37.png]]
보안 그룹을 생성하고 두 EC2의 인스턴스의 ENI에 연결합니다. 마지막으로 보안 그룹이 TCP 포트 22에 도달에 승인하는 수신 규칙을 생성합니다.
![[스크린샷 2024-07-14 오전 1.20.49.png]]


### 참고
기존에는 정적 참고 방식으로 [CIDR](https://aws.amazon.com/ko/what-is/cidr/) 범위를 조정하여 방화벽을 구성하였지만, 이 경우는 인스턴스를 추가하거나 삭제하는 경우 동적으로 변경하기 어렵기 때문에 확장성이 떨어진다.
또한 여러 보안 그룹을 하나의 ENI와 연결할 수 있다.

> [!info] 보안 그룹을 삭제할 수 없는 경우
> - 현재 ENI에 연결되어있는 경우
> - 다른 보안 그룹(자신 포함)에서 참고하고 있는 경우
또한 우리가 평소에 ec2 인스턴스를 만들 때 이런 식으로 만들어진다고 생각하지만
![[Pasted image 20240714011353.png]]
실제로는 다음과 같은 형태로 만들어진다.
![[Pasted image 20240714011336.png]]
### 레퍼런스
- [# ENI란? 쉽게 개념 및 특징 정리](https://jibinary.tistory.com/133#Elastic%C2%A0Network%C2%A0Interface-1)
Binary file added Pasted image 20240714011336.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Pasted image 20240714011353.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 23 additions & 0 deletions review/week18/심상현.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#### S3
- S3는 Flat하다는 것이 놀라웠다.
- 보기에는 계층적으로 디렉토리 및 여러가지 정보가 있는 줄 알았지만, 그것은 논리적인 부분이고 실제로는 key,value 형태로만 구분되는 것이고 디렉토리라는 것이 없다는 것을 알았다.
- 확실히 약간 느리지만 큰 용량의 데이터를 처리하기에 좋아서 이미지나 영상 같은 정보를 올리기 좋은 것 같다.
- Lambda를 사용하면 해당 source code를 s3에 올리고 배포하도록 설정하는 것도 추가로 알았다.
#### CloudFront
- CDN (Content Delivery Network)
#### CloudWatch
- AWS 내의 리소스 사용 및 이벤트 등을 실시간으로 모니터링 할 수 있도록 도와주는 서비스
- CPU 사용량, 디스크 사용량, 네트워크 사용량 등을 파악하거나, 대시보드도 구성 가능
#### Amazon VPC를 사용해 프라이빗 가상 네트워크 생성
- VPC에 IGW로 연결되는 망이 없으면 프라이빗 네트워크가 됩니다.
#### CloudFront를 사용해 S3에서 안전하게 웹 콘텐츠 제공
- AWS에서 제공하는 CDN 서비스인 CloudFront를 안전하게 사용하는 방법에
#### 서브넷과 라우팅 테이블을 포함한 네트워크 티어 생성
- CIDR 블록을 활용해서 다른 서브넷을 생성하고, 라우팅 테이블을 포함하여 두 서브넷을 활용할 수 있습니다.
#### 인터넷 게이트웨이를 사용해 VPC를 인터넷에 연결
- 처음에는 public cloud에 배포한다는 것이 뭔가 특별한 일이 생기는 것인줄 알았으나, 단순하게 vpc 자체에 router, 그리고 경로에 인터넷 게이트웨이를 설치하면 public으로 만들어진다는 것을 알았습니다.
#### NAT 게이트웨이를 사용한 프라이빗 서브넷의 외부 인터넷 접근
- 프라이빗 서브넷은 외부/내부 모두 접근이 불가능한데 외부에서 들어오는 접근은 막고, 내부에서 나가는 접근은 허용하는 방법에 대해서 배웠습니다.
- NAT 게이트웨이를 올바르게 사용하는 방법에 대한 내용인 것 같아 좋았습니다.
#### 보안 그룹을 참고해 동적으로 접근 권한 부여
- 옛날 먼 시절에는 보안그룹이 없었을 때는 어땠을 까라는 생각이 문득 들었습니다...
Binary file added 스크린샷 2024-07-14 오전 1.20.37.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 스크린샷 2024-07-14 오전 1.20.49.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 스크린샷 2024-07-14 오전 12.43.56.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit a1619f6

Please sign in to comment.