Cloud Solution Architect/AWS

2차 세미 프로젝트 - Openstack

YunHyeong 2023. 5. 11. 18:01

0. 구현 순서

1. Openstack On-premise 환경 구축 

2. 오픈스택 퍼블릭클라우드 VPN 연결

3. AWS RDS

4. AWS EFS

5. 온프레미스 환경에서 S3로 Private 접근

1. Openstack On-premise 환경 구축과 VPN 연결

1.1 On-premise 아키텍처

- WEB server

  • 웹 서버는 사내 사용자들에게 정적인 컨텐츠나 동적인 데이터를 응답하는 서비스로써의 역할을 한다. 또한, AWS의 EFS, S3와 연결되어 필요한 파일이나 컨텐츠를 제공받을 수 있다.

- Database server

  • 데이터베이스 서버는 AWS RDS와의 연동을 통해 RDS의 데이터 백업과 온프레미스 내에서 자체적으로 사용할 수 있는 데이터를 저장한다.

- Router

  • 외부망과의 연결을 위해 사용되며, VPN 연결 시 정적 경로 추가 설정이 필요하다.

2. 오픈스택과 퍼블릭클라우드 VPN 연결

2.1 고객 게이트웨이 생성

-  VPN 연결을 위해 고객 게이트웨이를 만들고 IP 주소를 강의장 IP로 설정한다.

 

2.2 가상 프라이빗 게이트웨이 생성

- 가상 프라이빗 생성과 동시에 VPN연결을 위한 VPC를 선택한다.

 

2.3 site-to-site VPN 생성

- site-to-site를 생성하면 가상 프라이빗 게이트웨이(VGW)와 온프레미스 측 고객 게이트웨이(CGW) 사이에 두개의 VPN 터널을 생성

- 두 개의 터널은 각각 다른 가용 영역에 터널 엔드 포인트를 가진다.

 

2.4 Libreswan

- /etc/sysctl.conf 수정

# net.ipv4.ip_forward = 1
# net.ipv4.conf.default.rp_filter = 0
# net.ipv4.conf.default.accept_source_route 

 

- 터널링

# vi /etc/ipsec.d/aws.conf

 

- 터널의 키설정

# vi /etc/ipsec.d/aws/secrets

- ipsec 재시작

 # systemctl restart ipsec

# systemctl status ipsec

 

2.3 Router와 Routing table 수정

- 오픈스택 라우터 정적 경로 추가

- 대상 CIDR을 10.37.0.0/16 대역대의 AWS VPC 대역대로 설정
- 다음 홉을 Libreswan이 설치되어 있는 오픈스택 private 주소(192.168.1.92)로 설정 

 

-  AWS VPC 라우팅 테이블 수정

- 목적지 네트워크 대역대를 192.168.0.0/21으로 설정한다
- 목적지 대역대를 찾아가기 위해서 길을 묻는 대상으로 가상 프라이빗 게이트웨이(vgw)를 설정한다.

 

3. AWS RDS

3.1 RDS 읽기 전용 복제본 만들기

- 보안그룹 수정

 

- RDS DB 읽기 전용 복제

 

- VPC와 보안 그룹 선택

 

- 오픈스택에서 복제본 RDS로 접근

# mysql -h my-db-read-only.cghdvtao1swe.ap-northeast-2.rds.amazonaws.com -u yunhyeong -p

 

- 데이터 삽입 시도

 

3.2 mysqldump

- 백업 파일 만들기

# mysqldump -h my-db.cghdvtao1swe.ap-northeast-2.rds.amazonaws.com -u yunhyeong -p wordpress > wordpress.sql

- 오픈스택 db에서 데이터베이스 확인

 

- 백업 파일 복원

# mysql -u root -p

# create database wordpress 

# mysql -u root -p wordpress < wordpress.sql

 

4. AWS EFS

- EFS 보안 그룹 생성

- NFS 유형의 보안 그룹을 생성하고
- VPN Gateway를 통해 들어오는 모든 트래픽을 허용하기 위해서 인바운드를 0.0.0.0/0으로 설정한다.

 

- EFS 생성

- EFS 생성시 적용할 VPC와 서브넷을 선택한다.
- 각 서브넷에 EFS 전용 보안그룹을 넣어준다. 

 

- 마운트 방법 선택

- DNS 호스트가 가능한 인스턴스면 DNS를 통한 탑재가 가능하다.
- ec2 인스턴스에서는 DNS를 통한 탑재가 가능하기 때문에 해당 항목을 선택한다
- 그리고 마운트 명령어를 복사한다 

 

- EC2 인스턴스에서 EFS 마운트

- efs 디렉토리를 만들고 
- efs 경로에 DNS 주소로 마운트를 진행한다.
- df -h로 마운트 목록 확인
- efs 안에서 test.txt 파일 생성

 

- 오픈스택 webserver에 마운트

- efs 경로를 만들고
- efs 디렉토리에 IP를 탑재한 마운트를 한다.
- 오픈스택 환경은 DNS 호스트 이름이 비활성화된 환경이기 때문에 IP로 마운트를 진행

 

- 마운트 결과

- df -h로 마운트 목록 확인
- efs 디렉토리 안에서 test.txt 파일을 확인한다

 

5. 온프레미스 환경에서 S3로 Private 접근

5.1 VPC endpoint

- 일반적인 상황에서는 VPC안의 리소스들이 S3에 접근하기 위해서는 외부 인터넷을 경유해야한다.
- 따라서 Private Subnet에 있는 리소스들이 S3에 접근하기 위해서는 중간 경로인 NAT Gateway를 반드시 거쳐야한다.
- 이는 결국 내부 리소스와 S3가 통신시 외부에 트래픽이 노출됨을 의미하며 보안상 좋지 않은 구조를 갖는다.

 

- VPC 엔드포인트를 만든다면, private 영역에 있는 리소스들이 S3에 접근할 때 NAT Gateway를 거치지 않고 바로 S3에 접근할 수 있다.

 

- 이때 생성되는 VPC 엔드포인트는 게이트웨이 엔드포인트이며, subnet에서는 자동으로 이 게이트웨이 엔드포인트로 routing table을 추가하고 게이트웨이이는 S3로 트래픽을 보낸다.

 

5.2 IAM 역할 만들기

- S3를 이용하기에 앞서 먼저 EC2에서 S3로 접근하는 역할(Role)을 IAM에서 생성한다.

 

- EC2 역할 부여

- Private subnet 안에 있는 인스턴스에 이전에 생성한 S3 역할을 부여한다.

 

5.3 게이트웨이 엔드포인트 

 

- Gateway 엔드포인트 선택

- 엔드포인트 생성시 Gateway를 지원하는 서비스로 선택한다.
- VPC와 private subnet의 라우팅 테이블을 선택한다.

 

- 라우팅 테이블 확인

- Private subnet안의 라우팅 테이블이 Gateway endpoint와 S3로 연결되어 있는 것을 볼 수 있다.

 

5.4 IAM 사용자 추가

- IAM 사용자 추가

- AmazonS3FullAccess를 가진 사용자를 만든다.
- 이 사용자로 aws-cli에서 S3 접근 예정

 

- 엑세스 키 만들기

- 엑세스키를 만들어 Key ID와 Access Key 두가지를 발급 받는다.

 

5.5 aws-cli

 

# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# unzip awscliv2.zip
# sudo ./aws/install

 

- 온프레미스 환경 aws-cli 설치

- 온프레미스 환경에 위치한 Web server에 접속
- 명령어를 순서대로 입력하여 오픈스택 환경에서 aws-cli를 설치한다.

 

- CLI 자격 증명

- aws configure 명령어를 입력하고 앞서 발급 받은 엑세스 키로 s3 사용자에 로그인 한다.
- aws s3 ls 명령어를 입력하여 정상적으로 S3가 나타나는지 확인한다.
- VPN 연결로 인해 외부 경로가 아닌, private 경로로 이동해 VPC Gateway 엔드포인트에서 S3로 접근할 수 있음을 확인한다.