ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] 네트워크 구성하기
    카테고리 없음 2020. 4. 19. 18:31
    오늘 포스팅은 내가 요즘 끙끙대며 공부 중인 AWS 구성 정리이다. 
     
    공부/연구 목적의 구성은 솔직히 이렇게까지 하지 않고 모든 것(?)을 public으로 만들면 개발에 문제 없다. 
     
    하지만 실제 필드에서 돌리려면 보안은 무조건 고려해야 한다. 나도 그 동안 어중간한 보안정도만 했었는데( ex) pem 키 공유하지 않기 정도..)
     
    이제 개발 중인 프로젝트가 필드에 나가려니 이러한 보안 사항이 고려되지 않아 처음부터 다시 시작하고 있다. ㅠㅠ
     
    내가 그 동안 한 삽질들을 정리하며 다른 분들에게 도움이 되고자 본 글을 쓴다. 
     
     
    1. AWS 구성도
     
    1) WHAT: 무엇으로 그릴 것인가?
     
     
    구성도 정말 중요하다. 특히나 여러 Security Rule을 적용해주어야 하는데 이런 큰 그림을 미리 그리지 않으면 매우 헷갈린다. 
    처음에 구성도는 다 아마존에서 제공해주는 줄 알았는데 알고보니 아이콘을 제공해주고 있었다. 
    파워포인트, drawio 등 다양한 서비스가 있으니 개인적으로 좋은 것으로 골라 그리면 된다. 
     
    나는 drawio 했다가 아이콘이 많아질수록 원하는 컴포넌트를 선택하기가 어려워서 ppt로 갔다가 VisualParadigm Online으로 정착했다.
     
    2) HOW: 어떻게 그릴 것인가?
     
    제일 중요한 것은 Web Application을 설치할 서버에 자물쇠를 잔뜩 잠그는 것이다. 편의상 WAS(Web Application Server)라고 부르겠다.
    아래는 내가 그려본 구성도이다. 
     
     
    큰 그림을 먼저 그린 후 구성해야 헷갈리지 않는다.
     
    아래 순서대로 VPC 작업을 진행해보자.
    • op/qa public/private subnet 구성
    • 네트워크 ACL, Security Group 생성 (둘의 차이점은 이 링크 내용 참고:  https://cleverdj.tistory.com/122)
    • NAT gateway 생성 (NAT Instance로 생성하면 무료지만, ec2가 하나 늘어나고 번거로워서 가능하면 gateway를 추천)
    • 로드밸런서 구성
     

    op/qa public/private subnet 구성
     
    1. op-public, op-private subnet 구성
    > VPC 마법사 시작
     
     
    2. '퍼블릭 및 프라이빗 서브넷이 있는 VPC'
     
    3. 서브넷 구성 시작
     
    1) IPv4 CIDR 블록: 내가 사용할 private/public 모두 포함하는 VPC의 IP 대역 설정
    여기서 공부해야 하는 사항 CIDR 블록 해석하기! 자세한 내용: https://cjwoov.tistory.com/27
    간단하게 IP주소는 32비트로 구성되어 있다. 1 개의 dot(.) 당 8비트 씩 정의되어서 8*4 = 32 비트를 이룬다.  
     
    10.0.0.0/16    10.0.0.0 중 16개 비트까지 고정값, 즉 2번째(16/8 비트 = 2바이트) dot(.)까지 IP 고정
                   10.0.XX.XX로 IP 할당이 가능하다는 뜻
     
    2) 퍼블릿 서브넷 구성
    이 때 넘버링이 헷갈리므로 그림을 먼저 그려보고 하는게 중요하다. 
    이 때 bastion 서버는 프라이빗에 위치한 웹 어플리케이션에 접근하기 위해 반드시 필요하다.
    그림에 맞추어서 구성하기
     
    3) 프라이빗 서브넷 구성
    그림에 맞추어서 구성하기
     
    4) NAT 게이트웨이 생성
    여기서 미리 탄력적 IP (Elastic IP)를 받아두면 바로 선택이 가능하다. 

     


    네트워크 ACL
     
    1. public acl
    public 이라고 아무 제약이 없으면 안된다. 
     
    INBOUND
    - ssh는 bastion 인스턴스에 접근하기 위한 설정이다. 소스는 내가 현재 작업하고 있는 IP 주소를 하면 된다. 
    - yum으로 외부 라이브러리 설치를 위한 http/https 허용
    - TCP 휘발성 포트 범위가 1024-65535라고 하여 추가로 지정
     
    OUTBOUND
    - outbound 에서는 ssh 대상을 VPC 내부로만 허용한다. 더 세밀한 제어를 원하면 ip를 10.10.0.0/24 등으로 하면 된다.  모든 소스 (0.0.0.0/0) 으로 할 이유가 없다.
    - 위와 같은 이유로 http/https 허용
    - 위와 같은 이유로 포트범위 허용
     
    2. private acl
    INBOUND
    -private acl은 WAS를 올릴 보안강도 최고를 유지해야 한다. ssh접근과 포트만 개방한다. 
     
    OUTBOUND
    - private acl에서 outbound에 반드시 http/https를 허용해주어야 한다. 그래야 yum을 사용할 수 있다.
     
    3. db-acl
    INBOUND
    - db용 acl을 별도로 구성해다. 
     
    OUTBOUND
    - 굳이 outbound에 3306을 개방 안해도 정상 동작한다. 
     

    Security Group
     
    1. bastion-sg
    INBOUND
    OUTBOUND
     
    2. was-sg
    INBOUND
    - elb 설정 시, health check 하는 포트를 정의해서 해당 포트 inbound 허용
     
    OUTBOUND
     
    3. rds-sg
    INBOUND
     
    - security group에 security group을 중첩하여 적용할 수 있다. 하지만 이 의미가 was sg의 룰을 그대로 상속한다는 뜻이 아니다. 
    아래 링크에 따르면 rds가 was sg에 접근할 수 있다는 뜻이다. 간결하게 표현하기 위해 위와 같이 정의 했다.
     
    OUTBOUND
     

    로드밸런서 구성
     
    1. 로드밸런서 생성하기
    - 나는 Application Load Balancer를 선택했다.
     
     
    2. 로드밸런서 구성
    - VPC에서 public subnet 가용 영역만 선택하고 넘어간다. 
     
    3. 보안 설정 구성 (https)
    - 인증서 발급 등 까다로워서 pass, 하고자 하면 1단계에서 리스너에 https를 추가해줘야 한다.
     
    4. 보안 그룹 구성
    - security group 에 모든 소스(0.0.0.0/0)에 대해 in/outbound 허용
     
    5. 라우팅 구성
    상태 검사(health check) 경로를 써준다. 
     
    6. 대상 등록
    ALB 를 연결한 WAS 인스턴스 등록하기. 이 때 대상 등록에서 포트 번호를 여러개 등록해줄 수 있따. 즉, http(80)으로 들어오면, 내가 정의한 포트 번호로 WAS 서버에 전달 된다. 지금 나는 가용 인스턴스가 없어서 리스트가 비어있다.
    이 때 WAS 서버에서도 웹 서버 상에 index.html 파일을 임시로 작성해서 상태 검사를 success로 해주어야 한다. 
     
    자세한 WAS 서버 설치는 다음 포스팅을 작성하도록 하겠다. 
     
     
Designed by Tistory.