docker trust sign 명령어를 사용하여 이미지 서명하는 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker trust sign 명령을 사용하여 Docker 이미지를 안전하게 사용하는 방법을 배우게 됩니다. 먼저 서명하기 전에 서명되지 않은 이미지를 검사하여 특성을 이해하는 것으로 시작합니다. 그런 다음, 리포지토리 관리자로서 이미지 태그에 서명하고, 진위 여부를 확인한 다음, 서명을 검증하는 연습을 할 것입니다. 마지막으로, 지정된 서명자로서 태그를 서명하고 검증하는 과정을 탐구하여 Docker Content Trust 의 협업적인 특성을 보여줄 것입니다.

서명되지 않은 이미지 검사

이 단계에서는 서명되지 않은 Docker 이미지를 검사하는 방법을 배우겠습니다. Docker Content Trust 는 Docker 이미지의 무결성과 진위 여부를 확인하는 방법을 제공합니다. 하지만 모든 이미지가 서명되는 것은 아닙니다. 서명되지 않은 이미지를 검사하면 서명 및 검증 개념을 자세히 살펴보기 전에 이미지에 대한 기본 정보를 이해하는 데 도움이 됩니다.

먼저, Docker 레지스트리에서 서명되지 않은 이미지를 가져와야 합니다. 기본적으로 서명되지 않는 hello-world 이미지를 사용하겠습니다.

docker pull hello-world

이 명령은 hello-world 이미지를 Docker Hub 레지스트리에서 로컬 머신으로 다운로드합니다. 다운로드 진행 상황과 완료를 나타내는 출력을 볼 수 있습니다.

다음으로, docker inspect 명령을 사용하여 가져온 이미지를 검사합니다. 이 명령은 이미지, 컨테이너, 볼륨 및 네트워크를 포함한 Docker 객체에 대한 자세한 정보를 제공합니다.

docker inspect hello-world

이 명령의 출력은 hello-world 이미지에 대한 다양한 세부 정보를 포함하는 큰 JSON 문서가 됩니다. 이 출력을 검사하여 이미지 ID, 생성 날짜, 아키텍처, 운영 체제 및 구성을 포함한 정보를 확인할 수 있습니다.

이 이미지는 서명되지 않았으므로 docker inspect 명령의 출력에서 서명 또는 신뢰와 관련된 정보를 찾을 수 없습니다. 이것이 Docker Content Trust 관점에서 볼 때 서명되지 않은 이미지의 주요 특징입니다.

리포지토리 관리자 권한으로 태그 서명

이 단계에서는 리포지토리 관리자로서 Docker 이미지 태그에 서명하는 방법을 배우겠습니다. Docker Content Trust 는 디지털 서명을 사용하여 가져오는 이미지가 게시자가 의도한 것과 정확히 일치하는지 확인합니다. 리포지토리 관리자로서 이미지 태그에 서명하여 진위 여부를 주장할 수 있는 권한이 있습니다.

이미지에 서명하기 전에 Docker Content Trust 를 활성화해야 합니다. 이는 DOCKER_CONTENT_TRUST 환경 변수를 1로 설정하여 수행합니다.

export DOCKER_CONTENT_TRUST=1

이 명령은 현재 터미널 세션에서 후속 Docker 명령에 대한 콘텐츠 신뢰를 활성화합니다.

이제 이전 단계에서 가져온 hello-world 이미지에 리포지토리 이름을 포함하는 새 태그를 지정해 보겠습니다. 자리 표시자 리포지토리 이름 your_docker_username/my-signed-image를 사용합니다. your_docker_username을 실제 Docker Hub 사용자 이름으로 바꾸거나, 이 랩에서는 labexuser를 사용하십시오.

docker tag hello-world labexuser/my-signed-image:latest

이 명령은 hello-world와 동일한 이미지를 가리키는 새 태그 labexuser/my-signed-image:latest를 생성합니다.

이제 이 태그가 지정된 이미지를 레지스트리로 푸시합니다. Docker Content Trust 가 활성화되면 서명되지 않은 이미지 태그를 푸시하면 서명하라는 메시지가 표시됩니다.

docker push labexuser/my-signed-image:latest

이 명령을 실행하면 Docker 에서 새 서명 키를 생성하거나 기존 키를 사용하라는 메시지가 표시됩니다. 처음 서명하는 경우 새 키를 생성하라는 메시지가 표시됩니다. 새 키에 대한 암호를 제공해야 합니다. 이 암호를 기억하십시오. 나중에 다른 이미지에 서명하거나 키를 순환할 때 필요합니다.

암호를 입력하고 확인한 후 Docker 는 이미지 태그에 서명하고 레지스트리로 푸시합니다. 서명 프로세스와 성공적인 푸시를 나타내는 출력을 볼 수 있습니다.

리포지토리 관리자 권한으로 서명 검증

이 단계에서는 이전 단계에서 서명한 이미지 태그의 서명을 검증합니다. 리포지토리 관리자는 Docker Content Trust 를 사용하여 가져오는 이미지가 자신이 서명한 이미지인지 확인할 수 있습니다.

먼저 Docker Content Trust 가 여전히 활성화되어 있는지 확인합니다. 새 터미널 세션을 연 경우 환경 변수를 다시 설정해야 할 수 있습니다.

export DOCKER_CONTENT_TRUST=1

이제 서명된 이미지 태그를 가져오려고 시도합니다. Docker Content Trust 가 활성화되어 있으므로 Docker 는 이미지를 가져오기 전에 서명을 검증합니다.

docker pull labexuser/my-signed-image:latest

이 명령을 실행하면 Docker 는 labexuser/my-signed-image:latest 태그에 대한 유효한 서명을 확인합니다. 서명이 유효하고 신뢰할 수 있는 경우 이미지가 가져와집니다. 이미지가 가져와지고 서명이 검증되고 있음을 나타내는 출력을 볼 수 있습니다. 출력에는 "Verifying trust data for"가 명시적으로 언급됩니다.

서명이 유효하지 않거나 누락된 경우 (그리고 콘텐츠 신뢰가 활성화된 경우) 가져오기 작업이 실패하여 잠재적으로 손상된 이미지를 사용하는 것을 방지합니다.

이미지와 관련된 신뢰 정보를 자세히 검사하려면 docker trust inspect 명령을 사용할 수 있습니다.

docker trust inspect labexuser/my-signed-image:latest

이 명령은 지정된 이미지 태그와 관련된 서명에 대한 자세한 정보를 표시합니다. 서명자 및 서명된 태그에 대한 정보를 볼 수 있습니다. 이 출력은 이미지 태그가 성공적으로 서명되었고 서명이 Docker Content Trust 에 의해 인식되었음을 확인합니다.

서명자 권한으로 태그 서명

이 단계에서는 지정된 "서명자 (signer)"가 Docker 이미지 태그에 서명하는 방법을 살펴봅니다. 실제 시나리오에서는 리포지토리에 여러 서명자가 있을 수 있으며, 각 서명자는 특정 태그 또는 릴리스를 서명하는 역할을 합니다. 이를 통해 보다 분산되고 안전한 서명 프로세스를 수행할 수 있습니다.

먼저 Docker Content Trust 가 활성화되어 있는지 확인합니다.

export DOCKER_CONTENT_TRUST=1

이제 이미지에 대한 새 태그를 생성하여 서명자가 담당할 수 있는 다른 버전 또는 릴리스를 시뮬레이션해 보겠습니다.

docker tag labexuser/my-signed-image:latest labexuser/my-signed-image:v1.0.0

이렇게 하면 동일한 이미지를 가리키는 새 태그 labexuser/my-signed-image:v1.0.0이 생성됩니다.

다른 "서명자"로 이 새 태그에 서명하려면 docker trust sign 명령을 사용합니다. 이 명령을 사용하면 특정 키로 특정 태그에 명시적으로 서명할 수 있습니다.

docker trust sign labexuser/my-signed-image:v1.0.0

이 명령을 실행하면 Docker 는 사용하려는 서명 키의 암호를 묻습니다. 2 단계에서 생성된 동일한 키를 사용하는 경우 해당 암호를 입력합니다. 다른 키를 가진 다른 서명자인 경우 해당 키의 암호를 사용합니다.

암호를 성공적으로 입력하면 Docker 는 labexuser/my-signed-image:v1.0.0 태그에 서명합니다. 서명 프로세스를 확인하는 출력을 볼 수 있습니다.

마지막으로 업데이트된 신뢰 데이터를 레지스트리로 푸시해야 합니다. 서명된 태그에 대한 docker push 명령에는 새 서명 정보가 포함됩니다.

docker push labexuser/my-signed-image:v1.0.0

이 명령은 v1.0.0 태그를 관련 서명과 함께 레지스트리로 푸시합니다.

서명자 권한으로 서명 검증

이 마지막 단계에서는 이전 단계에서 "서명자"로 서명한 v1.0.0 이미지 태그의 서명을 검증합니다. 이는 Docker Content Trust 가 활성화된 모든 사용자가 신뢰할 수 있는 서명자가 서명한 이미지의 진위 여부를 확인할 수 있는 방법을 보여줍니다.

먼저 Docker Content Trust 가 활성화되어 있는지 확인합니다.

export DOCKER_CONTENT_TRUST=1

이제 v1.0.0 이미지 태그를 가져오려고 시도해 보겠습니다. Content Trust 가 활성화되어 있으므로 Docker 는 이 태그와 관련된 서명을 검증합니다.

docker pull labexuser/my-signed-image:v1.0.0

3 단계의 검증과 유사하게 Docker 가 이미지에 대한 신뢰 데이터를 검증한 다음 가져오고 있음을 나타내는 출력을 볼 수 있습니다. 이는 서명자로서 적용한 서명이 유효하고 인식되었음을 확인합니다.

서명 정보를 추가로 확인하려면 다시 docker trust inspect 명령을 사용할 수 있습니다.

docker trust inspect labexuser/my-signed-image:v1.0.0

이 명령의 출력은 v1.0.0 태그의 서명자를 표시합니다. 이전 단계에서 사용한 서명자의 키 정보가 여기에 나열되어야 합니다. 이는 태그가 신뢰할 수 있는 엔티티에 의해 서명되었음을 구체적으로 보여줍니다.

이것으로 Docker Content Trust 를 사용하여 Docker 이미지 태그를 서명하고 검증하는 방법에 대한 탐구를 마칩니다. 콘텐츠 신뢰를 활성화하고 서명 키를 사용하면 사용하는 이미지의 무결성과 진위 여부를 보장하여 컨테이너 워크플로우의 보안을 크게 향상시킬 수 있습니다.

요약

이 랩에서는 먼저 서명되지 않은 이미지를 검사하여 기본 정보와 서명 세부 정보의 부재를 이해함으로써 Docker Content Trust 를 사용하는 방법을 배웠습니다. 그런 다음, 콘텐츠 신뢰를 활성화하고 docker trust sign 명령을 사용하여 이미지의 진위 여부를 주장하는 과정을 포함하는, 리포지토리 관리자로서 Docker 이미지 태그에 서명하는 과정을 살펴보았습니다.

서명 프로세스에 따라 이미지의 무결성을 보장하기 위해 리포지토리 관리자로서 서명을 검증하는 방법을 배웠습니다. 또한 지정된 서명자로서 태그에 서명하는 연습을 통해 리포지토리 내에서 서명 권한의 위임을 시연했습니다. 마지막으로, 서명자로서 서명을 검증하여 위임된 서명의 성공적인 적용 및 검증을 확인했습니다.