콘텐츠 트러스트 키 관리하기

콘텐츠 트러스트 키 관리하기

Docker의 콘텐츠 트러스트(Content Trust)는 이미지 태그의 신뢰성을 보장하기 위해 여러 종류의 키를 사용해요. 이 키들이 각각 어떤 역할을 하는지 이해하면 이미지 서명과 보안 관리를 훨씬 안전하게 할 수 있답니다. 지금부터 다섯 가지 키의 역할과 생성·백업·분실 대처 방법까지 하나씩 차근차근 살펴볼게요.

출처: 공식문서

본문

콘텐츠 트러스트에 사용되는 다섯 가지 키

이미지 태그에 대한 신뢰는 키를 통해 관리되는데, Docker의 콘텐츠 트러스트는 총 다섯 가지 유형의 키를 사용해요.

설명
root key 이미지 태그에 대한 콘텐츠 트러스트의 루트예요. 콘텐츠 트러스트를 활성화하면 한 번 생성하게 되는데, 오프라인 키라고도 불러요. 이름 그대로 온라인 환경과 분리해서 보관해야 하거든요.
targets 이미지 태그에 서명하고, 위임(delegation) 관리까지 담당하는 키예요. 저장소 키라고도 불러요. 어떤 태그를 이미지 저장소에 서명해서 넣을 수 있는지를 결정하는 키이기 때문이에요.
snapshot 현재 이미지 태그 모음에 서명해서 mix-and-match 공격을 방지하는 키예요.
timestamp Docker 이미지 저장소가 신선도(freshness) 보안을 보장할 수 있게 해주는 키예요. 클라이언트 쪽에서 주기적으로 콘텐츠를 새로고침하지 않아도 되도록 도와줘요.
delegation 선택적으로 사용하는 태깅 키예요. targets 키를 공유하지 않고도 다른 게시자에게 이미지 태그 서명 권한을 위임할 수 있게 해줘요.

키는 언제 생성될까?

콘텐츠 트러스트를 활성화한 상태에서 처음으로 docker push를 실행하면, 이미지 저장소를 위해 root, targets, snapshot, timestamp 키가 자동으로 생성돼요.

  • root 키와 targets 키는 클라이언트 로컬에서 생성되어 저장돼요.
  • timestamp 키와 snapshot 키는 Docker 레지스트리와 함께 배포되는 서명 서버에서 안전하게 생성되고 저장돼요. 이 키들은 인터넷에 직접 노출되지 않는 백엔드 서비스에서 생성되고, 저장 시 암호화된 상태로 보관돼요. snapshot 키를 로컬에서 관리하고 싶다면 Notary CLI를 사용해서 snapshot 키를 회전시킬 수 있어요.

delegation 키는 선택 사항이라 일반적인 docker 워크플로우에서는 생성되지 않아요. 수동으로 생성해서 저장소에 추가해야 한답니다.

패스프레이즈 선택하기

root 키와 저장소 키에 사용할 패스프레이즈는 무작위로 생성해서 비밀번호 관리자에 보관하는 것이 좋아요. 저장소 키가 있으면 해당 저장소의 이미지 태그에 서명할 수 있기 때문에, 패스프레이즈는 키를 암호화된 상태로 보관하고, 노트북 분실이나 의도치 않은 백업으로부터 개인 키가 유출되는 것을 막아주는 중요한 역할을 해요.

키 백업하기

Docker 트러스트 키는 생성 시 지정한 패스프레이즈로 암호화되어 저장돼요. 그래도 백업 위치는 신중하게 관리해야 해요. 좋은 방법 중 하나는 암호화된 USB 키 두 개를 만들어 보관하는 거예요.

경고

키를 안전하고 확실한 위치에 백업하는 것은 정말 중요해요. 저장소 키를 잃어버리면 복구가 가능하지만, root 키를 잃어버리면 복구가 불가능하답니다.

Docker 클라이언트는 키를 ~/.docker/trust/private 디렉터리에 저장해요. 백업하기 전에 tar 명령으로 아카이브로 묶어두는 것이 좋아요.

$ umask 077; tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private; umask 022

하드웨어 저장 및 서명

Docker Content Trust는 Yubikey 4에 root 키를 저장하고 서명에 사용할 수 있어요. 파일시스템에 저장된 키보다 Yubikey가 우선적으로 사용돼요. 콘텐츠 트러스트로 새 저장소를 초기화할 때 Docker Engine은 먼저 로컬에서 root 키를 찾아봐요. 키를 찾지 못했는데 Yubikey 4가 있으면, Docker Engine이 Yubikey 4에 root 키를 생성해요. 자세한 내용은 Notary 문서를 참고하세요.

참고로 Docker Engine 1.11 이전에는 이 기능이 experimental 브랜치에만 있었어요.

키 분실 시 대처 방법

경고

게시자가 키를 분실하면 해당 저장소에 대한 이미지 서명 능력을 잃게 돼요. 키를 분실했다면 Docker Hub Support로 이메일을 보내세요. 다시 한번 강조하지만, root 키의 분실은 복구가 불가능해요.

키 분실은 해당 저장소의 서명된 태그를 사용했던 모든 소비자에게도 수동 조치가 필요하게 만들어요. 이미지 소비자는 영향을 받은 저장소에서 이전에 다운로드한 콘텐츠에 대해 다음과 같은 오류를 보게 돼요.

Warning: potential malicious behavior - trust data has insufficient signatures for remote repository docker.io/my/image: valid signatures did not meet threshold

이 문제를 해결하려면 새 키로 서명된 새로운 이미지 태그를 다시 다운로드해야 해요.

더 알아보기 (Learn more)