Docker 콘텐츠 신뢰
Azure DevOps Services
DCT(Docker Content Trust)를 사용하면 원격 Docker 레지스트리에서 보내고 받는 데이터에 디지털 서명을 사용할 수 있습니다. 이러한 서명을 사용하면 클라이언트 쪽 또는 런타임에서 특정 이미지 태그의 무결성 및 게시자를 검증할 수 있습니다.
참고
이미지 서명의 필수 조건은 공증 서버가 연결된 Docker 레지스트리입니다(예: Docker Hub 또는 Azure Container Registry 포함).
Azure Pipelines에서 이미지 서명
개발 머신의 필수 구성 요소
- Docker 트러스트의 기본 제공 생성기를 사용하거나 위임 키 쌍을 수동으로 생성합니다. 기본 제공 생성기를 사용하는 경우 위임 프라이빗 키를 로컬 Docker 트러스트 저장소로 가져옵니다. 그렇지 않으면 프라이빗 키를 로컬 Docker 트러스트 저장소로 수동으로 가져와야 합니다. 자세한 내용은 수동으로 키 생성을 참조하세요.
- 위의 단계에서 생성된 위임 키를 사용하여 위임에 첫 번째 키를 업로드하고 리포지토리를 시작합니다.
팁
로컬 위임 키 목록을 보려면 공증 CLI를 사용하여 명령을 $ notary key list
실행합니다.
이미지 서명 파이프라인 설정
이전에 사용한 개발 머신의 로컬 Docker 신뢰 저장소에 있는 위임 프라이빗 키를 잡고 Pipelines에서 보안 파일 과 동일하게 추가합니다.
모든 파이프라인에서 사용할 수 있는 이 보안 파일에 권한을 부여합니다.
연결된
containerRegistryServiceConnection
서비스 주체는 대상 컨테이너 레지스트리에 AcrImageSigner 역할이 있어야 합니다.다음 YAML 코드 조각을 기반으로 파이프라인을 만듭니다.
pool: vmImage: 'Ubuntu 16.04' variables: system.debug: true containerRegistryServiceConnection: serviceConnectionName imageRepository: foobar/content-trust tag: test steps: - task: Docker@2 inputs: command: login containerRegistry: $(containerRegistryServiceConnection) - task: DownloadSecureFile@1 name: privateKey inputs: secureFile: cc8f3c6f998bee63fefaaabc5a2202eab06867b83f491813326481f56a95466f.key - script: | mkdir -p $(DOCKER_CONFIG)/trust/private cp $(privateKey.secureFilePath) $(DOCKER_CONFIG)/trust/private - task: Docker@2 inputs: command: build Dockerfile: '**/Dockerfile' containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) arguments: '--disable-content-trust=false' - task: Docker@2 inputs: command: push containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) arguments: '--disable-content-trust=false' env: DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: $(DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE)
이전 예제
DOCKER_CONFIG
에서 변수는 Docker 태스크의login
명령에 의해 설정됩니다. 파이프라인에 대한 비밀 변수로 설정하는DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
것이 좋습니다. YAML에서 파이프라인 변수를 사용하는 다른 방법은 암호를 일반 텍스트로 노출합니다.DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
이 예제에서는 프라이빗 키의 암호를 참조합니다(리포지토리 암호 아님). 리포지토리가 이미 시작되었기 때문에 이 예제에서는 프라이빗 키의 암호만 필요합니다(필수 구성 요소).