새소식

AWS/Network

SAML 을 사용한 AWS Client VPN SSO 구성

  • -

이번 포스팅에서는 SAML 인증을 통해 AWS Client VPN 에 대한 SSO 를 구성하는 법에 대해 알아보겠습니다.

 

1. 개요

 

AWS Client VPN 을 사용하면 보안을 위해 외부 접근이 차단된 AWS 리소스에 안전하게 접근할 수 있습니다.

 

다만, 기본적으로 AWS Client VPN 은 1:1 방식의 상호 인증을 통한 VPN Connection 을 연결해주는데,

대규모 조직에서 사용할 경우 개별적으로 자격 증명을 부여하는 것은 관리적 측면에서 효율적인 방법이 아닙니다.

 

AWS Client VPN 에서는 이러한 문제를 중앙 집중식 관리 방법인 AD 또는 SSO 를 구성하여 해결할 수 있습니다.
이번 포스팅에서는 Application 에 대한 사용자 인증 처리와 접근 제어를 위해 자주 사용되는 Okta 의 SAML 2.0 기능을 이용하여

AWS Client VPN SSO 구성 방법을 알아보겠습니다.

 

1.1. 아키텍처

 

 

2. Server 인증서 구성

 

기본적으로 AWS Client VPN 에서는 VPN 연결을 인증해줄 Server 인증서가 필요합니다.
이번 단계에서는 Server 인증서를 생성하고 ACM (AWS Certificate Manager) 에 업로드하는 과정을 다룹니다.

 

2.1. EasyRSA 설치

 

실제 구성 환경에서는 경우에 따라 유료 인증서를 구매해서 사용하나,

테스트인 관계로 인증서를 쉽게 생성할 수 있는 EasyRSA 를 사용하겠습니다.


제 Local 환경은 Mac 입니다.

 

# Easy RSA 다운로드
git clone https://github.com/OpenVPN/easy-rsa.git

# 이동
cd easy-rsa/easyrsa3

# PKI 환경 시작
./easyrsa init-pki

 

 

2.2. Server CA 생성

 

./easyrsa build-ca nopass

 

Common Name 은 인증서에 대한 부가적인 정보를 입력하는 내용이기에, 테스트에서는 Skip 합니다.

 

 

2.3. Server Key, CRT 생성

 

./easyrsa build-server-full server nopass

 

Confirm request details 에 대해 Yes 를 입력하여 server.keyserver.crt 를 생성합니다.

 

 

2.4. 생성한 인증서를 ACM 에 업로드

 

이제 생성한 인증서를 ACM 에 업로드하면 되는데,

openssl-easyrsa.cnf 의 설정값에 의해 각각의 인증서는 다음과 같은 경로에 저장되어 있습니다.

 

  • ca.cert - pki/ca.crt
  • server.crt - pki/issued/server.crt
  • server.key - pki/private/server.key

 

때문에 다음의 AWS CLI 명령어를 통해 간편하게 업로드가 가능합니다.

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

 

 

AWS 콘솔 화면

 

혹시, AWS CLI 명령어를 사용할 수 없는 환경이라면 ACM 에서 수동으로 직접 키 값을 넣어주면 됩니다.

 

3. SAML SSO 를 위한 Okta 구성

 

우선 Okta 에서 SAML 2.0 과 SSO 기능을 활성화 하기 위해서는 DevPotal (아래 링크) 로 로그인하여야 합니다.

 

Okta Developer

 

developer.okta.com

 

3.1. Client VPN Application 추가

 

Okta 와 AWS Client VPN 를 Okta 의 SSO 를 통해 연결하기 위해서는 Application 을 추가해야합니다.
AWS 에서 SSO 기능을 지원하는 다양한 서비스를 Okta 와 연결할 수 있는데, 여기서 Client VPN 을 검색하여 추가해줍니다.

 

 

 

 

3.2. Client VPN Application 설정

 

이 단계에서는 AWS Client VPN 에 대한 Okta 의 인증 처리 설정을 진행할 것입니다.

 

Application Sign On 에서 Edit 시작

 

SSO 에 접근할 수 있는 멤버 설정

원활한 테스트를 위해 모든 사용자에게 접근을 허용하겠습니다.
Matches regex 에서 * 을 입력한 후 설정을 저장합니다.

 

 

AWS IdP 등록을 위한 SAML 2.0 다운로드

Okta 에서는 SSO 를 위한 SAML 2.0 파일을 제공해줍니다.
다음 버튼을 통해 IdP metadata 를 확인한 후, AWS IdP 등록을 위해 다른 이름으로 저장합니다.

 

 

3.3. Okta SSO 사용자 구성

 

Okta 에서는 중앙 집중식 사용자 접근 기능도 제공해주고 있습니다. (AD)
이 기능을 통해 Okta 에서 관리하는 사용자를 생성해보겠습니다.

 

Directory 서비스에서 유저 추가

 

sso@vpn.com 사용자를 추가했습니다.
사용자의 암호는 추후 Client VPN 접속 시 사용될 암호를 입력합니다.

 

3.4. Client VPN SSO 사용자 등록

 

앞서 생성한 사용자는 Okta Directory 서비스에 저장되는 사용자입니다.
Client VPN 에 해당 사용자가 접근하기 위해서는 Okta Application 에서 한 번 더 등록해주는 절차가 필요합니다.

 

AWS Client VPN Assignment 에 등록

 

 

4. AWS IAM IdP 구성 (feat. SAML 2.0)

 

앞서 Okta 에서 다운로드한 SAML 2.0 파일을 AWS IdP 서비스에 등록하는 과정입니다.


이번 포스팅에서는 Okta 의 SAML 파일을 사용하지만,
다른 SSO 서비스를 사용할 때도 동일하게 각각의 SSO 서비스와 연동된 SAML 을 AWS IdP 에 등록할 필요가 있습니다.

 

AWS IAM IdP (자격 증명 공급자) 이동

 

4.1. IdP 등록

 

공급자 유형을 SAML 로 설정 후, 다른이름으로 저장한 SAML xml 파일을 선택하여 추가합니다.

 

5. AWS Client VPN 생성

 

이제 모든 사전 준비가 끝났습니다.
AWS Client VPN 을 생성해보겠습니다.

 

5.1. AWS Client VPN 엔드포인트 생성

 

 

클라이언트 IPv4 CIDR 는 VPN 으로 연결하고자 하는 VPC 대역과 겹치지 않도록 주의합니다.

 

인증 구성

서버 인증서는 업로드 했던 ACM 을 선택하고, 사용자 기반 인증을 사용해 SAML IdP 를 선택합니다.

 

엔드포인트 파라미터 구성

VPN 을 연결한 사용자가 VPN 네트워크 대역이 아닌 외부 인터넷 또한 함께 쓸 수 있게 하기 위해서는 분할 터널을 활성화 시켜줘야 합니다.
분할 터널 비활성화 시, VPN 이 활성화 된 클라이언트는 모든 트래픽이 VPN 을 통해 흐르게 됩니다.

 

VPN 을 연결할 VPC 와 보안그룹을 선택하고 생성 버튼을 클릭합니다.
해당 보안그룹은 설정에 따라 UDP 443 포트 허용이 필요합니다.

 

생성 완료

 

5.2. AWS Client VPN 네트워크 연결

 

다음은 VPC Subnet 에 네트워크를 연결하고 ENI 를 생성하는 작업입니다.
AWS Client VPN 은 AZ 별로 1개의 대상 네트워크를 연결할 수 있습니다.

 

 

 

5.3. AWS Client VPN 권한 부여 규칙 설정

 

권한 부여 규칙을 통해 VPN 에 연결된 Client 가 접근할 수 있는 AWS VPC CIDR 대역을 제한할 수 있습니다.
테스트인 관계로 제한을 하지 않고 0.0.0.0 으로 오픈하겠습니다.

 

 

상태가 Available 이 되면, VPN 을 연결할 수 있는 상태입니다.

 

6. AWS Client VPN 연결

 

다양한 VPN 어플리케이션을 통해 AWS Client VPN 과 연결할 수 있지만,
이번에는 AWS 에서 공식적으로 제공해주는 AWS Client VPN Desktop 을 사용하겠습니다.

 

6.1. AWS Client VPN Desktop 설치

 

아래 링크를 통해 본인의 환경에 맞는 VPN Desktop 을 설치합니다.

 

AWS Client VPN Download | Amazon Web Services

The client for AWS Client VPN is provided free of charge. You can connect your computer directly to AWS Client VPN for an end-to-end VPN experience. The software client is compatible with all features of AWS Client VPN.

aws.amazon.com

 

6.2. VPN 연결 프로파일 등록

 

생성한 Client VPN 구성을 Client VPN Desktop 과 연동하기 위해서는 VPN 클라이언트 구성을 다운로드 한 후,
VPN Desktop 에 연결 프로파일로 등록해야 합니다.

 

VPN 클라이언트 구성 다운로드

 

VPN 프로파일 등록

 

6.3. VPN 연결

 

연결 버튼 클릭 시, Okta 로그인 페이지가 팝업창으로 나오게 됩니다.
앞서 Okta 에서 등록했던 사용자로 로그인 합니다.

 

6.4. VPN 연결 테스트

 

VPN 연결 테스트를 위해 Private Subnet 에 EC2 를 생성한 후, Private IP 로 SSH 접속을 시도해봅니다.

 

AWS Client VPN 콘솔 확인

AWS Client VPN 콘솔에서 어떤 사용자가 VPN 연결을 시도했는 지 확인이 가능합니다.

 


Okta 외에도 다양한 플랫폼에서 SSO 를 지원하고 있지만, 구성 방법은 이번 Okta 로 구성한 것에서 크게 벗어나지 않습니다.

 

SAML 을 이용한 SSO 구성은 다른 AWS 서비스에도 비슷한 방법으로 구성이 가능하니

한 번만 테스트를 해본다면 이를 응용하여 사용이 가능합니다.

Contents

포스팅 주소를 복사했습니다