クイズ: パイプラインでの秘密情報の扱い
한국어 원문으로 표시합니다.
로그 마스킹을 비밀 유출의 대책으로 삼으면 안 되는 이유는?
- 마스킹된 로그는 나중에 원래 값으로 되돌려 볼 수 있기 때문이다
- 마스킹이 켜지면 로그 저장 용량이 크게 늘어나기 때문이다
- 등록된 문자열과 똑같을 때만 가려져 변형된 값은 그대로 보이기 때문이다
- 마스킹은 기본 브랜치의 실행에서만 적용되기 때문이다
빌드 인자(ARG)로 토큰을 넘기면 안 되는 이유로 공식 문서가 드는 것은?
- 빌드 인자 값이 최종 이미지에 남기 때문이다
- 빌드 인자는 길이 제한이 있어 긴 토큰을 담지 못하기 때문이다
- 빌드 인자는 빌드 캐시 열쇠에 포함되지 않기 때문이다
- 빌드 인자는 여러 줄 값을 그대로 전달하지 못하기 때문이다
RUN --mount=type=secret,id=foo 로 넘긴 비밀은 어떻게 다뤄지는가?
- 빌드 내내 환경 변수로 살아 있고 마지막 레이어에서 제거된다
- 기본적으로
/run/secrets/foo에 마운트되고 이미지 레이어에 남지 않는다 - 이미지 설정의 별도 항목에 암호화되어 저장되고 실행 시 복호화된다
- 빌드 캐시에만 저장되어 같은 빌드에서만 재사용할 수 있다
런타임 비밀을 환경 변수보다 파일로 주는 편이 나은 경우가 많은 이유는?
- 파일은 컨테이너가 다시 시작돼도 내용이 자동으로 갱신되기 때문이다
- 파일로 주면 애플리케이션 코드를 고치지 않아도 되기 때문이다
- 환경 변수는 길이 제한 때문에 긴 인증서를 담지 못하기 때문이다
- 환경 변수는 자식 프로세스와 오류 보고, 덤프에 함께 실리기 때문이다
수명이 짧은 자격증명이 구조적으로 나은 이유는?
- 자격증명이 짧아 로그에 찍혀도 마스킹이 더 정확하게 동작한다
- 새어 나간 값의 쓸모에 시효가 걸려 피해 창이 좁아진다
- 발급 기록이 남아 누가 유출시켰는지 특정할 수 있게 된다
- 짧은 수명은 자격증명이 로그에 남는 것을 원천적으로 막는다
비밀이 커밋에 들어간 것을 발견했을 때 가장 먼저 해야 할 일은?
- 해당 커밋을 이력에서 지우고 강제로 다시 밀어 넣는다
- 그 값이 찍힌 빌드 로그와 산출물을 먼저 삭제한다
- 저장소를 비공개로 바꾸고 접근 권한을 가진 사람을 줄인다
- 그 자격증명을 폐기하고 새 값을 발급해 쓰는 곳을 바꾼다