Sebagian besar gambar Docker didistribusikan tanpa verifikasi apa pun yang mereka klaim. Anda dapat meningkatkan kepercayaan pada gambar Anda dengan menandatanganinya secara digital. Ini membuktikan kepada pengguna bahwa Anda memublikasikan gambar, bukan penipu.
Sistem penandatanganan Docker dikenal sebagai kepercayaan konten. Itu terungkap melalui docker trust
perintah CLI. Content Trust menggunakan kumpulan kunci untuk memungkinkan registry memverifikasi identitas calon penerbit. Pengguna gambar yang ditandatangani dapat yakin bahwa gambar tersebut berasal dari sumber yang diharapkan.
Membuat Kunci
Anda memerlukan pasangan kunci untuk mulai menggunakan Content Trust. Pasangan kunci dapat dikeluarkan oleh otoritas sertifikat atau dihasilkan oleh CLI Docker.
Jalankan docker trust key generate your-name
untuk membuat kunci. Anda akan diminta untuk memasukkan frasa sandi. Ini perlu diberikan setiap kali Anda menggunakan kunci untuk menandatangani atau memverifikasi gambar. Tekan enter pada setiap prompt untuk melanjutkan.
Setelah selesai, dua file akan dibuat di ~/.docker/trust
:kunci pribadi dan kunci publik yang sesuai. Sama halnya dengan kunci SSH, kunci pribadi tidak boleh dibagikan dan tidak boleh hilang. Jika Anda perlu berpindah antar mesin, Anda dapat mengimpor file kunci pribadi ke instalasi Docker lain menggunakan docker trust key load my-key.pem
.
Menambahkan Kunci Publik Anda ke Registri Anda
Docker Hub mendukung semua fitur docker trust
. Jika Anda menggunakan server Docker Registry pribadi, diperlukan proses penyiapan yang lebih rumit.
Server Registry tidak menawarkan dukungan tanda tangan bawaan. Anda memerlukan layanan Docker Notary terpisah yang menangani verifikasi tanda tangan untuk push dan pull gambar. Notaris memiliki tiga komponen, server, layanan penandatanganan, dan database MySQL. Itu harus diterapkan pada URL yang sama dengan server registri Anda.
Anda dapat mengaktifkan dan menjalankan Notaris dengan menggunakan file Docker Compose-nya:
git clone https://github.com/theupdateframework/notary.git
docker-compose up -d
Penerapan dasar ini akan berjalan dengan sertifikat TLS yang ditandatangani sendiri. Ini dimaksudkan untuk penggunaan pengembangan saja. Anda harus mempercayai file otoritas sertifikat fixtures/root-ca.crt
di repositori sebelum klien berhasil terhubung.
sudo mkdir -p /usr/share/ca-certificates/extra
sudo cp fixtures/root-ca.crt /usr/share/ca-certificates/extra/notary.crt
sudo update-ca-certificates
Perintah di atas akan menyalin file sertifikat ke ca-certificates
lokasi penyimpanan. update-ca-certificates
memuat ulang semua sertifikat, menambahkan otoritas Notaris ke sistem Anda.
Jika Anda akan menjalankan Notaris dalam produksi, Anda harus menyiapkan autentikasi sehingga hanya pengguna yang berwenang yang dapat menambahkan kunci baru. NOTARY_AUTH
variabel lingkungan harus disetel saat memulai layanan dengan docker-compose
. Ini menerima kredensial yang disandikan Base64 di username:password
format. Anda akan diminta untuk memberikan ini saat berinteraksi dengan Notaris.
export NOTARY_AUTH=$(echo "username" | base64):$(echo "password" | base64)
docker-compose up -d
Sekarang Anda siap untuk menambahkan kunci publik Anda ke server Notaris Anda. Kunci ditambahkan pada basis per-repositori. Ini memungkinkan Anda mengisolasi gambar dari satu sama lain dan memungkinkan dukungan untuk kontributor pihak ketiga yang didelegasikan. Anda dapat menambahkan orang lain dengan hak publikasi nanti dengan meminta mereka mengulangi perintah dengan kunci pribadi mereka.
docker trust signer add your-key-name registry.example.com/my-image
Anda harus memasukkan frasa sandi kunci. Kemudian akan tersedia di server registri Anda.
Menandatangani Gambar
Setelah kunci Anda ada di registri, Anda dapat mulai menandatangani gambar. Gunakan docker trust sign
memerintah. Pastikan setiap gambar diberi tag dengan URL registri yang benar.
docker trust sign registry.example.com/my-image:latest
Perintah ini akan menandatangani gambar dengan kunci Anda dan kemudian mendorongnya langsung ke registri. Tidak perlu menjalankan docker push
secara manual setelah itu. Anda harus menyiapkan kunci repositori dan frasa sandi untuk melindungi data kepercayaan masing-masing gambar. Ikuti setiap perintah untuk menyiapkan kunci penandatanganan Anda.
Jika Anda sudah memiliki alur kerja menggunakan docker push
, Anda dapat memilih perintah itu alih-alih docker trust
. Selesaikan langkah-langkah sebelumnya untuk membuat kunci dan menambahkannya ke Notaris. Setel DOCKER_CONTENT_TRUST
variabel lingkungan agar perintah Docker CLI mendeteksi Kepercayaan Konten dan menerapkannya secara otomatis.
export DOCKER_CONTENT_TRUST=1
docker push registry.example.com/my-image:latest
Anda akan melihat output shell cocok dengan docker trust sign
menghasilkan. Docker melakukan tindakan yang sama seperti perintah yang lebih eksplisit.
Memverifikasi Gambar Tepercaya
DOCKER_CONTENT_TRUST
variabel muncul kembali dengan kepentingan yang lebih besar dalam hal memverifikasi gambar yang Anda tarik. Docker tidak mencoba memverifikasi gambar secara default, meskipun gambar tersebut berisi data kepercayaan. Anda harus menyetel variabel lingkungan di shell Anda untuk mengaktifkan validasi kepercayaan konten.
export DOCKER_CONTENT_TRUST=1
docker pull registry.example.com/my-image:latest
Ketika variabel disetel, semua penarikan gambar akan diperiksa di server Notaris registri mereka. Jika Notaris tidak dapat memberikan data kepercayaan apa pun, gambar diperlakukan sebagai tidak ditandatangani dan penarikan akan dibatalkan. Ini melindungi Anda dari gambar yang dipublikasikan oleh aktor jahat yang menyamar sebagai penerbit asli.
Pengguna Docker Enterprise dapat mengonfigurasi pengaturan daemon opsional untuk mencegah Docker Engine bekerja dengan gambar tidak tepercaya yang sudah ada di host. Ini mungkin telah tiba di tar
arsip dari sumber yang tidak aman.
Edit /etc/docker/daemon.json
dan tambahkan kunci berikut:
{
"content-trust": {
"mode": "enforced"
}
}
Muat ulang konfigurasi daemon Docker dengan systemctl reload docker
untuk menerapkan perubahan.
Anda dapat memeriksa status kepercayaan suatu gambar menggunakan docker trust inspect
. Ini akan menunjukkan tanda tangan yang terkait dengan gambar, memungkinkan Anda untuk memeriksa apakah itu telah ditandatangani.
docker trust inspect registry.example.com/my-image:latest
Jika Anda telah memublikasikan gambar yang tidak ingin Anda tanda tangani lagi, gunakan docker trust revoke
memerintah. Ini akan menghapus data kepercayaan gambar, menyebabkannya gagal semua verifikasi klien Docker berikutnya.
docker trust revoke registry.example.com/my-image:latest
Ringkasan
Docker Content Trust menambahkan tanda tangan digital ke ekosistem Docker, meningkatkan keamanan saat menggunakan gambar. Jika Anda mendorong gambar ke Docker Hub, Anda sudah mendapatkan semua yang Anda butuhkan untuk menggunakan fitur ini. Setel DOCKER_CONTENT_TRUST
variabel lingkungan dan gunakan perintah Docker seperti biasa.
Untuk pengguna registri yang dihosting sendiri, penyiapannya lebih rumit tetapi tetap sepadan dengan usaha di lingkungan yang kritis terhadap kepercayaan. Pada saat penulisan, Notaris masih belum mendapatkan rilis resmi yang stabil dan dokumentasinya ada di repositori GitHub-nya.