소개
지원 대시보드는 Redis 에 티켓과 처리 결과를 캐시합니다. 이 흐름을 유지하면서 자체 데이터만 접근하는 계정을 만듭니다.
Redis 는 키라는 이름으로 값을 저장합니다. 캐시 키는 데이터 이름이며 암호가 아닙니다. 이 실습은 합성 티켓과 격리된 훈련 네트워크의 실제 Redis 서버를 사용합니다. 기본 터미널 사용이면 충분하며 Redis 나 프로그래밍 경험은 필요 없습니다. Client 와 Cache Server 는 인스턴스의 커널을 공유하는 별도 컨테이너를 엽니다. Dashboard 는 보안 점수가 아닌 실제 요청을 보여 줍니다.
지원 티켓 처리
이 단계에서는 정상 앱 동작을 확인합니다. Redis는 이름이 있는 값을 저장하고 요청에 응답하는 서버입니다. 대시보드는 Redis에 티켓을 요청하여 처리하고 결과를 쓰는 클라이언트입니다. 캐시는 앱이 사용하는 편리한 저장소이며 여기서는 합성 값을 사용합니다. 입력은 support:ticket에, 처리 결과는 support:result에 저장됩니다.
Dashboard를 여세요. input과 result가 표시됩니다. 처음 입력은 Ticket 104: password reset이고 결과는 비어 있습니다. Process ticket을 한 번 누르면 결과가 Processed: Ticket 104: password reset이 됩니다. 새로 고침하면 저장된 값을 다시 읽습니다. 실제 읽기 다음에 쓰기가 수행된 것입니다.
페이지에는 username: default도 표시됩니다. 사용자 이름은 Redis 계정을 나타내며 캐시 키와 별개입니다. 앱은 현재 암호 없이 자동으로 사용 가능한 기본 계정을 사용합니다. 정상 업무 결과는 가용성을 보여 주지만 계정이 다른 어떤 데이터에 접근하는지는 증명하지 않습니다.
연결 오류가 나오면 한 번 새로 고침하세요. 오류 페이지는 권한 거부가 아닙니다. 두 터미널 탭을 열어 두고 탭 이름으로 작업 위치를 구분하세요.
필요한 접근과 과도한 접근 비교
이 단계에서는 버려도 되는 값을 읽고 써서 기본 접근이 왜 지나치게 넓은지 확인합니다. Client를 사용하세요. 준비된 터미널은 앱 컨테이너 안에 있습니다. redis-cli는 Redis 명령줄 클라이언트입니다. -h cache-server는 사설 네트워크 이름으로 서버를 선택합니다. 여기서 localhost는 클라이언트 컨테이너 자신입니다.
GET은 키를 읽습니다. 대시보드 입력을 읽으세요.
redis-cli -h cache-server GET support:ticket
응답에는 Ticket 104: password reset이 포함됩니다. 콜론은 키 이름의 일부입니다. support: 접두사가 앱 데이터를 묶습니다.
SET은 값을 씁니다. 업무 입력을 유지하도록 일회용 연습 키인 demo:note를 사용하세요.
redis-cli -h cache-server SET demo:note practice
OK는 쓰기 성공입니다. 다시 읽으세요.
redis-cli -h cache-server GET demo:note
응답은 practice입니다. 이제 관련 없는 합성 재무 값을 읽습니다.
redis-cli -h cache-server GET finance:payroll
Private payroll: synthetic이 나옵니다. 지원 대시보드가 급여를 읽어야 할 업무상 이유는 없습니다. 인증은 누가 연결하는지를 확인하고 권한 부여는 허용할 명령과 키를 결정합니다. 현재 기본 계정은 이 무관한 읽기와 불필요한 관리 명령 모두를 허용합니다.
제한된 앱 계정 만들기
이 단계에서는 이름이 있는 계정에 필요한 작업과 키 범위만 부여합니다. Cache Server로 전환하세요. cache-admin은 별도 유지보수 계정으로 실제 redis-cli를 실행하는 준비된 도우미입니다. 관리용이며 앱 인증 설정용이 아닙니다.
접근 제어 목록인 ACL 은 각 계정에 명령과 키 규칙을 부여합니다. 대시보드는 support:*에 GET과 SET이 필요합니다. 별표는 support: 뒤의 임의 접미사를 뜻합니다. 이 간단한 접두사 패턴은 정규식이 아닙니다.
ACL SETUSER는 계정을 만들거나 변경합니다. reset은 이전 규칙을 지우고 on은 인증을 켭니다. >...는 암호, ~...는 키 패턴을 지정하며 +get +set은 이 두 명령만 허용합니다. 작은따옴표는 >와 *를 셸에서 보호합니다. 없으면 셸이 출력을 리디렉션하거나 파일 이름을 확장할 수 있습니다. 실행하세요.
cache-admin ACL SETUSER dashboard reset on '>Dash-Lab-42' '~support:*' +get +set
OK를 확인하세요. Dash-Lab-42 암호는 계정 인증용이며 Redis 데이터 키가 아닙니다. 훈련 자격 증명은 로컬 예시이지 운영 비밀이 아닙니다.
Client로 전환하세요. --user는 계정을 선택하고 --askpass는 명령줄에 암호를 넣지 않고 입력을 요청합니다. 매번 Dash-Lab-42를 입력하세요. 문자가 표시되지 않을 수 있습니다.
redis-cli -h cache-server --user dashboard --askpass GET support:ticket
티켓은 계속 읽힙니다. 다른 새 연결로 무관한 키를 시험하세요.
redis-cli -h cache-server --user dashboard --askpass GET finance:payroll
NOPERM이 예상됩니다. 인증은 성공했지만 키가 금지되었습니다. WRONGPASS는 사용자 이름이나 암호 오류이므로 수정 후 재시도하세요. 연결 오류는 서비스에 도달하지 못한다는 뜻이며 제한 성공이 아닙니다. ACL 오타는 Cache Server 에서 올바른 값으로 전체 reset 명령을 다시 실행해 복구하세요.
활성 ACL 저장
이 단계에서는 이후 서비스 시작에도 권한이 유지되도록 계정을 영구 저장합니다. 메모리의 ACL 변경은 즉시 적용되지만 설정 파일을 자동 갱신하지 않습니다. Cache Server를 사용하세요.
cache-admin ACL SAVE
OK를 확인하세요. Redis 는 서버가 사용하는 ACL 파일인 /data/users.acl에 활성 사용자를 씁니다. cat은 파일을 표시합니다. 저장 규칙을 살펴보세요.
cat /data/users.acl
dashboard 행에는 ~support:*, -@all, +get, +set이 있습니다. 순서는 달라질 수 있습니다. -@all은 모든 명령 범주를 처음에 거부한다는 뜻입니다. #로 시작하는 값은 Redis 암호 해시이며 원래 암호가 아닙니다.
활성 계정과 비교하세요.
cache-admin ACL GETUSER dashboard
같은 키 범위와 명령 권한을 찾으세요. 사용하지 않는 파일을 편집해도 실행 중인 계정은 바뀌지 않습니다. ACL SAVE는 실제 활성 규칙을 저장합니다.
이 실습에서는 기본 항목이 계속 켜져 있습니다. 더 적절한 계정을 만들어도 기존 앱이 전환되거나 이전 경로가 폐기되지는 않습니다. 다음 실습은 독립된 스냅샷에서 나머지 변경을 가르칩니다. 유지보수 자격 증명을 앱에 넣지 마세요.
요약
실제 지원 티켓을 처리하고 데이터 키와 암호를 구분했으며 정상 접근과 과도한 접근을 비교했습니다. support:*에 GET/SET만 허용하는 전용 계정을 만들고 저장했습니다. 앱 전환 뒤에는 이전 기본 경로를 폐기해야 합니다.


