DCT를 사용해서 Docker Hub에 서명된 Trust Image Push 하기
[Container image 인증 관련 글 목록]
Docker Notary : Docker Content Trust (DCT)
DCT를 사용해서 Dcoker Hub에 서명된 Trust Image Push 하기
Notary와 DCT를 사용해서 Private Registry에 서명된 Trust Image Push하기
개인 인증서를 사용해서 Notary Service 구동
kubernetes image인증 - Portieris
미리 Pull 받아놓았던 nginx 이미지를 서명해서
Private Registry 에 Push 하겠음.
Docker Hub 에 login
[명령어]
docker login [Docker Hub ID]
DCT 사용 설정
[명령어]
export DOCKER_CONTENT_TRUST=1
Image tag 설정
Private Registry 에 Push 해야해서
Image Tag 를 변경 작업을 해야함.
[명령어]
docker tag [대상 image id] [Docker Hub ID]/nginx_iksoon:1.0.0
Docker Hub 로 Image Push
[명령어]
docker push [Image]
DCT를 Enable 한 후
처음으로 Docker Hub로 Push 하면 root key를 생성함.
여기서의 Root Key는 Notary에서 설명했던 Root Key를 의미함
한번 최초로 생성한 이후로는 처음 생성한 password를 계속 사용하게 됨.
Docker Hub에 있는 Image의 상세 내용 조회
[명령어]
docker trust inspect --pretty docker.io/[docker hub id]/[image name]
서명이 되어있는 image의 경우 아래와 같이
Image의 SIGNERS(서명자)가 해당 Repository의 관리자라고 나오는 것을 확인할 수 있고
Repository Key와 Root Key 정보를 확인할 수 있음
서명이 안된 일반 image 의 경우
아래와 같이 나옴
Docker Hub에 Push한 서명된 Image Pull Test
DCT 가 Enable 되어있는 상태라서
아래와 같이 서명이 안되있는 image는 pull 해오지 못함
방금전에 서명해서 올린 image pull test를 진행하기 위해
기존의 동일한 image를 삭제하고 다시 pull 해봄
[결과]
정상적으로 pull 받아옴
권한을 위임받은 사용자 Delegation Key 생성하기
상위는 repository의 관리자가 image를 서명하고 push 한 것이고
이번에는 권한을 위임받아서 image를 서명하는 절차를 알아보겠음
[Delegation Key 생성 명령어]
docker trust key generate user_iksoon
상위 Notary service 에서 설명했던 Delegation Key 를 생성
[생성한 공개키 확인]
상위 명령 결과에 나와있는 경로에 생성이 됨
예제에서는 /var/lib/docker/user_iksoon.pub
[생성한 개인키 확인]
개인키가 생성되는 default 경로 : /root/.docker/trust/private
확인해보면
role : root
role : target
개인키와
이번에 생성한 user_iksoon 의 개인키가 있음
Delegation Key를 Repository 에 등록하기
[명령어]
docker trust signer add --key [생성된 delegation 공개키 경로] [delegation key 이름] docker.io/[Repository 이름]
예)docker trust signer add --key user_iksoon.pub user_iksoon docker.io/peksoon/nginx_iksoon
권한을 위임받은 사용자가 image 서명해서 push 하기
먼저 이전에 push 한 image와 중복이 되지 않게
tag를 1.0.1로 동일한 image 생성
해당 image 를 docker push 해보기
이제부터는 user_iksoon로 sign 하는것을 확인 할 수 있음
[push 한 이미지 상세조회 결과]
SIGNERS = user_iksoon
으로 되어있는것을 확인할 수 있음
권한을 위임받은 사용자를 삭제해보기
delegation key로 생성했던 user_iksoon 을
Repository 에서 삭제하기
[명령어]
docker trust signer remove user_iksoon peksoon/nginx_iksoon
[pull 결과]
Repository에서 user_iksoon 권한을 삭제 한 후
user_iksoon 으로 서명해서 push 했던 image를 pull 해보면
서명과 일치하지 않는 이미지라고 오류가 발생하며 image가 pull 되지 않음
[push 결과]
Repository에 user_iksoon 권한을 삭제 한 후 push 해보면
아래와 같이 no valid singing keys 라며 서명에 실패함.
하지만 Repository 에 image는 push 되어있음
해당 image는 서명이 안되어 있어서 DCT사용 시 pull 받지 못함
결과 정리
push 할때 개인키로 서명해서 push를 하고
Repository 에 해당 개인키에 대한 공개키를 가지고 있어서
개인키를 공개키로 검증을 함.
DCT를 통해서 생성된 Notary Key 값들은
~/.docker/trust/tuf/ 경로에 생성되어있음
제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!
참고
[DCT]
https://docs.docker.com/notary/
https://docs.docker.com/engine/security/trust/content_trust/
https://docs.docker.com/notary/running_a_service/
https://pjh3749.tistory.com/253
https://gruuuuu.github.io/cloud/docker-notary2/#
https://cloud.ibm.com/docs/Registry?topic=Registry-registry_trustedcontent&locale=ko
https://docs.docker.com/engine/reference/commandline/trust_inspect/
https://help.sonatype.com/repomanager3/formats/docker-registry/docker-content-trust
'클라우드 > Docker' 카테고리의 다른 글
14. 개인 인증서를 사용해서 Notary Service 구동 (0) | 2020.11.08 |
---|---|
13. Notary와 DCT를 사용해서 Private Registry에 서명된 Trust Image Push 하기 (3) | 2020.11.08 |
11. Docker Notary : Docker Content Trust ( DCT ) (3) | 2020.11.08 |
10. Notary Service 란? (0) | 2020.11.08 |
09. Docker Version Update (0) | 2020.09.21 |