Redis 인증 및 TLS¶
Redis 인증 방식과 TLS 적용 기준을 정리함.
1. Redis 인증 설정¶
Redis 인증 방식은 크게 legacy requirepass 방식과 Redis 6 이상 ACL 방식으로 나눌 수 있음.
운영 환경에서는 가능하면 ACL 사용을 우선 검토함. 단순 내부 캐시 서버이고 client library가 ACL username/password를 지원하지 않는 경우에는 requirepass를 사용할 수 있음.
1.1 requirepass 방식¶
Redis 설정 파일에서 다음 항목을 설정함.
requirepass CHANGE_ME_TO_LONG_RANDOM_PASSWORD
비밀번호는 충분히 긴 랜덤 문자열을 사용함.
예시 생성:
openssl rand -base64 48
설정 후 Redis를 재시작함.
sudo systemctl restart redis
인증 없이 접근하면 다음과 같은 오류가 발생해야 함.
redis-cli ping
예상 출력:
NOAUTH Authentication required.
Redis CLI가 --askpass를 지원하는 경우 다음으로 확인함.
redis-cli --askpass ping
정상 출력:
PONG
주의
redis-cli --askpass는 Redis CLI 버전에 따라 지원되지 않을 수 있음. Rocky Linux 8 AppStream처럼 Redis 5.x 또는 일부 구버전 CLI를 사용하는 환경에서는--askpass대신REDISCLI_AUTH, URI 방식, 대화형AUTH를 사용함.
구버전 CLI 또는 자동화 환경에서는 다음 중 하나를 사용함.
export REDISCLI_AUTH='CHANGE_ME_TO_LONG_RANDOM_PASSWORD'
redis-cli ping
unset REDISCLI_AUTH
또는 대화형으로 접속 후 인증함.
redis-cli
AUTH CHANGE_ME_TO_LONG_RANDOM_PASSWORD
PING
주의
redis-cli -a 'password'방식은 shell history나 process list에 비밀번호가 노출될 수 있으므로 운영 서버에서는 가급적 사용하지 않음. 자동화에서는 systemdEnvironmentFile, secret manager, root-only secret file, CI/CD secret variable 등을 통해 비밀번호를 주입함.
1.2 ACL 방식¶
Redis 6 이상에서는 ACL을 사용하여 사용자별 권한을 제어할 수 있음.
Redis 설정 파일에서 ACL 파일을 지정함.
aclfile /etc/redis/users.acl
ACL 파일을 생성함.
sudo install -o redis -g redis -m 0640 /dev/null /etc/redis/users.acl
예시 ACL 파일:
sudo tee /etc/redis/users.acl > /dev/null <<'EOF'
user default off
user app on >CHANGE_ME_TO_LONG_RANDOM_PASSWORD ~app:* +@read +@write -@dangerous
user ops on >CHANGE_ME_TO_LONG_RANDOM_PASSWORD ~* +@all
EOF
sudo chown redis:redis /etc/redis/users.acl
sudo chmod 0640 /etc/redis/users.acl
Redis를 재시작함.
sudo systemctl restart redis
수동 점검:
redis-cli --user app --askpass ping
정상 출력:
PONG
자동화 점검:
export REDISCLI_AUTH='CHANGE_ME_TO_LONG_RANDOM_PASSWORD'
redis-cli --user app ping
unset REDISCLI_AUTH
URI 방식:
redis-cli -u 'redis://app:CHANGE_ME_TO_LONG_RANDOM_PASSWORD@127.0.0.1:6379' ping
주의 URI 방식은 shell history, process list, 로그에 비밀번호가 남을 수 있으므로 운영 자동화에서는 secret injection 방식을 우선함.
ACL 상태를 확인함.
redis-cli --user ops --askpass ACL LIST
주의 위 ACL은 예시임. 실제 운영에서는 애플리케이션이 사용하는 command category, key prefix, Pub/Sub channel, stream 사용 여부를 기준으로 최소 권한을 설계해야 함. replica, Sentinel, Cluster 구성을 사용하는 경우에는 복제 및 Sentinel 동작에 필요한 별도 사용자 권한도 설계해야 함.
1.3 legacy 환경에서 위험 명령 비활성화¶
Redis 6 이상에서는 ACL로 위험 명령을 제한하는 것을 우선함. rename-command 방식은 구버전 Redis 또는 legacy requirepass 환경에서 제한적으로 검토함.
legacy 환경에서 다음 명령이 운영 사고를 유발할 수 있음.
FLUSHALLFLUSHDBKEYSCONFIGDEBUGSHUTDOWNMODULESAVE
예시:
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
주의
rename-command는 운영 도구, 백업 도구, 모니터링 도구, replication, 장애 대응 절차와 충돌할 수 있음. 무조건 적용하지 말고 애플리케이션 및 운영 도구 호환성을 확인한 뒤 적용함. Redis 6 이상에서는 ACL로 command category와 command name을 제한하는 방식을 우선함.
2. Redis TLS 설정¶
내부망이라도 Redis 트래픽이 평문으로 이동하면 내부 침해, lateral movement, 패킷 캡처, shared network 환경에서 데이터가 노출될 수 있음. 다음 환경에서는 TLS 적용을 우선 검토함.
- 클라우드 VPC 또는 다중 subnet 환경
- Redis와 애플리케이션 서버가 서로 다른 서버에 있는 환경
- 민감 데이터가 Redis에 저장되는 환경
- 협력사망, 사내 공용망, VPN 구간을 통과하는 환경
- 보안 감사 또는 규정 준수가 필요한 환경
2.1 TLS 인증서 파일 배치¶
예시 경로:
/etc/redis/certs/ca.crt
/etc/redis/certs/redis.crt
/etc/redis/certs/redis.key
/etc/redis/certs/client.crt
/etc/redis/certs/client.key
디렉터리 권한을 설정함.
sudo mkdir -p /etc/redis/certs
sudo chown -R redis:redis /etc/redis/certs
sudo chmod 0750 /etc/redis/certs
sudo chmod 0640 /etc/redis/certs/*.crt
sudo chmod 0600 /etc/redis/certs/*.key
2.2 TLS 전용 Redis 설정 예시¶
Redis 설정 파일에 다음을 적용함.
port 0
tls-port 6379
tls-cert-file /etc/redis/certs/redis.crt
tls-key-file /etc/redis/certs/redis.key
tls-ca-cert-file /etc/redis/certs/ca.crt
tls-auth-clients yes
port 0은 non-TLS plain TCP 포트를 비활성화함. TLS와 plain TCP를 동시에 운영해야 하는 전환 기간이 아니라면 운영 서버에서는 TLS-only 구성을 우선함.
Redis를 재시작함.
sudo systemctl restart redis
listen 포트를 확인함.
sudo ss -tlnp | grep ':6379'
2.3 TLS 접속 확인¶
client certificate 인증을 사용하는 경우:
redis-cli --tls \
--cert /etc/redis/certs/client.crt \
--key /etc/redis/certs/client.key \
--cacert /etc/redis/certs/ca.crt \
--user app \
--askpass \
ping
구버전 CLI 또는 자동화 환경에서는 secret을 환경에서 주입함.
export REDISCLI_AUTH='CHANGE_ME_TO_LONG_RANDOM_PASSWORD'
redis-cli --tls \
--cert /etc/redis/certs/client.crt \
--key /etc/redis/certs/client.key \
--cacert /etc/redis/certs/ca.crt \
--user app \
ping
unset REDISCLI_AUTH
2.4 TLS 적용 시 주의 사항¶
TLS 적용 전 다음을 확인함.
- Redis server binary가 TLS 지원으로 빌드되어 있는지 확인함.
- Redis client library가 TLS를 지원하는지 확인함.
- 애플리케이션 connection string 또는 client option 변경이 가능한지 확인함.
- Sentinel, replica, Cluster 구성에서도 TLS 설정이 필요한지 확인함.
- 인증서 만료일과 교체 절차를 문서화함.
- 인증서 private key 권한을 Redis 사용자 외에는 읽을 수 없게 제한함.
TLS는 보안을 강화하지만 CPU 비용이 추가됨. 고트래픽 환경에서는 TLS 적용 후 latency와 CPU 사용률을 반드시 측정함.