다음을 통해 공유


Docker 콘텐츠 신뢰

Azure DevOps Services

DCT(Docker Content Trust)를 사용하면 원격 Docker 레지스트리에서 보내고 받는 데이터에 디지털 서명을 사용할 수 있습니다. 이러한 서명을 통해 클라이언트 쪽 또는 런타임에 특정 이미지 태그의 무결성 및 게시자를 확인할 수 있습니다.

비고

이미지에 서명하려면 연결된 공증 서버가 있는 Docker 레지스트리가 필요합니다(예: Docker Hub 또는 Azure Container Registry 포함).

Azure Pipelines에서 이미지 서명

개발 머신의 필수 구성 요소

  1. Docker 트러스트의 기본 제공 생성기를 사용하거나 위임 키 쌍을 수동으로 생성합니다. 기본 제공 생성기를 사용하는 경우 위임 프라이빗 키를 로컬 Docker 트러스트 저장소로 가져옵니다. 그렇지 않으면 프라이빗 키를 로컬 Docker 트러스트 저장소로 수동으로 가져와야 합니다. 자세한 내용은 수동으로 키 생성을 참조하세요 .
  2. 이전 단계에서 생성된 위임 키를 사용하여 위임에 첫 번째 키를 업로드하고 리포지토리를 시작합니다.

팁 (조언)

로컬 위임 키 목록을 보려면 공증 CLI를 사용하여 다음 명령을 $ notary key list실행합니다.

이미지 서명 파이프라인 설정

  1. 개발 머신의 로컬 Docker 트러스트 저장소에서 위임 프라이빗 키를 가져와 파이프라인에 보안 파일 로 추가합니다.

  2. 모든 파이프라인에서 사용할 수 있는 이 보안 파일에 권한을 부여합니다.

  3. 연결된 containerRegistryServiceConnection 서비스 주체는 대상 컨테이너 레지스트리에 AcrImageSigner 역할이 있어야 합니다.

  4. 다음 YAML 코드 조각을 기반으로 파이프라인을 만듭니다.

    pool:
      vmImage: 'ubuntu-latest'
    
    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)
    
     - task: Docker@2
       inputs:
         command: push
         containerRegistry: $(containerRegistryServiceConnection)
         repository: $(imageRepository)
         tags: |
           $(tag)
       env:
         DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: $(DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE)
         DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE: $(rootPassphrase)
    

    이전 예제 DOCKER_CONFIG 에서 변수는 Docker 태스크의 login 명령에 의해 설정됩니다. DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASEDOCKER_CONTENT_TRUST_ROOT_PASSPHRASE을(를) 파이프라인의 비밀 변수로 설정합니다.

    DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE 이 예제에서는 프라이빗 키의 암호(리포지토리 암호 아님)를 참조합니다. 리포지토리가 이미 시작되었기 때문에 이 예제에서는 프라이빗 키의 암호만 필요합니다(필수 구성 요소).