docker trust signer remove 명령을 사용하여 서명자 제거 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker trust signer remove 명령을 사용하여 Docker 레지스트리 (repository) 의 서명자를 관리하는 방법을 배우게 됩니다. 먼저, 기존 신뢰 관계를 이해하기 위해 레지스트리의 현재 서명자를 검사하는 것으로 시작합니다.

검사 후, 단일 레지스트리에서 서명자를 제거하는 연습을 하고 성공적인 제거를 확인합니다. 마지막으로, 여러 레지스트리에서 동시에 서명자를 제거하는 방법과 변경 사항을 확인하는 방법을 배우게 됩니다. 이 랩은 Docker 에서 콘텐츠 신뢰를 관리하는 실질적인 경험을 제공합니다.

레지스트리의 현재 서명자 검사

이 단계에서는 Docker 레지스트리의 현재 서명자를 검사하는 방법을 배우게 됩니다. Docker Content Trust 를 사용하면 사용하는 모든 이미지의 무결성과 게시자를 확인할 수 있습니다. 콘텐츠 신뢰가 활성화되면 Docker 는 가져오는 이미지가 서명되었는지 확인합니다.

먼저, Docker Content Trust 를 활성화해 보겠습니다. DOCKER_CONTENT_TRUST 환경 변수를 1로 설정하여 이 작업을 수행할 수 있습니다.

export DOCKER_CONTENT_TRUST=1

이제 콘텐츠 신뢰가 활성화되었으므로 이미지를 조작할 때 Docker 는 서명을 확인합니다. 레지스트리의 서명자를 검사하려면 docker trust inspect 명령을 사용하고 그 뒤에 레지스트리 이름을 입력합니다.

ubuntu 레지스트리의 서명자를 검사해 보겠습니다.

docker trust inspect ubuntu

다음과 유사한 출력이 표시되어 서명자와 해당 키가 표시됩니다.

No signatures for ubuntu

이 출력은 현재 ubuntu 레지스트리에 서명이 없음을 나타냅니다. 콘텐츠 신뢰 및 서명을 명시적으로 활성화하지 않은 경우 많은 공식 이미지에서 예상되는 결과입니다.

docker/trusttest와 같이 서명이 있는 것으로 알려진 레지스트리를 검사해 보겠습니다. 필요한 메타데이터가 있는지 확인하기 위해 먼저 이미지를 가져와야 합니다.

docker pull docker/trusttest

이제 docker/trusttest의 서명자를 검사합니다.

docker trust inspect docker/trusttest

이 레지스트리가 서명되었음을 나타내는 서명자와 해당 키가 나열된 출력이 표시됩니다. 출력에는 TargetsReleases 서명자에 대한 정보가 표시됩니다.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Releases     0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

이 출력은 docker/trusttest 레지스트리가 서명되었음을 확인하고 서명자와 관련된 키를 나열합니다.

단일 레지스트리에서 서명자 제거

이 단계에서는 Docker Content Trust 를 사용하여 단일 Docker 레지스트리에서 서명자를 제거하는 방법을 배우게 됩니다. 이는 서명자의 키가 손상되었거나 사용자가 특정 레지스트리에 대한 이미지 서명을 더 이상 권한이 없는 경우에 유용합니다.

서명자를 제거하려면 docker trust signer remove 명령을 사용합니다. 이 명령은 제거할 서명자의 이름과 제거할 레지스트리를 필요로 합니다.

docker/trusttest 레지스트리에서 Releases 서명자를 제거해 보겠습니다. 이전 단계에서 docker/trusttestReleases 서명자가 있다는 것을 기억하십시오.

docker trust signer remove Releases docker/trusttest

이 명령을 실행하면 제거를 확인하라는 메시지가 표시됩니다. y를 입력하고 Enter 키를 눌러 진행합니다.

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y

확인 후, 서명자는 지정된 레지스트리에서 제거됩니다. 성공적인 제거를 나타내는 출력이 표시되어야 합니다.

Successfully removed signer "Releases" from docker/trusttest

이 명령은 공증 서버에 저장된 신뢰 데이터에서 Releases 서명자의 공개 키와 docker/trusttest 레지스트리의 연결을 제거합니다. 서명자의 키 자체를 삭제하는 것이 아니라, 이 특정 레지스트리에 대한 서명 권한만 삭제합니다.

서명자 제거 확인

이 단계에서는 서명자가 레지스트리에서 성공적으로 제거되었는지 확인합니다. 첫 번째 단계에서 했던 것처럼 docker trust inspect 명령을 다시 사용하여 이 작업을 수행할 수 있습니다.

이전 단계에서 docker/trusttest에서 Releases 서명자를 제거한 후, docker trust inspect docker/trusttest를 실행하면 더 이상 Releases가 서명자로 표시되지 않아야 합니다.

docker/trusttest의 서명자를 다시 검사해 보겠습니다.

docker trust inspect docker/trusttest

출력을 주의 깊게 살펴보십시오. 이제 docker/trusttestSigners 섹션 아래에 Releases 서명자가 더 이상 나열되지 않는 것을 확인할 수 있습니다.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Releases 서명자가 권한 있는 Signers 목록에서 제거되었지만, Signatures 섹션에는 여전히 Releases에 의해 생성된 서명이 표시될 수 있습니다. 이는 remove 명령이 서명자가 향후 이미지를 서명할 수 있는 권한을 제거하지만, 기존 서명을 공증 서버에서 즉시 제거하지 않기 때문입니다. 그러나 레지스트리에 대한 서명자의 역할 제거를 확인하기 위해 Signers 목록을 확인하는 것으로 충분합니다.

Signers of docker/trusttest 섹션 아래에 Releases가 없다는 것은 이 특정 레지스트리에서 서명자가 성공적으로 제거되었음을 확인합니다.

여러 레지스트리에서 서명자 제거

이 단계에서는 Docker Content Trust 를 사용하여 여러 Docker 레지스트리에서 동시에 서명자를 제거하는 방법을 배우게 됩니다. 이는 여러 레지스트리에서 서명자의 권한을 해제해야 할 때 효율적입니다.

docker trust signer remove 명령을 사용하면 서명자 이름 뒤에 여러 레지스트리를 지정할 수 있습니다.

docker/another-trusttest와 같이 Releases 서명자도 있는 다른 레지스트리가 있다고 가정해 보겠습니다. docker/trusttestdocker/another-trusttest 모두에서 Releases 서명자를 한 번의 명령으로 제거하려면 두 레지스트리 이름을 모두 나열합니다.

먼저, 시연 목적으로 두 번째 레지토리로 사용할 hello-world 이미지를 가져오겠습니다. 그런 다음 다른 레지스트리를 시뮬레이션하기 위해 태그를 지정합니다.

docker pull hello-world
docker tag hello-world docker/another-trusttest

이제 docker/trusttestdocker/another-trusttest 모두에서 Releases 서명자를 제거해 보겠습니다. 실제 시나리오에서는 docker/another-trusttest에 실제로 Releases 서명자가 없을 수 있지만, 이 명령은 여러 레지스트리에서 서명자를 제거하는 구문을 보여줍니다.

docker trust signer remove Releases docker/trusttest docker/another-trusttest

각 레지스트리에 대한 제거를 확인하라는 메시지가 표시됩니다. 각 확인에 대해 y를 입력하고 Enter 키를 누릅니다.

Removing signer "Releases" from docker/trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/trusttest
Removing signer "Releases" from docker/another-trusttest. Are you sure you want to continue? (y/n): y
Successfully removed signer "Releases" from docker/another-trusttest

출력은 Releases 서명자가 지정된 두 레지스트리에서 제거되었음을 확인합니다. 이 명령은 단일 작업으로 여러 레지스트리에서 서명자 권한을 관리하는 편리한 방법입니다.

여러 레지스트리에서 서명자 제거 확인

이 단계에서는 이전 단계에서 지정된 두 레지스트리에서 서명자가 성공적으로 제거되었는지 확인합니다. 각 레지스트리에 대해 다시 docker trust inspect 명령을 사용합니다.

먼저, docker/trusttest의 서명자를 검사해 보겠습니다. 이전 단계에서 Releases 서명자를 제거하고 제거를 확인했으므로, Signers 목록에서 Releases 서명자가 여전히 없는 상태일 것으로 예상합니다.

docker trust inspect docker/trusttest

출력은 ReleasesSigners of docker/trusttest 아래에 나열되지 않음을 보여줍니다.

Signers of docker/trusttest:

ROLE         KEYS
----         ----
Targets      0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

Signatures for docker/trusttest:

SIGNER     KEYS
------     ----
Releases   0a0d52c692a8b3459f3422732222222222222222222222222222222222222222: docker/trusttest

이제 docker/another-trusttest의 서명자를 검사해 보겠습니다. 이 레지스트리에서도 Releases 서명자를 제거하려고 시도했으므로, 이 레지스트리의 Signers 목록에서도 해당 서명자가 없을 것으로 예상합니다.

docker trust inspect docker/another-trusttest

docker/another-trusttest에 대한 출력은 서명자가 없음을 나타내야 합니다. 이는 hello-world (을 docker/another-trusttest로 태그 지정) 가 기본적으로 서명되지 않았고, Releases 서명자를 제거하려고 시도했기 때문입니다 (처음에는 이 특정 태그에 없었습니다).

No signatures for docker/another-trusttest

이는 여러 레지스트리 이름과 함께 사용될 때 docker trust signer remove 명령이 나열된 각 레지스트리에서 지정된 서명자를 제거하려고 시도함을 확인합니다. docker/trusttest에 대한 확인은 이전에 서명자가 있었던 레지스트리에서 성공적인 제거를 보여주고, docker/another-trusttest에 대한 확인은 서명자가 없었던 레지스트리의 상태를 보여줍니다 (따라서 제거 시도가 서명자를 추가하지 않았습니다).

요약

이 랩에서는 docker trust 명령을 사용하여 Docker 레지스트리에 대한 서명자를 관리하는 방법을 배웠습니다. 먼저 Docker Content Trust 를 활성화하고 docker trust inspect를 사용하여 레지스트리의 현재 서명자를 검사하는 것으로 시작했습니다. 이를 통해 주어진 레지스트리에서 이미지를 서명하는 데 연결된 키를 확인할 수 있었습니다.

이어서, 단일 레지스트리에서 서명자를 제거하는 연습을 하고 docker trust inspect를 다시 사용하여 제거를 확인했습니다. 마지막으로, 이 지식을 확장하여 여러 레지스트리에서 동시에 서명자를 제거하고 지정된 모든 레지스트리에서 성공적인 제거를 확인했습니다. 이 실습 경험은 Docker 환경 내에서 콘텐츠 신뢰를 관리하기 위한 docker trust signer remove 명령의 실제 적용을 보여주었습니다.