LabHub
배우기 러닝패스 코스

FDE 캡스톤: 창고가 같은 주문을 세 번 받았다 · 밖으로 못 나가는 로그와 지원 번들 · 실습

고객은 로그를 밖으로 보낼 수 없다고 했다

LabHub 에서 이어서 보기

목표

고객 서버에서 고객 담당자가 직접 돌릴 지원 번들 수집기를 만든다. 허용 목록으로 모으고, 비밀을 가리고, manifest 와 크기 상한을 두고, 같은 입력이면 같은 바이트가 나오는 tar.gz 로 묶는다.

왜 중요한가

로그를 밖으로 보낼 수 없는 고객에게 번들을 받으려면 고객 보안 담당자가 승인해야 한다. 무엇이 들어갔는지, 무엇을 몇 건 가렸는지, 받은 파일이 검토한 그 파일인지를 보여 주지 못하면 번들은 나가지 못한다. 매번 사람이 파일을 고르면 비밀이 새거나 쓸모없는 번들이 나온다.

재료: /opt/lab/p1a-bundle/site — 고객 서버 사본(VERSION, etc, logs, run/environ, data). /opt/lab/p1a-bundle/rules.tsv — 고객 보안팀의 추가 가림 규칙.
작업 디렉터리는 /root/bundle 이다. 예상 60분이고, 세션이 끝나면 /root/bundle 은 사라진다.

수집 규칙(이 실습의 약속):

단계

1. 재료 site 에서 수집 규칙에 맞는 파일의 상대 경로를 /root/bundle/scope.txt 에 한 줄씩 적는다.
2. 표준입력을 가려 표준출력으로 내보내고 표준오류에 redactions=N 을 찍는 /root/bundle/redact.py 를 만든다.
3. python3 collect.py SRC OUT 이 OUT/stage 에 허용 목록 파일을 가려서 두는 /root/bundle/collect.py 를 만든다.
4. collect.py 가 OUT/stage/manifest.json 을 만들게 한다(files 배열: path·size·sha256·redactions·truncated, path 순 정렬, total_redactions).
5. 로그 파일에 65536 바이트 상한을 적용하고 manifest 의 truncated·redactions 를 실제에 맞춘다.
6. collect.py 가 OUT/support-bundle.tar.gz 를 만들게 한다. 항목은 support-bundle/ 아래 이름순이고, 같은 입력이면 언제 어디서 묶어도 sha256 이 같아야 한다.
7. --rules FILE 을 받아 kind<TAB>정규식 규칙을 기본 규칙 뒤에 적용하고 [REDACTED:kind] 로 가리게 한다.
8. 재료 site 와 rules.tsv 로 /root/bundle/delivery/support-bundle.tar.gz, SHA256SUMS, REDACTION-REPORT.tsv 를 만든다.

참고

단계 8개

  1. 무엇을 넣을지 허용 목록으로 정하기
  2. 좁고 정확한 가림 필터
  3. 허용 목록만 모아 가린 stage 만들기
  4. 검토자가 대조할 manifest
  5. 큰 로그는 가린 뒤 최근 줄만
  6. 같은 입력이면 같은 바이트
  7. 고객 보안팀의 추가 규칙을 파일로 받기
  8. 전달 번들과 검토용 보고서