인터넷을 통해 연결된 원격 컴퓨터를 활용하는 기술을 말합니다.
AWS는 이 클라우드 컴퓨팅을 이용해 사용자에게 언제, 어디서나 성능이 좋은 컴퓨터를 사용할 수 있게 해줍니다. 인공지능 공부를 해보셨던 분이라면 사용해보셨을 구글의 Colab, Jupyter notebook 등도 이에 해당하죠.
특히 AWS는 IaaS(Infra as a Service) 모델에 해당하며, 사용자는 운영 체제 및 데이터, 애플리케이션, 미들웨어 및 런타임을 담당하고 제공업체는 사용자가 필요로 하는 네트워크, 서버, 가상화 및 스토리지의 관리와 액세스를 담당합니다. 즉 제공업체가 사용자를 대신해 온사이트 데이터센터를 유지관리하거나 업데이트합니다. 대신, 사용자는 애플리케이션 프로그래밍 인터페이스(API) 또는 대시보드를 통해 인프라에 액세스하고 이를 제어합니다.

AWS를 알아보기 위해 각 용어를 알아보겠습니다.
EC2(Elastic Compute Cloud)는 안전하고 크기 조정(Elastic)이 가능한 컴퓨팅 파워를 Amazon 클라우드에서 제공하는 웹서비스를 말합니다.
쉽게 생각하면 컴퓨터 한대를 빌려다 쓰는 것으로 이해할 수 있습니다. 추가된 기능은 제공업체에서 네트워크, 서버, 가상화에 관한 기능들을 대시보드를 통해 제공하기 때문에 설정값만 바꿔주면 안전하고 빠르게 배포를 진행할 수 있다는 점입니다.
클라우드 업체에서 제공하는 논리적으로 격리된 가상 네트워크입니다. VPC 내부 서브넷을 구성해 instance를 만들고 코드를 업로드해 우리가 원하는 프로그램을 구동시킬 수 있습니다.
서브넷은 VPC의 IP 주소 범위입니다. 쉽게 말하자면 VPC 내부에서 망을 더 쪼갠 것으로 이해할 수 있습니다. 단 서브넷은 같은 가용영역(물리적으로 같은 데이터 센터) 내에 존재해야 합니다.

아래 사진은 인터넷 트래픽이 인스턴스로 도달하는 과정입니다. 인터넷 게이트웨이를 거쳐 라우터에서 접근할 서브넷의 ip주소를 확인하고, NACL, 보안그룹을 통한 필터링을 거쳐 우리의 EC2 인스턴스로 도달하게 됩니다.

둘다 인바운드, 아웃바운드 트래픽을 관리하여 필터링할 수 있다는 특징이 있지만 다른 보안 방법입니다.
| NACL | 보안그룹 | |
|---|---|---|
| 트래픽 단위 | 서브넷 단위 트래픽 설정 | 인스턴스 단위 트래픽 설정 |
| 상태 저장 여부 | stateless(인바운드, 아웃바운드 트래픽 모두 따로 설정해야함) | stateful(요청 트래픽에 대한 응답 트래픽은 제어하지 않음) |
| 적용 대상 | 생성된 서브넷안의 모든 인스턴스 | 서브넷 안에 인스턴스 그룹을 만들어 해당 그룹에 설정 |
| 규칙 | 허용 및 거부 규칙 설정 | 허용 규칙만 설정 |
NACL과 보안 그룹 규칙이 서로 충돌한다면 보안 그룹에 우선순위가 있습니다.
NAT(Network Address Translation)은 네트워크의 ip주소를 변환해 여러대의 호스트가 하나의 ip로 통신할 수 있게 해줍니다. 이를 통해 노출하고 싶지 않은 호스트의 ip주소를 숨겨 보안을 철저히 할 수 있습니다.

위 그림과 같이 보안이 필요한 private subnet에서 외부 인터넷과 통신이 필요한 상황이 생긴다면, NAT Gateway를 public subnet에 설치하고, 이를 private subnet과 연결시키면 외부 인터넷과 ip 노출 없이 통신이 가능합니다.
이는 NAT Gateway에서 private subnet의 요청을 받은 후 source ip를 자신(public subnet)의 주소로 변환시켜 요청을 재전송하기 때문입니다. 이후 응답이 오면 NAT Gateway는 응답을 private subnet으로 돌려줍니다.
이 포스팅은 애쉬의 AWS 살짝 알은체 하기를 참고하였습니다.
다음 포스팅이 20일 넘게 없는 이유는 뭐죠?