QueryPie Redis with TLS Certificate (KO)
Overview
QueryPie 10.3.0 부터는 TLS Certificate 을 요구하는 Redis 를 QueryPie Redis 로 사용할 수 있습니다.
QueryPie 는 작동하는데 Redis 를 필수로 요구합니다. 이 Redis 를 DAC 접근제어 대상이 되는 Redis 와 구분하기 위해, QueryPie Redis 라고 부릅니다. QueryPie Redis 는 아래의 두 가지 용도로 활용되고 있습니다.
이용자가 대상 시스템에 연결 중인 세션의 정보를 보관하고, 여러 QueryPie Server Container 사이에 이 정보를 공유합니다.
QueryPie Server 가 In-Memory Cache 를 구현하기 위해, QueryPie MySQL 의 변경사항을 관리하는 Message Queue 로 사용합니다.
참조: Redis (KO)
Redis 는 6.0 버전부터 TLS 암호화, mTLS 인증 기능을 제공합니다. 이 두 가지 기능은, TLS 인증서를 이용해 데이터 통신을 암호화해 줍니다. 그러나, 보안수준의 측면에서, mTLS 는 Redis Client 측에 유효한 인증서를 요구하기에, mTLS 인증 방식이 더 높은 보안 수준을 제공합니다. 두 가지 경우를 비교하여 표로 만들면, 다음과 같습니다.
Feature | TLS-only | mTLS (Mutual TLS) |
|---|---|---|
Encryption | Yes | Yes |
Server certificate | Required | Required |
Client certificate | ❌ Not required | Required |
Setting |
|
|
Security level | Moderate (like HTTPS) | High (mutual authentication) |
이 문서는 TLS 암호화 또는 mTLS 인증을 요구하는 Redis Server 를 QueryPie Redis 로 사용하는 설정을 적용하는 방법을 안내합니다.
QueryPie 에 Redis 를 위한 TLS Certificate 적용하기
Redis Client 에 TLS Certificate 적용하기 위해 필요한 Root CA, Client Certificate 을 준비합니다. 이 TLS 인증서 파일의 역할과 작동 방식에 대해서는 이 문서의 “Redis Client 에 TLS Certificate 적용하기”, “Redis Server 에 TLS Certificate 적용하기” 섹션을 참고하여 주세요.
Root CA, Client Certificate 파일을 docker-compose.yml 파일의 옆에 놓인, ./certs/ 디렉토리 안에 넣어둡니다. 다음의 파일 이름으로 적용하는 것을 권장합니다.
Root CA :
./certs/redis-ca.crtClient Certificate :
./certs/redis-client.crtClient Private Key :
./certs/redis-client.key
compose-env 환경변수 설정파일에 다음의 항목을 추가합니다.
## Redis with TLS certificate
REDIS_USE_SSL=true
REDIS_USERNAME=
REDIS_SERVER_CERT_FILE=/app/certs/redis-ca.crt
REDIS_CLIENT_CERT_FILE=/app/certs/redis-client.crt
REDIS_CLIENT_KEY_FILE=/app/certs/redis-client.key
REDIS_CLIENT_KEY_PASSWORD=REDIS_USE_SSL를true로 설정하면, TLS 암호화 또는 mTLS 인증을 수행하겠다는 설정입니다.REDIS_SERVER_CERT_FILE에 Root CA 파일의 경로를 지정합니다. TLS 연결을 적용하는 경우, 이 값은 필수로 요구됩니다.REDIS_CLIENT_CERT_FILE에 Client Certificate 파일의 경로를 지정합니다. mTLS 인증이 아니고, TLS 암호화만 적용하는 경우, 이 값을 빈 값으로 비워주세요.REDIS_CLIENT_KEY_FILE에 Client Certificate 의 Private Key 파일 경로를 지정합니다.Docker Host 에서
./certs/경로는 Container 내부에서는/app/certs/에 Mount 되도록 설정되어 있습니다. 환경변수의 파일 경로는 Container 내부의 파일 경로를 기준으로 설정하여야 합니다.Redis Server 에서 특정 Username 을 요구하는 경우,
REDIS_USERNAME를 설정합니다.Client Certificate 파일을 열어보는데, Password 가 적용되어 있다면,
REDIS_CLIENT_KEY_PASSWORD를 설정합니다.
compose-env 에 환경변수 설정을 완료한 이후, QueryPie Server Container 를 실행합니다.
docker-compose.yml 파일을 변경하지 않습니다. 모든 설정은 compose-env 파일에 환경변수를 추가하는 것으로 완료됩니다.
Redis Server 에 TLS Certificate 적용하기
Redis Server 에 TLS Certificate 을 적용하려면, 다음과 같은 TLS 인증서 파일이 필요합니다.
CA Certificate : Server Certificate 발행에 사용하는 Root CA Certificate 입니다.
Server Certificate : Redis Server 를 위해 발행한 TLS Certificate 입니다.
Server Certificate Key : Server Certificate 의 짝이 되는 Private Key 입니다.
자세한 설정 방법에 대해, Redis Open Source 의 TLS Support 문서를 참조하세요. - https://redis.io/docs/latest/operate/oss_and_stack/management/security/encryption/
TLS 암호화 ( TLS-Only )
TLS 암호화를 적용하는 경우, mTLS 와 달리, Client Certificate 을 요구하지 않습니다.
redis.conf 예시
# Enable TLS port
tls-port 6379
# Disable the non-TLS port (recommended)
port 0
# Server-side certificate configuration
tls-cert-file /etc/ssl/redis/server.crt
tls-key-file /etc/ssl/redis/server.key
tls-ca-cert-file /etc/ssl/redis/ca.crt
# Disable client certificate requirement (no mTLS)
tls-auth-clients no
mTLS 인증
mTLS 인증을 적용하는 경우, Redis Server 는 Client 에게 Client Certificate 을 요구하게 됩니다. Client Certificate 는 tls-ca-cert-file 에 설정된 Root CA 에 대해 유효한 TLS Certificate 이어야 합니다.
TLS 암호화 적용의 설정과 달리, tls-auth-clients yes 설정이 적용됩니다.
redis.conf 예시
# Enable TLS port
tls-port 6379
# Disable the non-TLS port (recommended)
port 0
# Server certificate and key
tls-cert-file /etc/ssl/redis/server.crt
tls-key-file /etc/ssl/redis/server.key
# Certificate authority (used to verify both server and client certificates)
tls-ca-cert-file /etc/ssl/redis/ca.crt
# Require client certificates (enables mTLS)
tls-auth-clients yes
Redis Client 에 TLS Certificate 적용하기
TLS 암호화, mTLS 인증, 어느 것을 사용하든, Redis Client 는 Server 설정에 사용한 Root CA 를 필요로 합니다.
TLS 암호화 ( TLS-Only )
Redis Client 를 실행하여 Server 에 연결할 때, 다음과 같은 명령을 사용합니다.
redis-cli --tls \
--cacert /etc/ssl/redis/ca.crt \
-h redis.example.com -p 6379클라이언트는 서버의 인증서를 검증하기 위해 --cacert 를 사용합니다. mTLS 가 아니기에, --cert 와 --key 는 사용하지 않습니다.
mTLS 인증
Redis Client 를 실행하여 Server 에 연결할 때, 다음과 같은 명령을 사용합니다.
redis-cli --tls \
--cert /etc/ssl/redis/client.crt \
--key /etc/ssl/redis/client.key \
--cacert /etc/ssl/redis/ca.crt \
-h redis.example.com -p 6379클라이언트는 서버의 인증서를 검증하기 위해 --cacert 를 사용합니다. 클라이언트 자신의 신원을 증명하기 위해, Client Ceritificate 을 --cert 와 --key 로 지정합니다. 이 Client Certificate 은 Root CA 가 서명한 TLS 인증서이어야 합니다.