클러스터 액세스 - Amazon MemoryDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

클러스터 액세스

MemoryDB 인스턴스는 Amazon EC2 인스턴스를 통해 액세스할 수 있도록 설계되었습니다.

동일한 Amazon VPC의 Amazon EC2 인스턴스에서 MemoryDB 노드에 액세스할 수 있습니다. 또는 VPC 피어링을 사용하여 다른 Amazon VPC의 Amazon EC2에서 MemoryDB 노드에 액세스할 수 있습니다.

클러스터에 액세스 권한 부여

동일한 Amazon VPC에서 실행 중인 Amazon EC2 인스턴스에서만 MemoryDB 클러스터에 연결할 수 있습니다. 이 경우 클러스터에 네트워크 진입을 허용해야 합니다.

Amazon VPC 보안 그룹에서 클러스터로의 네트워크 진입을 허용하려면
  1. AWS Management Console 로그인하고 https://console.aws.amazon.com/ec2/ 에서 Amazon EC2 콘솔을 엽니다.

  2. 왼쪽 탐색 창의 Network & Security 아래에서 Security Groups를 선택합니다.

  3. 보안 그룹 목록에서 Amazon VPC를 위한 보안 그룹을 선택합니다. MemoryDB 사용을 위한 보안 그룹을 생성하지 않는 한 이 보안 그룹의 이름은 default로 지정됩니다.

  4. [Inbound] 탭을 선택하고 다음을 수행합니다.

    1. 편집을 선택합니다.

    2. 규칙 추가를 선택합니다.

    3. [Type] 열에서 [Custom TCP rule]을 선택합니다.

    4. [Port range] 상자에 클러스터 노드의 포트 번호를 입력합니다. 이 번호는 클러스터를 시작할 때 지정한 번호와 동일해야 합니다. Redis OSS의 기본 포트는 입니다. 6379

    5. 소스 상자에서 포트 범위(0.0.0.0/0)를 가진 위치 무관을 선택하면 Amazon VPC 내에서 시작한 Amazon EC2 인스턴스를 MemoryDB 노드에 연결할 수 있습니다.

      중요

      MemoryDB 클러스터를 0.0.0.0/0으로 열면 공용 IP 주소가 없기 때문에 클러스터가 인터넷에 노출되지 않으므로 VPC 외부에서 액세스할 수 없습니다. 그러나 기본 보안 그룹이 고객 계정의 다른 Amazon EC2 인스턴스에 적용될 수 있으며 이러한 인스턴스는 공용 IP 주소를 가질 수 있습니다. 기본 포트에서 무언가를 실행하면 비의도적으로 해당 서비스가 노출될 수 있습니다. 따라서 MemoryDB가 독점적으로 사용하는 VPC 보안 그룹을 생성하는 것이 좋습니다. 자세한 정보는 사용자 지정 보안 그룹을 참조하세요.

    6. 저장을 선택합니다.

Amazon EC2 인스턴스를 Amazon VPC로 시작하면 해당 인스턴스를 MemoryDB 클러스터에 연결할 수 있습니다.

외부에서 메모리DB 리소스에 액세스 AWS

MemoryDB는 VPC에 내부적으로 사용하도록 설계된 서비스입니다. 인터넷 트래픽의 지연 시간 및 보안 문제로 인해 외부 액세스는 권장되지 않습니다. 그러나 테스트 또는 개발 목적으로 MemoryDB에 대한 외부 액세스가 필요한 경우, VPN을 통해 수행할 수 있습니다.

AWS Client VPN을 사용하면 다음과 같은 이점을 통해 MemoryDB 노드에 대한 외부 액세스를 허용할 수 있습니다.

  • 승인된 사용자 또는 인증 키에 대한 제한된 액세스

  • VPN 클라이언트와 VPN 엔드포인트 간의 암호화된 트래픽 AWS

  • 특정 서브넷 또는 노드에 대한 제한된 액세스

  • 사용자 또는 인증 키로부터의 액세스를 쉽게 취소

  • 감사 연결

다음 절차에서는 다음 작업을 수행하는 방법을 보여줍니다.

인증 기관 생성

다양한 기술이나 도구를 사용하여 CA(인증 기관)를 생성할 수 있습니다. OpenVPN 프로젝트에서 제공하는 easy-rsa 유틸리티를 사용하는 것이 좋습니다. 선택한 옵션에 관계없이 키를 안전하게 유지해야 합니다. 다음 절차에서는 easy-rsa 스크립트를 다운로드하고 인증 기관과 첫 번째 VPN 클라이언트를 인증하는 키를 생성합니다.

  • 초기 인증서를 생성하려면 터미널을 열고 다음 작업을 수행하세요.

    • git clone https://github.com/OpenVPN/easy-rsa

    • cd easy-rsa

    • ./easyrsa3/easyrsa init-pki

    • ./easyrsa3/easyrsa build-ca nopass

    • ./easyrsa3/easyrsa build-server-full server nopass

    • ./easyrsa3/easyrsa build-client-full client1.domain.tld nopass

    인증서를 포함하는 pki 하위 디렉터리는 easy-rsa 아래에 생성됩니다.

  • 인증서 관리자 (ACM) 에 서버 AWS 인증서를 제출하십시오.

    • ACM 콘솔에서 Certificate Manager를 선택합니다.

    • 인증서 가져오기를 선택합니다.

    • easy-rsa/pki/issued/server.crt 파일에서 사용할 수 있는 퍼블릭 키 인증서를 인증서 본문 필드에 입력합니다.

    • easy-rsa/pki/private/server.key에서 사용할 수 있는 프라이빗 키를 인증서 프라이빗 키 필드에 붙여 넣습니다. BEGIN AND END PRIVATE KEY 사이의 모든 선(BEGINEND 선 포함)을 선택해야 합니다.

    • easy-rsa/pki/ca.crt 파일에서 사용할 수 있는 CA 퍼블릭 키를 인증서 체인 필드에 붙여넣습니다.

    • 검토 및 가져오기를 선택합니다.

    • 가져오기를 선택합니다.

    AWS CLI를 사용하여 서버의 인증서를 ACM에 제출하려면 다음 명령을 실행합니다. aws acm import-certificate --certificate fileb://easy-rsa/pki/issued/server.crt --private-key file://easy-rsa/pki/private/server.key --certificate-chain file://easy-rsa/pki/ca.crt --region region

    나중에 사용할 수 있도록 인증서 ARN을 기록해 둡니다.

AWS 클라이언트 VPN 구성 요소 구성

AWS 콘솔 사용

AWS 콘솔에서 서비스를 선택한 다음 VPC를 선택합니다.

Virtual Private Network(가상 프라이빗 네트워크)에서 Client VPN Endpoints(클라이언트 VPN 엔드포인트)를 선택하고 다음을 수행합니다.

AWS 클라이언트 VPN 구성 요소 구성

  • Client VPN 엔드포인트 생성을 선택합니다.

  • 다음과 같은 옵션을 지정할 수 있습니다.

    • Client IPv4 CIDR(클라이언트 IPv4 CIDR): 넷마스크가 최소 /22 범위에 있는 프라이빗 네트워크를 사용합니다. 선택한 서브넷이 VPC 네트워크의 주소와 충돌하지 않는지 확인합니다. 예: 10.0.0.0/22.

    • Server certificate ARN(서버 인증서 ARN)에서 앞서 가져온 인증서의 ARN을 선택합니다.

    • Use mutual authentication(상호 인증 사용)을 선택합니다.

    • Client certificate ARN(클라이언트 인증서 ARN)에서 앞서 가져온 인증서의 ARN을 선택합니다.

    • Client VPN 엔드포인트 생성을 선택합니다.

사용 AWS CLI

다음 명령을 실행합니다:

aws ec2 create-client-vpn-endpoint --client-cidr-block "10.0.0.0/22" --server-certificate-arn arn:aws:acm:us-east-1:012345678912:certificate/0123abcd-ab12-01a0-123a-123456abcdef --authentication-options Type=certificate-authentication,,MutualAuthentication={ClientRootCertificateChainArn=arn:aws:acm:us-east-1:012345678912:certificate/123abcd-ab12-01a0-123a-123456abcdef} --connection-log-options Enabled=false

출력 예제:

"ClientVpnEndpointId": "cvpn-endpoint-0123456789abcdefg", "Status": { "Code": "pending-associate" }, "DnsName": "cvpn-endpoint-0123456789abcdefg.prod.clientvpn.us-east-1.amazonaws.com" }

대상 네트워크를 VPN 엔드포인트에 연결

  • 새 VPN 엔드포인트를 선택한 다음 연결 탭을 선택합니다.

  • 연결을 선택하고 다음 옵션을 지정합니다.

    • VPC: MemoryDB 클러스터의 VPC를 선택합니다.

    • MemoryDB 클러스터의 네트워크 중 하나를 선택합니다. 의심스러운 경우, MemoryDB 대시보드의 서브넷 그룹에 있는 네트워크를 검토하세요.

    • 연결을 선택합니다. 필요한 경우 나머지 네트워크에 대해 이 단계를 반복합니다.

사용 AWS CLI

다음 명령을 실행합니다:

aws ec2 associate-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --subnet-id subnet-0123456789abdcdef

출력 예제:

"Status": { "Code": "associating" }, "AssociationId": "cvpn-assoc-0123456789abdcdef" }

VPN 보안 그룹 검토

VPN 엔드포인트는 VPC의 기본 보안 그룹을 자동으로 채택합니다. 인바운드 및 아웃바운드 규칙을 점검하고 보안 그룹이 VPN 네트워크(VPN 엔드포인트 설정에 정의됨)에서 서비스 포트의 MemoryDB 네트워크로의 트래픽을 허용하는지 확인합니다(기본적으로 Redis의 경우, 6379).

VPN 엔드포인트에 할당된 보안 그룹을 변경해야 하는 경우 다음과 같이 진행합니다.

  • 현재 보안 그룹을 선택합니다.

  • Apply Security Group(보안 그룹 적용)을 선택합니다.

  • 보안 그룹을 선택합니다.

사용 AWS CLI

다음 명령을 실행합니다:

aws ec2 apply-security-groups-to-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefga  --vpc-id vpc-0123456789abdcdef --security-group-ids sg-0123456789abdcdef

출력 예제:

"SecurityGroupIds": [ "sg-0123456789abdcdef" ] }

참고

MemoryDB 보안 그룹은 VPN 클라이언트에서 오는 트래픽을 허용해야 합니다. 클라이언트의 주소는 VPC 네트워크에 따라 VPN 엔드포인트 주소로 마스킹 처리됩니다. 따라서 MemoryDB 보안 그룹에서 인바운드 규칙을 생성할 때 VPC 네트워크(VPN 클라이언트 네트워크가 아님)를 고려하세요.

대상 네트워크에 대한 VPN 액세스 승인

Authorization(권한 부여) 탭에서 Authorize Ingress(권한 부여 승인)를 선택하고 다음과 같이 지정합니다.

  • 액세스를 활성화할 대상 네트워크: 0.0.0.0/0을 사용하여 모든 네트워크(인터넷 포함)에 대한 액세스를 허용하거나 MemoryDB 네트워크/호스트를 제한합니다.

  • 다음에 대한 액세스 권한 부여:에서 모든 사용자에게 액세스 허용를 선택합니다.

  • 권한 부여 규칙 추가를 선택합니다.

사용 AWS CLI

다음 명령을 실행합니다:

aws ec2 authorize-client-vpn-ingress --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --target-network-cidr 0.0.0.0/0 --authorize-all-groups

출력 예제:

{ "Status": { "Code": "authorizing" } }

VPN 클라이언트에서 인터넷에 액세스하도록 허용

VPN을 통해 인터넷을 검색해야 하는 경우 추가 경로를 만들어야 합니다. 라우팅 테이블 탭을 선택한 다음 라우팅 생성를 선택합니다.

  • 라우팅 대상 주소: 0.0.0.0/0

  • Target VPC Subnet ID(대상 VPC 서브넷 ID): 인터넷 액세스 권한이 있는 연결된 서브넷 중 하나를 선택합니다.

  • Create Route(라우팅 생성)를 선택합니다.

사용 AWS CLI

다음 명령을 실행합니다:

aws ec2 create-client-vpn-route --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --destination-cidr-block 0.0.0.0/0 --target-vpc-subnet-id subnet-0123456789abdcdef

출력 예제:

{ "Status": { "Code": "creating" } }

VPN 클라이언트 구성

AWS 클라이언트 VPN 대시보드에서 최근에 만든 VPN 엔드포인트를 선택하고 클라이언트 구성 다운로드를 선택합니다. 구성 파일과 easy-rsa/pki/private/client1.domain.tld.keyeasy-rsa/pki/issued/client1.domain.tld.crt 파일을 복사합니다. 구성 파일을 편집하고 다음 파라미터를 변경하거나 추가합니다.

  • cert: client1.domain.tld.crt 파일을 가리키는 파라미터 인증서가 있는 새 줄을 추가합니다. 파일의 전체 경로를 사용합니다. 예제: cert /home/user/.cert/client1.domain.tld.crt

  • cert: key: client1.domain.tld.key 파일을 가리키는 파라미터 키가 있는 새 줄을 추가합니다. 파일의 전체 경로를 사용합니다. 예제: key /home/user/.cert/client1.domain.tld.key

다음 명령을 사용하여 VPN 연결을 설정합니다. sudo openvpn --config downloaded-client-config.ovpn

액세스 취소

특정 클라이언트 키의 액세스를 무효화해야 하는 경우 CA에서 키를 취소해야 합니다. 그런 다음 취소 목록을 AWS Client VPN에 제출합니다.

easy-rsa로 키 취소:

  • cd easy-rsa

  • ./easyrsa3/easyrsa revoke client1.domain.tld

  • 계속하려면 “예”를 입력하고 중단하려면 다른 값을 입력합니다.

    Continue with revocation: `yes` ... * `./easyrsa3/easyrsa gen-crl

  • 업데이트된 CRL이 생성되었습니다. CRL 파일: /home/user/easy-rsa/pki/crl.pem

Client AWS VPN으로 취소 목록 가져오기:

  • 에서 서비스를 선택한 다음 VPC를 선택합니다. AWS Management Console

  • Client VPN Endpoints(클라이언트 VPN 엔드포인트)를 선택합니다.

  • Client VPN 엔드포인트를 선택한 다음 작업 -> Import Client Certificate CRL(클라이언트 인증서 CRL 가져오기)을 선택합니다.

  • crl.pem 파일의 내용을 붙여넣습니다.

사용 AWS CLI

다음 명령을 실행합니다:

aws ec2 import-client-vpn-client-certificate-revocation-list --certificate-revocation-list file://./easy-rsa/pki/crl.pem --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg

출력 예제:

Example output: { "Return": true }