클러스터에 액세스 - 아마존 ElastiCache

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

클러스터에 액세스

Amazon ElastiCache 인스턴스는 Amazon EC2 인스턴스를 통해 액세스하도록 설계되었습니다.

Amazon Virtual Private Cloud(Amazon VPC)에서 ElastiCache 인스턴스를 시작한 경우에는 동일한 Amazon VPC에 있는 Amazon EC2 인스턴스에서 ElastiCache 인스턴스에 액세스할 수 있습니다. 또는 VPC 피어링을 사용하여 다른 Amazon VPC의 Amazon EC2에서 ElastiCache 인스턴스에 액세스할 수 있습니다.

EC2 Classic에서 ElastiCache 인스턴스를 시작하면, 인스턴스와 연결된 Amazon EC2 보안 그룹의 캐시 보안 그룹에 대한 액세스를 허용하여 EC2 인스턴스가 클러스터에 액세스하는 것을 허용합니다. 기본적으로 클러스터에 대한 액세스는 클러스터를 시작한 계정으로 제한됩니다.

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

클러스터를 EC2-VPC로 시작한 경우

Amazon Virtual Private Cloud(Amazon VPC)로 클러스터를 시작한 경우 동일한 Amazon VPC에서 실행 중인 Amazon EC2 인스턴스에서만 ElastiCache 클러스터에 연결할 수 있습니다. 이 경우 클러스터에 네트워크 진입을 허용해야 합니다.

참고

Local Zones를 사용 중인 경우 활성화했는지 확인합니다. 자세한 내용은 Local Zones 활성화를 참조하세요. 이렇게 하면 VPC가 해당 Local Zones로 확장되고 VPC는 서브넷을 다른 가용 영역에 있는 서브넷으로 처리하고 관련 게이트웨이, 라우팅 테이블 및 기타 보안 그룹 고려 사항이 자동으로 조정됩니다.

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

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

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

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

    1. 편집을 선택합니다.

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

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

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

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

      중요

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

    6. 저장을 선택합니다.

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

외부 AWS에서 ElastiCache 리소스에 액세스

Amazon ElastiCache는 클라우드 기반 인메모리 키-값 저장소를 지원하는 AWS 서비스입니다. 이 서비스는 AWS 내에서만 액세스하도록 설계되었습니다. 그러나 ElastiCache 클러스터가 VPC 내에서 호스팅되는 경우 Network Address Translation(NAT) 인스턴스를 사용하여 외부 액세스 권한을 제공할 수 있습니다.

요구 사항

AWS 외부에서 ElastiCache 리소스에 액세스하려면 다음 요구 사항이 충족되어야 합니다.

  • 클러스터는 VPC에 상주해야 하며 NAT(Network Address Translation) 인스턴스를 통해 이 클러스터에 액세스해야 합니다. 이 요구 사항에는 예외가 없습니다.

  • 클러스터와 동일한 VPC에서 NAT 인스턴스를 시작해야 합니다.

  • 클러스터와 다른 퍼블릭 서브넷에서 NAT 인스턴스를 시작해야 합니다.

  • 탄력적 IP 주소(EIP)를 NAT 인스턴스와 연결해야 합니다. iptables의 포트 전달 기능은 NAT 인스턴스의 포트를 VPC에 있는 캐시 노드 포트로 전달하는 데 사용됩니다.

고려 사항

ElastiCache 외부에서 ElastiCache 리소스에 액세스할 때 다음 사항을 고려해야 합니다.

  • 클라이언트가 NAT 인스턴스의 캐시 포트 및 EIP에 연결합니다. NAT 인스턴스의 포트 전달이 적절한 캐시 클러스터 노드로 트래픽을 전달합니다.

  • 클러스터 노드가 추가되거나 대체되면 이 변경 사항을 반영하도록 iptables 규칙을 업데이트해야 합니다.

제한 사항

테스트 및 개발 목적으로만 이 접근 방식을 사용해야 합니다. 다음과 같은 제한으로 인해 프로덕션용으로는 사용하지 않는 것이 좋습니다.

  • NAT 인스턴스가 클라이언트와 여러 클러스터 간의 프록시로 작동하고 있습니다. 프록시를 추가하면 캐시 클러스터 성능에 영향을 줍니다. NAT 인스턴스를 통해 액세스하는 캐시 클러스터 수에 따라 영향이 커집니다.

  • 클라이언트에서 NAT 인스턴스로 향하는 트래픽은 암호화되지 않으므로 NAT 인스턴스를 통해 민감한 데이터를 전송하면 안 됩니다.

  • NAT 인스턴스로 인해 다른 인스턴스를 유지하는 부담이 커집니다.

  • NAT 인스턴스가 단일 장애 지점으로 사용됩니다. VPC에서 고가용성 NAT를 설정하는 방법에 대한 자세한 정보는 Amazon VPC NAT 인스턴스의 고가용성: 예를 참조하십시오.

AWS 외부에서 ElastiCache 리소스에 액세스하는 방법

다음 절차에서는 NAT 인스턴스를 사용하여 ElastiCache 리소스에 연결하는 방법을 보여 줍니다.

이 단계에서는 다음과 같이 가정합니다.

  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6380 -j DNAT --to 10.0.1.231:6379

  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6381 -j DNAT --to 10.0.1.232:6379

다음으로 반대 방향의 NAT가 필요합니다.

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.0.0.55

기본적으로 비활성화된 IP 전달도 활성화해야 합니다.

sudo sed -i 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf sudo sysctl --system

  • 다음을 사용하여 Memcached 클러스터에 액세스합니다.

    • IP 주소 – 10.0.1.230

    • 기본 Memcached 포트 – 11211

    • 보안 그룹 – *10\.0\.0\.55*

  • 신뢰할 수 있는 클라이언트의 IP 주소가 198.51.100.27입니다.

  • NAT 인스턴스의 탄력적 IP 주소가 203.0.113.73입니다.

  • NAT 인스턴스의 보안 그룹이 sg-ce56b7a9입니다.

NAT 인스턴스를 사용하여 ElastiCache 리소스에 연결하려면 다음과 같이 하세요.
  1. 퍼블릭 서브넷이 아닌 캐시 클러스터와 동일한 VPC에 NAT 인스턴스를 만듭니다.

    기본적으로 VPC 마법사가 cache.m1.small 노드 유형을 시작합니다. 필요에 따라 노드 크기를 선택해야 합니다. AWS 외부에서 ElastiCache에 액세스하려면 EC2 NAT AMI를 사용해야 합니다.

    NAT 인스턴스 생성에 대한 자세한 내용은 AWS VPC 사용 설명서의 NAT 인스턴스를 참조하세요.

  2. 캐시 클러스터 및 NAT 인스턴스의 보안 그룹 규칙을 만듭니다.

    NAT 인스턴스 보안 그룹과 클러스터 인스턴스에 다음과 같은 규칙을 지정해야 합니다.

    • 인바운드 규칙 2개

      • 1개는 신뢰할 수 있는 클러스터에서 NAT 인스턴스로부터 전달된 각 캐시 포트(11211 - 11213)로 TCP 연결을 허용합니다.

      • 두 번째 포트는 신뢰할 수 있는 클라이언트에 대한 SSH 액세스를 허용합니다.

      NAT 인스턴스 보안 그룹 - 인바운드 규칙
      유형 프로토콜 포트 범위 소스(Source)
      사용자 지정 TCP 규칙 TCP 11211-11213 198.51.100.27-32
      SSH TCP 22 198.51.100.27-32
    • 아웃바운드 규칙은 캐시 포트(11211)와의 TCP 연결을 허용합니다.

      NAT 인스턴스 보안 그룹 - 아웃바운드 규칙
      유형 프로토콜 포트 범위 대상
      사용자 지정 TCP 규칙 TCP 11211 sg-ce56b7a9(클러스터 인스턴스 보안 그룹)
    • 인바운드 규칙은 NAT 인스턴스에서 캐시 포트(11211)로 TCP 연결을 허용하는 클러스터의 보안 그룹에 적용됩니다.

      클러스터 인스턴스 보안 그룹 - 인바운드 규칙
      유형 프로토콜 포트 범위 소스(Source)
      사용자 지정 TCP 규칙 TCP 11211 sg-bd56b7da(NAT 보안 그룹)
  3. 규칙을 검증합니다.

    • 신뢰할 수 있는 클라이언트가 NAT 인스턴스로 SSH할 수 있음을 확인합니다.

    • 신뢰할 수 있는 클라이언트가 NAT 인스턴스에서 클러스터에 연결할 수 있음을 확인합니다.

  4. NAT 인스턴스에 iptables 규칙을 추가합니다.

    클러스터에 있는 노드마다 NAT 테이블에 iptables 규칙을 추가해야 NAT 인스턴스에서 클러스터 노드로 캐시 포트를 전달할 수 있습니다. 예제는 다음과 같습니다.

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to 10.0.1.230:11211

    포트 번호는 클러스터의 노드마다 고유해야 합니다. 예를 들어, 포트 11211 - 11213을 사용하여 노드가 3개인 Memcached 클러스터로 작업하는 경우 규칙은 다음과 같습니다.

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to 10.0.1.230:11211 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11212 -j DNAT --to 10.0.1.231:11211 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11213 -j DNAT --to 10.0.1.232:11211
  5. 신뢰할 수 있는 클라이언트가 클러스터에 연결할 수 있음을 확인합니다.

    신뢰할 수 있는 클라이언트는 NAT 인스턴스와 연결된 EIP 및 적합한 클러스터 노드에 해당하는 클러스터 포트에 연결해야 합니다. 예를 들어, PHP의 연결 문자열은 다음과 같습니다.

    $memcached->connect( '203.0.113.73', 11211 ); $memcached->connect( '203.0.113.73', 11212 ); $memcached->connect( '203.0.113.73', 11213 );

    telnet 클라이언트를 사용하여 연결을 확인할 수도 있습니다. 예:

    telnet 203.0.113.73 11211 telnet 203.0.113.73 11212 telnet 203.0.113.73 11213
  6. iptables 구성을 저장합니다.

    규칙을 테스트하고 확인한 후 저장합니다. Redhat 기반 Linux 배포(예: Amazon Linux)를 사용하는 경우 다음 명령을 실행합니다.

    service iptables save

관련 주제

더 자세히 알고 싶으시면 다음 단원을 참조하십시오.