다음을 통해 공유


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 신뢰 저장소에 있는 위임 프라이빗 키를 잡고 Pipelines에서 보안 파일 과 동일하게 추가합니다.

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

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

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