콘텐츠 트러스트 자동화

콘텐츠 트러스트 자동화

Docker Content Trust를 기존 자동화 시스템에 통합하는 일은 아주 흔해요. 도구가 Docker를 감싸서 신뢰된 콘텐츠를 푸시할 수 있도록, 클라이언트에 전달할 수 있는 환경 변수들이 준비되어 있어요. 이 가이드는 Docker Content Trust로 이미지 서명하기 문서에 나온 절차를 따라가요. 사전 준비 사항을 잘 이해하고 따라와 주세요.

Notary 클라이언트를 직접 사용할 때는 자체 환경 변수 세트를 사용해요.

출처: 공식문서

본문

위임 개인 키 추가하기

위임 개인 키를 로컬 Docker 트러스트 저장소에 자동으로 가져오려면 새 키에 대한 암호문구(passphrase)를 전달해야 해요. 이 암호문구는 그 위임 키가 태그에 서명할 때마다 필요해요.

$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"

$ docker trust key load delegation.key --name jeff
Loading key from "delegation.key"...
Successfully imported key from delegation.key

위임 공개 키 추가하기

저장소를 초기화하면서 위임 공개 키를 함께 추가한다면, 로컬 Notary Canonical Root Key의 암호문구를 사용해서 저장소의 트러스트 데이터를 만들어야 해요. 저장소가 이미 초기화되어 있다면 저장소 암호문구만 있으면 돼요.

# 필요한 경우 로컬 루트 키 암호문구를 내보내세요.
$ export DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE="rootpassphrase123"

# 저장소 암호문구를 내보내세요
$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="repopassphrase123"

# 저장소 초기화 및 위임 푸시
$ docker trust signer add --key delegation.crt jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
Initializing signed repository for registry.example.com/admin/demo...
Successfully initialized "registry.example.com/admin/demo"
Successfully added signer: registry.example.com/admin/demo

이미지 서명하기

마지막으로 이미지에 서명할 때는 서명 키의 암호문구를 내보내야 해요. 이 암호문구는 $ docker trust key load로 키를 로컬 Docker 트러스트 저장소에 로드할 때 생성된 값이에요.

$ export DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE="mypassphrase123"

$ docker trust sign registry.example.com/admin/demo:1
Signing and pushing trust data for local image registry.example.com/admin/demo:1, may overwrite remote trust data
The push refers to repository [registry.example.com/admin/demo]
428c97da766c: Layer already exists
2: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Signing and pushing trust metadata
Successfully signed registry.example.com/admin/demo:1

콘텐츠 트러스트로 빌드하기

콘텐츠 트러스트를 활성화한 상태로 빌드할 수도 있어요. docker build 명령을 실행하기 전에 DOCKER_CONTENT_TRUST 환경 변수를 직접 설정하거나 스크립트로 설정해 두어야 해요. 아래 간단한 Dockerfile을 볼게요.

# syntax=docker/dockerfile:1
FROM docker/trusttest:latest
RUN echo

FROM 태그는 서명된 이미지를 가져와요. 로컬에 존재하지 않거나 서명되지 않은 FROM 이미지로는 빌드할 수 없어요. latest 태그에 대한 콘텐츠 트러스트 데이터가 있으므로 다음 빌드는 성공해요:

$ docker build -t docker/trusttest:testing .
Using default tag: latest
latest: Pulling from docker/trusttest

b3dbab3810fc: Pull complete
a9539b34a6ab: Pull complete
Digest: sha256:d149ab53f871

콘텐츠 트러스트가 활성화되어 있을 때, 트러스트 데이터가 없는 태그에 의존하는 Dockerfile로 빌드하면 빌드 명령이 실패해요:

$ docker build -t docker/trusttest:testing .
unable to process Dockerfile: No trust data for notrust

더 알아보기 (Learn more)