sol 개발 블로그 로고
Published on

AWS 인프라 기본 설정

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

인프라 구조

AWS는 클라우드 리소스를 제공하는 서비스. 아래와 같이 3가지의 큰 범위가 있다.

  1. Resion : 지역성을 위해서 결정, 미국 서버에 서울 사용자가 접근하는 것은 Proximity(근접성)에 좋지 못함
  2. AZ : Resion 안에 여러 데이터센터의 집합
  3. 데이터센터 :실제 물리적인 컴퓨터가 존재하는 범위
  • 리전 서비스 : 리전에 국한되어 제공되는 서비스들

    • EC2 : 가상 컴퓨팅 서비스
    • Elastic Beanstalk : 서비스 배포 및 제공
    • Lambda : 서버리스, 함수 실행기
  • 글로벌 서비스 : 리전에 상관 없이 전역적으로 제공돼는 서비스들 이를 Edge Locations라고 한다.

    • IAM : AWS 계정 권한 및 역할 관리
    • Route53 : DNS Service
    • CloudFront : CDN
    • WAF : Web Application Firewall
    • Certificate Menager : HTTPS 인증서 관리

IAM으로 사용자 권한 설정

처음 계정을 생성하면 root 사용자가 생성되는데 이는 모든 권한을 가지고 있다고 알고 있다. 그러나 학습단계니까 새로운 사용자 그룹을 만들고 사용자를 만드려고한다.

계정은 권한과 정책이 있다. 권한은 S3에 쓰기 가능, 읽기 가능 같이 기능의 소단위이고, 정책은 권한들을 모아놓은 것이다. 또한, 정책들을 모아놓은 것을 사용자 그룹이라고하는데 개발자의 R&R에 맞는 사용자 그룹으로 개발자 계정을 추가하는 것이 이상적인 계정 관리다.

내가 작성한 MinimalAuth라는 사용자 그룹은 EC2와 S3 그리고 VPC에 전부 접근 가능하도록 설정했고 새로운 계정 asacSol을 생성했다. 계정을 생성하면 계정 비밀번호와 시크릿 access key를 부여받는데 이는 원격으로 내 계정 소유의 리소스에 접근할 수 있게한다.

CIDR 설정

VPC와 Subnet을 만들기 위해선 CIDR 설정이 필요하다. CIDR는 베이스 IP 주소와 Subnet Mask 두 부분으로 나눌 수 있다. 베이스 IP는 VPC의 IP 주소 범위를 의미하고, Subnet Mask는 8bit x 4로 이뤄진 베이스 IP에서 앞에서 몇 bit까지를 고정시킬지 정한다. 예를 들어 10.0.0.0/16 같은 경우 앞에서 16bit 즉 10.0.X.X에서 X부분에 0~255까지 자유롭게 숫자가 들어갈 수 있음을 뜻한다.

VPC와 Subnet 만들기

VPC는 지역성을 띄기 때문에 서울 ap-northeast-2 Resion에 생성해야한다. 또한 가용영역(AZ)를 여러개를 사용하는 Subnet을 구축해서 만약 한 AZ가 먹통이될 때 다른 AZ로 백업할 수 있도록 해야한다. VPC는 IGW를 통해 외부 연결이 가능한 인트라넷 같은 것. IGW는 VPC 내 Subnet 중에서 Public Subnet과 연결되고 Private Subnet은 기본적으로 외부와 연결되지 않는다.

NACL : Network Access Control List, Subnet에 인바운드 규칙과 아웃 바운드 규칙을 설정한다.

EC2 생성하고 인터넷 연결해보기

EC2는 외부 인터넷과 연결돼야하기 때문에 Public Subnet에 생성해야한다. EC2를 생성할 때는 몇몇 설정을 해야한다.

  1. 인스턴스 유형 : 이때 AZ가 b인 Subnet에서는 t2.micro를 생성하지 못하니 주의하자.
  2. 퍼블릭 IP 설정 : Public subnet에 위치하면 자동으로 퍼블릭 IP를 할당받는다.
  3. 키 페어 : EC2에 접속하기 위한 pem 확장자의 비대칭키 페어. 새 키 페어 생성 버튼을 누르면 쉽게 만들 수 있다.
  4. Subnet : EC2가 들어갈 Subnet을 설정한다.
  5. SG : 보안 그룹, IP를 기준으로 EC2에 들어가는(인바운드) 트래픽을 제어한다.

이번 실험은 SSH(22 포트) 접근과 http(80 포트) 접근만 사용할 것다.

위와 같이 SG로 SSH 인바운드 연결을 허용했으니까 한번 SSH 연결을 시도해봤다.

하지만 위와 같이 ssh를 통한 접근을 못했다. 왜 그럴까? 당연히 나는 EC2를 생성한 Public Subnet에 IGW를 연결하지 않고 외부 인터넷과 연결하려고 했기 때문!!

IGW 생성하기

VPC 자체로는 외부와 연결할 수 없다. 그렇기에 외부 연결을 수행해주는 IGW를 생성하여 EC2에 연결시켜야한다. 단순히 IGW만 생성하여 VPC와 연결하면 끝인가? 아니! VPC 안에 subnet과 IGW를 라우팅 테이블로 연결시켜야한다. 따라서 라우팅 테이블의 라우팅을 0.0.0.0/0(모든 IP에 개방) 대상을 IGW에 연결시켜서 Public Subnet과 IGW를 연결시켜줘야한다. 결과적으로 아래와 같은 로드맵을 볼 수 있다.

위와 같이 IGW는 라우팅 테이블을 통해 Public Subnet으로 연결되었다. 그렇다면 다시 EC2에 SSH 연결이 성공한다.

그렇다면 다시 방금 SG에 설정한 80 포트로 http 연결도 가능할까? 아래와 같이 EC2에 아파치2 WS를 실행시켰다.

이제 EC2의 Public IP에 80 포트로 접근해보자.

그러나 내가 빼먹은 부분이 있다. EC2를 외부에서 연결하기 위해선 꼭 NACL과 SG 설정으로 80 포트를 열어줘야한다. 그렇지 않으면 Subnet의 인,아웃 바운드 트래픽을 NACL이 막게되거나 EC2의 인바운드 트래픽을 SG가 막게될 수 있다.