GitHub 가 자동 redact 하지만 아는 만큼만
GitHub 는 모든 log 출력에서 secret 의 글자 그대로 값을 redact 해. Secret 이 sk-abc123 이면 stdout, stderr, command 출력, 에러 메시지, annotation 의 그 문자열 등장이 다 *** 로 대체.
하지만 redaction 은 literal string match. 못 redact 하는 거:
- 인코딩된 버전 — base64, JSON-escape, URL-encoded secret 은 글자 그대로 문자열이 아니므로 redact 안 됨.
- 파생 값 — secret 으로 서명한 JWT, secret 의 해시. Secret 과 같지 않지만 누설 가능.
- 부분 echo — 스크립트가 첫 10 자만 출력하면 그 10 자는 redaction trigger 안 함.
- 중첩 프로세스의 env secret +
set -x(bash 디버그 모드) — bash 가 전체 환경을 echo.
방어 습관
- Secret 은
env:로 전달, shell command-line 인자로는 절대 금지 (multi-tenant CI 의 process listing 에 나타남). - Secret 담은 변수를
echo절대 금지, 디버그라도. - 민감 출력은
--mask로 파이프:echo "::add-mask::$VALUE"가 GitHub 에 redact 지시. - Secret 만지는 블록에서
set -x회피. - 여러 줄 secret (RSA 키) 은 파일 기반 handoff 선호: umask 077 로 파일 쓰고 path 로 참조.