목차
- VPC 전체 구조
- EC2 instance private 접근 구조 - Session Manager
- RDS instance private 접근 구조 - AWS Client VPN
VPC 전체 구조
[1] 구조
(1) private IP 사용 영역
총 IP 개수
- 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
Internal Classic Load Balancers - Elastic Load Balancing
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
라우팅 테이블 작업 - 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://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://aws.amazon.com/ko/premiumsupport/knowledge-center/ssm-session-manager-control-access/
https://docs.aws.amazon.com/ko_kr/systems-manager/latest/userguide/session-preferences-timeout.html
3. Session Manager 설치
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://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://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
'AWS' 카테고리의 다른 글
[Elastic Beanstalk] 애플리케이션 버전 할당량 도달 이슈 (0) | 2023.01.11 |
---|---|
ElastiCache Redis 매커니즘 및 연결 방법 (0) | 2022.12.31 |
VPC + rds private access remotely + Amazon Client VPN + tunnelblick (0) | 2022.12.20 |
invalid fetch size(feat. Amazon Aurora) (0) | 2022.11.22 |
Amazon Aurora with Custom url(domain) 연결 안되는 이슈 (0) | 2022.11.22 |