Kepercayaan Konten Docker

Azure DevOps

Docker Content Trust (DCT) memungkinkan Anda menggunakan tanda tangan digital untuk data yang dikirim dan diterima dari registri 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 terpasang (contohnya termasuk Docker Hub atau Azure Container Registry)

Menandatangani gambar di Azure Pipelines

Prasyarat pada mesin pengembangan

  1. Gunakan generator bawaan kepercayaan Docker atau buat pasangan kunci delegasi secara manual. Jika generator bawaan digunakan, kunci privat delegasi diimpor ke penyimpanan kepercayaan Docker lokal. Jika tidak, kunci privat harus diimpor secara manual ke penyimpanan 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 privat delegasi, yang ada di penyimpanan kepercayaan Docker lokal dari komputer pengembangan Anda yang digunakan sebelumnya, dan tambahkan yang sama dengan file aman di Alur.

  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. Kami menyarankan agar Anda menyiapkan DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE sebagai variabel rahasia untuk alur Anda. Pendekatan alternatif menggunakan variabel alur di YAML mengekspos frasa sandi dalam teks biasa. DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE dalam contoh ini mengacu pada frasa sandi kunci privat (bukan frase sandi repositori). Kita hanya memerlukan frasa sandi kunci privat dalam contoh ini karena repositori telah dimulai (prasyarat).