본문 바로가기

AWS

VPC 최종 구조 및 구조 설명

목차

  1. VPC 전체 구조
  2. EC2 instance private 접근 구조 - Session Manager
  3. RDS instance private 접근 구조 - AWS Client VPN

 

VPC 전체 구조

[1] 구조

(1) private IP 사용 영역

총 IP 개수

  1. VPC - 172.16.0.0/16

- 65,531

subnet에서 사용 가능한 IP 개수

1. public subnet1 - 172.16.1.0/24

  • 251

2. public subnet2 - 172.16.2.0/24

  • 251

3. private subnet1 - 172.16.32.0/20

  • 4,091

4. private subnet2 - 172.16.48.0/20

  • 4,091

5. private subnet3 - 172.16.128.0/20

  • 4,091

6. private subnet4 - 172.16.144.0/20

  • 4,091

7. private subnet5 - 172.16.160.0/20

  • 4,091

남은 IP 개수

  • 65,536 - 20,957 = 44,579

 

(2) 구조 설명

  • 총 3개의 AZ와 2개의 public subnet과 5개의 private subnet으로 구성했다.
  • public subnet은 외부 인터넷과 통신하도록 설계했다.
  • EIP를 NAT에 하나만 할당하고 하나의 public subnet에만 NAT를 설계했다.
  • public ip가 없는 ec2 instances를 NAT로 외부 인터넷과 연결할 수 있도록 설계했다.
  • ALB를 사용하여 로드를 분산시켰고, ALB는 public subnet에 존재하도록 설계했다.
  • 2개의 private subnet에 web service instance를 위치시킬 수 있도록 설계했다.
  • 3개의 private subnet에 db instance를 위치시킬 수 있도록 설계했다.
  • db instance가 위치하는 3개의 subnet을 VPN과 연결시켰다.
  • end user가 tunnelblick을 통해 db에 원격 접속을 할 수 있도록 설계했다.

 

EC2 instance private 접근 구조

1. 일반적인 경우

  • 일반적으로 bastion host를 사용해서 EC2에 private하게 접근한다. 그런데 이렇게 복잡하게 접근하는 것보다 Session Manager를 활용하면 훨씬 간단하고 편하게 접근할 수 있다.

[1] bastion host의 단점

  • bastion host를 위한 instance 관리(비용 발생)
  • the application host’s private key을 bastion host에 설치
  • bastion host를 관리하기 위한 VPC(application VPC와 분리하는 것을 추천)
  • the bastion host has a security group rule that allows port 22 access only from the corporate network IP space(일반적으로 접속할 수 있는 공간도 제약이 있다.)
  • SG도 신경써줘야 하며, 22 port(ssh) 연결 필수
  • Run the “ifconfig” command
  • 로그 관리가 굉장히 힘들다.(ssh activity가 자동으로 로깅되지 않는다)

2. System Manager - Session Manager 접근 구조

 

[1] 사용 기술

  • Systems Manager - Session Manager

[2] Systems Manager란?

  • AWS 클라우드에서 실행되는 애플리케이션 및 인프라를 관리하는 데 도움이 되는 기능 모음
  • Systems Manager는 애플리케이션 및 리소스 관리를 간소화
  • 운영 문제를 감지하고 해결하는 시간을 단축
  • AWS 인프라를 규모에 따라 안전하게 운영 및 관리하는 데 도움

[3] Session Manager란?

  • System Manager가 가진 기능 중 remote control을 담당하고 있는 기능

[4] Systems Manager - Session Manager 작동 원리

  • IAM 권한 확인
  • 관리하는 노드(instance)인 경우 노드(instance)에서 실행 중인 Systems Manager 에이전트(SSM Agent)가 작업을 수행
  • Session Manager는 SSM(Systems Manager) 에이전트를 사용하여 인스턴스에서 시작한 암호화된 채널을 통해 인스턴스와 통신

[5] SSM Agent란?

  • EC2 instance에 설치되어 Systems Manager와 통신하기 위한 역할을 맡음
  • IAM같은 역할
  • 에이전트가 Systems Manager 메시지를 가져와 응답하고, CloudWatch 지표를 게시하고, S3에 로그 파일을 쓸 수 있음
  • HTTPS를 통해 Systems Manager와 통신. 즉, 호스트와 서비스 간의 통신이 암호화되고 보안 그룹에는 특별한 송신 규칙이 필요하지 않음

 

[6] Session Manager 장점

  • 22 port(ssh) 오픈할 필요 없음
  • bastion host 유지 위한 instance를 관리할 필요 없음
  • IAM policy를 가진 유저로 aws console과 aws cli로 접근 가능.
  • IAM 유저 단위로 제어 가능(세부적으로 컨트롤 가능)
    • ex) 수 백개의 인스턴스에 대해 일일이 로그인을 위한 키 파일을 관리해야 할 때
    • ex) 개발자 별로 지정된 팀의 인스턴스만 로그인 할 수 있도록 하고 싶을 때
  • 웹브라우저 기반으로 OS와 무관하게 사용 가능
  • 로깅과 감사가 아주 편하다.
    • 언제 어디서 누가 접속했는지 확인 가능(cloudTrail)
    • 접속 기록과 사용한 모든 커맨드 및 출력 내역을 S3 혹은 CloudWatch로 전송 가능
  • AWS service와 연동이 되어 있어서 다양한 시나리오를 그릴 수 있음
    • ex) EventBridge 등과 연동하여 실시간으로 접근에 대해 알림 받기 가능 등

IAM 권한 설정

1. Custom Policy 생성

SessionManagerPermissions

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:ap-northeast-2:777750262439:instance/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/*"
            ]
        }
    ]
}
  • iam user에 해당 정책 json으로 넣어서 policy 생성

EC2 Instance private 접근 방법

1. AWS Console 접근

  • AWS에 로그인
  • EC2 > instance 체크 > Connect 클릭 > Session Manager > Connect 클릭

 

2. AWS CLI 접근

[1] 최초 한 번 설정(제가 도와드릴 예정)

(1) aws cli 설치

brew install awscli

(2) sh 파일 실행

ssm-autu-exec.sh

#!/bin/bash

aws configure
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
session-manager-plugin

실행하면 처음에 입력란이 뜬다.

  • access key: 자신의 access key
  • secret key: 자신의 secret key
  • region: ap-northeast-2
  • output format: json

 

[2] 접속 방법

aws ssm start-session --target [instance-id]

 

 

RDS instance 접근 구조 - AWS Client VPN

VPN 설치 목적?

  • 외부 인터넷으로부터 방어하기 위함이 아니다. db 보안과 db 리모트 접근하기 위해서 vpn 설정을 한 것이다.

Client VPN이란?

  • AWS 리소스 및 온프레미스 네트워크의 리소스에 안전하게 액세스할 수 있도록 하는 관리형 클라이언트 기반 VPN 서비스입니다. Client VPN에서는 OpenVPN 기반 VPN 클라이언트를 사용하여 어떤 위치에서든 리소스에 액세스할 수 있습니다.

Client VPN 구조

 

사용기술

  • AWS Client VPN
  • AWS Certificate Manager
  • Tunnelblick

인증방식

Active Directory 인증(사용자 인증) vs Single sign-on 인증(사용자 인증) vs 상호 인증(인증서 인증)

Active Directory - x

  • 마이크로소프트 제품을 사용할 때 사용. 그래서 선택하지 않았다.

Single sign-on 인증 - x

  • 아이디, 비밀번호를 입력해야하고 매일 사용할 때 불편할 거라 생각해 선택하지 않았다.

상호 인증 - o

  • client certificate과 key를 client VPN 인증서 파일에 넣어서 인증하는 방식
  • 아주 간편하고 딱 한 번만 넣으면 다른 개발자들이 해당 파일을 다운받아서 tunnelblick에 넣기만 하면 된다. 매우 편리해 해당 방식 선택

고려해야 하는 이슈들

UDP vs TCP

  • 기본적으로 Client VPN 엔드포인트는 UDP 전송 프로토콜을 사용
  • 이유는 성능

분할터널

 

  • 연결을 네트워크에서는 터널이라고 표현
 
  • VPC로 향하는 트래픽만 Client VPN 터널을 통해 라우팅됩니다.
  • 온프레미스 리소스로 향하는 트래픽은 Client VPN 터널을 통해 라우팅되지 않습니다.

DNS(Domain Name Server)

  • DNS란 Domain Name System을 운영하는 서버를 의미(이름을 IP로 변환)
  • VPN 안에서 작동하는 DNS 서버가 필요하다. 그런데 해당 DNS 서버는 기본적으로 VPC 안에서 생성해 준다.
  • VPC를 생성할 때 기본적으로 생성되는 Route 53 Resolver는 VPC 네트워크 범위, 플러스 2에 대한 예약된 IP 주소에서 실행되는 DNS 서버에 매핑된다.

 

References

1. vpc

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/classic/elb-internal-load-balancers.html

Internal Classic Load Balancers - Elastic Load Balancing

https://aws.amazon.com/ko/blogs/aws/new-aws-elastic-load-balancing-inside-of-a-virtual-private-cloud/

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-ug.pdf

https://aws.amazon.com/ko/premiumsupport/knowledge-center/elastic-beanstalk-static-IP-address/

Amazon VPC에서 Elastic Beanstalk 사용 - AWS Elastic Beanstalk

https://aws.amazon.com/ko/blogs/aws/new-aws-elastic-load-balancing-inside-of-a-virtual-private-cloud/

CIDR.xyz

라우팅 테이블 작업 - Amazon Virtual Private Cloud

Amazon VPC 할당량 - Amazon Virtual Private Cloud

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-ug.pdf#VPC_Route_Tables

네트워크 ACL을 사용하여 서브넷에 대한 트래픽 제어 - Amazon Virtual Private Cloud

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/vpc.html

https://cidr.xyz/

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/WorkWithRouteTables.html

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/amazon-vpc-limits.html

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-network-acls.html

 

2. System Manager - Session Manager

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/what-is-systems-manager.html

https://aws.amazon.com/ko/blogs/mt/replacing-a-bastion-host-with-amazon-ec2-systems-manager/

https://github.com/aws/amazon-ssm-agent

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-getting-started.html

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ssm-session-manager-control-access/

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/getting-started-add-permissions-to-existing-profile.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/getting-started-add-permissions-to-existing-profile.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/getting-started-restrict-access-examples.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-getting-started-instance-profile.html

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-getting-started-restrict-access.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/getting-started-sessiondocumentaccesscheck.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-getting-started-configure-preferences.html

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-preferences-timeout.html

 

3. Session Manager 설치

https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos

 

4. vpn

https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/what-is.html#what-is-limitations

https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/split-tunnel-vpn.html

https://aws.amazon.com/ko/blogs/database/accessing-an-amazon-rds-instance-remotely-using-aws-client-vpn/

https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/cvpn-self-service-portal.html

https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/cvpn-working-target.html

https://www.youtube.com/watch?v=8En5Dd-dHFw 

https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/client-authentication.html#mutual

https://aws.amazon.com/ko/blogs/database/securely-access-amazon-documentdb-with-mongodb-compatibility-locally-using-aws-client-vpn/

https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-dns.html

https://docs.aws.amazon.com/ko_kr/vpn/latest/clientvpn-admin/client-vpn-admin-guide.pdf