Kepercayaan Konten Docker

Azure DevOps

Docker Content Trust (DCT) memungkinkan Anda menggunakan tanda tangan digital untuk data yang dikirim dan diterima dari pendaftar Docker jarak jauh. Tanda tangan ini memungkinkan verifikasi sisi klien atau runtime integritas dan penerbit tag gambar tertentu.

Catatan

Prasyarat untuk menandatangani gambar adalah Docker Registry dengan server Notaris yang dilampirkan (contoh termasuk Docker Hub atau Azure Container Registry)

Menandatangani gambar di Azure Pipelines

Prasyarat pada mesin pengembangan

  1. Gunakan generator bawaan Docker trust atau buat pasangan kunci delegasi secara manual. Jika generator bawaan digunakan, kunci pribadi delegasi diimpor ke toko kepercayaan Docker lokal. Lain, kunci pribadi perlu diimpor secara manual ke toko kepercayaan Docker lokal. Lihat Membuat Kunci Secara Manual untuk detailnya.
  2. Menggunakan kunci delegasi yang dihasilkan dari langkah di atas, unggah kunci pertama ke delegasi dan mulai repositori

Tip

Untuk melihat daftar kunci Delegasi lokal, gunakan NOTARY CLI untuk menjalankan perintah berikut: $ notary key list.

Menyiapkan alur untuk menandatangani gambar

  1. Ambil kunci pribadi delegasi, yang ada di toko kepercayaan Docker lokal dari mesin pengembangan Anda yang digunakan sebelumnya, dan tambahkan yang sama dengan file aman di Pipelines.

  2. Otorisasi file aman ini untuk digunakan di semua alur.

  3. Perwakilan layanan yang terkait dengan containerRegistryServiceConnection harus memiliki peran AcrImageSigner dalam registri kontainer target.

  4. Buat alur berdasarkan cuplikan YAML berikut:

    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)
    

    Dalam contoh sebelumnya, DOCKER_CONFIG variabel diatur oleh login perintah dalam tugas Docker. Sebaiknya Siapkan DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE sebagai variabel rahasia untuk alur Anda. Pendekatan alternatif menggunakan variabel alur di YAML mengekspos frasa sandi dalam teks biasa. Kita hanya perlu frasa sandi repositori dalam contoh ini karena repositori telah dimulai (prasyarat).