redis-cli를 사용하여 Amazon ElastiCache 전송 중 데이터 암호화 지원 Redis 노드에 연결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 7월 9일

redis-cli(Redis 명령줄 인터페이스)는 SSL 지원 클라이언트를 지원하지 않습니다. Amazon ElastiCache 전송 중 암호화 지원 Redis 노드의 데이터에 액세스하려면 어떻게 해야 합니까?

간략한 설명

redis-cli 클라이언트는 SSL/TLS 연결을 지원하지 않습니다. redis-cli를 사용하여 전송 중 데이터 암호화를 지원하는 Redis용 ElastiCache 노드(클러스터 모드 비활성화)에 액세스하려면 Linux 기반 클라이언트에 stunnel 패키지를 사용합니다. 이 stunnel 명령은 stunnel 구성에 지정된 Redis 노드에 대한 SSL 터널을 생성합니다. 터널 설정 후, redis-cli를 사용하여 전송 중 데이터 암호화가 활성화된 클러스터 노드에 연결할 수 있습니다.

참고: 전송 중 데이터 암호화를 사용하여 Redis 노드(클러스터 모드 활성화됨)에 연결하려면 기본적으로 SSL 및 클러스터 모드 활성화 클러스터를 지원하는 Redis 클라이언트를 사용하십시오. 자세한 내용은 Redis 웹 사이트의 Redis.io/clients 단원을 참조하십시오.

해결 방법

1.    SSH를 사용하여 Linux 클라이언트 인스턴스에 연결하고 stunnel 패키지를 설치합니다.

CentOS 기반 시스템의 경우:

$sudo yum install stunnel

Debian 기반 시스템(Ubuntu 16)의 경우:

$sudo apt-get install stunnel

2.    redis-cli.conf 파일에서 하나 이상의 연결 파라미터에 Redis 클러스터 엔드포인트를 추가합니다.

# cat /etc/stunnel/redis-cli.conf
fips = no
setuid = root
setgid = root
pid = /var/run/stunnel.pid
debug = 7
options = NO_SSLv2
options = NO_SSLv3
[redis-cli]
  client = yes
  accept = 127.0.0.1:6379
  connect = master.ssltest.wif0lh.use1.cache.amazonaws.com:6379
[redis-cli-replica]
  client = yes
  accept = 127.0.0.1:6380
  connect = ssltest-002.ssltest.wif0lh.use1.cache.amazonaws.com:6379

이 예제에서는 config 파일이 두 개의 연결(redis-cli 및 the redis-cli-replica)을 가집니다. 파라미터는 다음과 같이 설정됩니다.

  • [client]를 [yes]로 설정하여 이 stunnel 인스턴스가 클라이언트임을 지정합니다.
  • [accept]를 선택하여 클라이언트 IP를 설정합니다. 이 예제에서는 기본이 포트 6379에 Redis 기본값인 127.0.0.1로 설정됩니다. 복제본은 다른 포트를 호출해야 하며 6380으로 설정됩니다. 1024~65535 범위의 휘발성 포트를 사용할 수 있습니다.
  • connect는 Redis 서버 엔드포인트로 설정됩니다. 자세한 내용은 연결 엔드포인트 찾기를 참조하십시오.

3.    stunnel을 시작합니다.

$ sudo stunnel /etc/stunnel/redis-cli.conf

netstat 명령을 사용하여 터널이 시작되었는지 확인합니다.

# netstat -tulnp | grep -i stunnel
tcp    0      0 127.0.0.1:6379      0.0.0.0:*        LISTEN      3189/stunnel
tcp    0      0 127.0.0.1:6380      0.0.0.0:*        LISTEN      3189/stunnel

4.    이제 redis-cli를 사용하여 터널의 로컬 엔드포인트를 사용하는 암호화된 Redis 노드에 연결할 수 있습니다.

# redis-cli -h localhost -p 6379 -a MySecretPassword
localhost:6379>set foo "bar"
OK
localhost:6379>get foo
"bar"

참고: 인스턴스가 암호로 보호된 경우, redis-cli의 -a MySecretPassword 옵션이 AUTH 명령 없이도 인증을 수행합니다. 자세한 내용은 Redis 웹 사이트의 redis-cli, the Redis command line interface를 참조하십시오.

이 예제에서는 telnet을 사용하여 Redis 서버에 연결합니다.

# telnet localhost 6379
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
auth MySecretPassword
+OKget foo
$3
bar

SSL 터널을 중단하고 닫으려면 pkill 명령을 실행합니다.

$ sudo pkill stunnel

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?