Redis) 내 데이터 어디갔어..?

박우영·2023년 10월 11일
0

DB

목록 보기
4/6

문제식별

?? 잘 되던 로그인이 갑자기 잘 되지않는데 이유가 뭘까... 401 에러라는건
AccessToken Issue 일텐데 이미 Refresh Token으로 재발급 로직은 확인이 된 상태였기때문에 이번에 GKE 클러스터를 분리하면서 발생한 문제인것 같습니다.


로그를 찍어보니 예상했던대로 Refresh Token이 만료되어있다고 뜨는데
직접 Redis에서 확인해봤습니다.


...?

원인

구글링으로 조금 확인해보니 원인은 다음과 같다고 합니다.

  • redis 서버가 기본포트 6379로 열려있음
  • 인증없이 접근이 가능함

해결방법

포트를 변경하기보다 인증을 만드는 것이 올바른 방법이라고 생각했고,
ACL과 requirepass 를 설정하는 방법이 있습니다.

간단하게 설명하자면

  • ACL : RDBMS 처럼 user 를 설정하는 것 입니다.
  • requirepass : password 를 설정해서 접근할때 해당 password 를 입력하면 접근 가능합니다.

저희는 기존의 설정 yml 파일을 jasypt로 암호화 하여 관리하기 때문에
requirepass 로 설정하여 관리하기로 하였습니다.

Docker-Compose.yml

version: '3.0'

services:
  redis:
    hostname: redis
    container_name: redis
    image: redis:latest
    command: redis-server --requirepass 비밀번호 --port 6379
    ports:
      - 6379:6379

requirepasss 설정을 docker-compose로 설정해줬습니다

그러면 다음과 같이 인증번호를 입력하라고 나오는걸 확인할 수 있습니다.

root@redis:/data# redis-cli
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.

config

    @Value("${spring.data.redis.host}")
    private String host;

    @Value("${spring.data.redis.port}")
    private int port;
    @Value("${spring.data.redis.password}")
    private String password;

    // lettuce
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port);
        config.setPassword(RedisPassword.of(password));
        return new LettuceConnectionFactory(config);
    }

저희는 lettuce 를 사용하였기 때문에 다음과 같이 config 설정을 해줬습니다.

회고

Redis 또한 DB인데 휘발성이라는 단어가 각인되어서 그런지 당연한 인증 시스템을 구축하지 않고 운영하고 있었습니다. 물론 jwt로 암호화가 되어있는 정보를 저장하지만 사용자의 소중한 정보를 안일하게 저장했다는 생각이 들었습니다.

0개의 댓글