Bluelockr/AWS Client VPN 상호 인증

Created Wed, 04 Oct 2023 00:00:00 +0000 Modified Tue, 12 May 2026 03:50:56 -0700
1555 Words

https://www.youtube.com/watch?v=spBZkk9fuxg
https://1mini2.tistory.com/134

⭐IAM 사용자 생성

IAM > 사용자 > 사용자 생성

  • 사용자 이름 : student
  • AWS Management Console에 대한 사용자 액세스 권한 제공 : 체크
  • IAM 사용자를 생성하고 싶음 : 선택
  • 콘솔 암호 : 자동 생성된 암호
  • 사용자는 다음 로그인 시 새 암호를 생성해야 합니다 : 체크
  • 권한 옵션 : 직접 정책 연결
  • 권한 정책 : AWSCertificateManagerFullAccess
  • .csv 파일 다운로드

IAM > 사용자 > (student 클릭) > 보안 자격 증명 > MFA 디바이스 할당

  • 디바이스 이름 : app

IAM > 사용자 > (student 클릭) > 보안 자격 증명 > 액세스 키 만들기

  • 사용 사례 : Command Line Interface(CLI)
  • 위의 권장 사항을 이해했으며 액세스 키 생성을 계속하려고 합니다. : 체크
  • .csv 파일 다운로드

⭐VPC 생성

VPC > VPC > VPC 생성

  • 생성할 리소스 : VPC 등
  • 이름 태그 : client-vpn-vpc (client-vpn까지만 입력하면 -vpc가 뒤에 자동으로 붙음)
  • IPv4 CIDR : 10.0.0.0/16
  • 가용 영역(AZ) 수 : 1
  • 퍼블릭 서브넷 수 : 0
  • 프라이빗 서브넷 수 : 1
  • NAT 게이트웨이 : 없음
  • VPC 엔드포인트 : 없음

⭐프라이빗 서브넷 인스턴스 생성 및 연결

EC2 > 인스턴스 > 인스턴스 시작

  • 이름 : private-server
  • Quick Start : Amazon Linux 2023
  • 키 페어 이름 : vpn-key
  • 네트워크 설정 > 편집
    • vpc : client-vpn-vpc
    • 서브넷 : client-vpn-subnet-private어쩌고
    • 퍼블릭 IP 자동할당 : 비활성화
    • 보안 그룹 : vpn-sec
    • 인바운드 보안 그룹 규칙
      • SSH, 소스 : 0.0.0.0/0

⭐AWS CLI 설치 및 설정

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

위 링크에서 설치 파일(*.msi) 다운받아 설치 후 윈도우 터미널을 열고 다음 명령어 실행

aws configure
(액세스 ID 입력)
(액세스 시크릿 키 입력)
Default region name : ap-northeast-2
Default output format : json

⭐EasyRSA 다운로드 및 ACM 설정

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

https://github.com/OpenVPN/easy-rsa/releases

바로 윗 링크에서 easy-rsa zip 파일을 다운로드합니다.
저는 윈도우 64비트이므로 EasyRSA-3.1.6-win64.zip 파일을 다운받아 압축해제해줬습니다.
(반디집의 알아서 풀기 기능을 이용하면 더더욱 좋습니다.)
다운로드 경로는 기본적으로 ‘다운로드’ 폴더 안입니다.

다운받은 폴더 안쪽으로 들어간 뒤 우클릭해 터미널을 열고 다음 명령어를 실행합니다.

한 줄씩 차근차근 실행해줍니다.

.\EasyRSA-Start.bat

./easyrsa init-pki
./easyrsa build-ca nopass
(엔터)
./easyrsa build-server-full server nopass
yes
./easyrsa build-client-full client1.domain.tld nopass
yes
exit

mkdir C:\easyrsa
copy pki\ca.crt C:\easyrsa
copy pki\issued\server.crt C:\easyrsa
copy pki\private\server.key C:\easyrsa
copy pki\issued\client1.domain.tld.crt C:\easyrsa
copy pki\private\client1.domain.tld.key C:\easyrsa
cd C:\easyrsa

aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt

aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt

⭐Client VPN 엔드포인트 설정

VPC > Client VPN 엔드포인트 > 클라이언트 VPN 엔드포인트 생성

  • 이름 태그 : cvpn-endpoint
  • 클라이언트 IPv4 CIDR : 172.0.0.0/22 (VPC CIDR 대역과 겹치지 않아야 함)
  • 서버 인증서 ARN : (아까 생성한 ACM server 인증서)
  • 상호 인증 사용 : 체크
  • 클라이언트 인증서 ARN : (아까 생성한 ACM client 인증서)
  • 기타 파라미터
    • DNS 서버 활성화 : 켜기
    • 전송 프로토콜 : UDP
    • 분할 터널 활성화 : 켜기
    • VPC ID : client-vpn-vpc
    • 보안 그룹 ID : vpn-sec
    • VPN 포트 : 443

분할 터널 활성화를 반드시 해주셔야 합니다!

VPC > Client VPN 엔드포인트 > 대상 네트워크 연결> 대상 네트워크 연결

  • VPC : client-vpn-vpc
  • 서브넷 : client-vpn-subnet-private어쩌고

VPC > Client VPN 엔드포인트 > 권한 부여 규칙 > 권한 부여 규칙 추가

  • 액세스를 활성화할 대상 네트워크 : 10.0.0.0/16 (클라이언트 VPN 엔드포인트에 연결된 VPC의 CIDR)

VPC > Client VPN 엔드포인트 > 클라이언트 구성 다운로드

다운로드한 클라이언트 구성 파일에 다음과 같은 내용을 추가하고 저장합니다.

<cert>
(client1.domain.tld.crt 파일의 내용 복붙)
</cert>

<key>
(client1.domain.tld.key 파일의 내용 복붙)
</key>

client1.domain.tld.crt나 key 파일의 내용을 복붙할 떄는 아까와 마찬가지로 begin, end절까지 모두 포함시킵니다.

client1.domain.tld.crt나 key 파일은 C드라이브의 easyrsa 폴더 안에 있습니다.

⭐AWS Client VPN 설치 및 연결

https://aws.amazon.com/ko/vpn/client-vpn-vpc-download/

위 링크에서 윈도우 64bit 버전용을 다운받아 설치합니다.

AWS VPN Client 프로그램을 실행하고 파일 > 프로필 관리 > 프로필 추가

  • 표시 이름 : aws_vpn_client
  • VPN 구성 파일 : (아까 전에 다운받은 vpc-client-endpoint 구성 파일)

⭐프라이빗 서브넷 EC2 인스턴스 직접 접속

VPN이 활성화 되었으니 이 상태로 프라이빗 인스턴스로 직접 SSH 접속해보겠습니다.

EC2 > 인스턴스 > (private-server 체크) > 연결 > SSH 클라이언트

  • 맨 밑에 예 : ssh -i “vpn-key.pem” ec2-user@xxxxxxxx 형식으로 되어있는 명령어 복사

이제 *pem 키 파일을 다운받은 곳으로 이동하여 해당 폴더에서 터미널을 열어주고 복붙한 명령어를 실행합니다.

이렇게 하면 NAT 게이트웨이나 Bastion Host 같은 것 없이도 프라이빗 서브넷에 있는 EC2 인스턴스에 바로 SSH 접속할 수 있습니다.