Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Praktik terbaik keamanan tugas dan wadah Amazon ECS
Anda harus mempertimbangkan gambar wadah sebagai garis pertahanan pertama Anda terhadap serangan. Gambar yang tidak aman dan dibangun dengan buruk dapat memungkinkan penyerang untuk melarikan diri dari batas wadah dan mendapatkan akses ke host. Anda harus melakukan hal berikut untuk mengurangi risiko terjadinya hal ini.
Kami menyarankan Anda melakukan hal berikut saat menyiapkan tugas dan wadah Anda.
Buat gambar minimal atau gunakan distroless
Mulailah dengan menghapus semua binari asing dari gambar wadah. Jika Anda menggunakan gambar yang tidak dikenal dari Amazon ECR Public Gallery, periksa gambar untuk merujuk ke isi masing-masing lapisan wadah. Anda dapat menggunakan aplikasi seperti Dive
Atau, Anda dapat menggunakan gambar distroless yang hanya menyertakan aplikasi Anda dan dependensi runtime. Mereka tidak berisi manajer paket atau shell. Gambar Distroless meningkatkan “sinyal ke noise pemindai dan mengurangi beban menetapkan asal sesuai dengan apa yang Anda butuhkan.” Untuk informasi lebih lanjut, lihat GitHub dokumentasi tentang distroless
Docker memiliki mekanisme untuk membuat gambar dari gambar yang dicadangkan dan minimal yang dikenal sebagai scratch. Untuk informasi selengkapnya, lihat Membuat gambar induk sederhana menggunakan scratch
############################ # STEP 1 build executable binary ############################ FROM golang:alpine AS builder # Install git. # Git is required for fetching the dependencies. RUN apk update && apk add --no-cache git WORKDIR $GOPATH/src/mypackage/myapp/ COPY . . # Fetch dependencies. # Using go get. RUN go get -d -v # Build the binary. RUN go build -o /go/bin/hello ############################ # STEP 2 build a small image ############################ FROM scratch # Copy our static executable. COPY --from=builder /go/bin/hello /go/bin/hello # Run the hello binary. ENTRYPOINT ["/go/bin/hello"] This creates a container image that consists of your application and nothing else, making it extremely secure.
Contoh sebelumnya juga merupakan contoh build multi-tahap. Jenis build ini menarik dari sudut pandang keamanan karena Anda dapat menggunakannya untuk meminimalkan ukuran gambar akhir yang didorong ke registri kontainer Anda. Gambar kontainer tanpa alat build dan biner asing lainnya meningkatkan postur keamanan Anda dengan mengurangi permukaan serangan gambar. Untuk informasi selengkapnya tentang build multi-tahap, lihat Multi-stage build
Pindai gambar Anda untuk mencari kerentanan
Mirip dengan rekan-rekan mesin virtual mereka, gambar kontainer dapat berisi binari dan pustaka aplikasi dengan kerentanan atau mengembangkan kerentanan dari waktu ke waktu. Cara terbaik untuk melindungi dari eksploitasi adalah dengan memindai gambar Anda secara teratur dengan pemindai gambar.
Amazon ECR menyediakan dua versi pemindaian dasar yang menggunakan database Common Vulnerabilities and Exposures (CVEs):
-
AWS pemindaian dasar AWS asli — Menggunakan teknologi asli, yang sekarang GA dan direkomendasikan. Pemindaian dasar yang ditingkatkan ini dirancang untuk memberi pelanggan hasil pemindaian yang lebih baik dan deteksi kerentanan di berbagai sistem operasi populer. Hal ini memungkinkan pelanggan untuk lebih memperkuat keamanan gambar kontainer mereka. Semua registri pelanggan baru dipilih ke dalam versi yang ditingkatkan ini secara default.
-
Pemindaian dasar Clair - Versi pemindaian dasar sebelumnya yang menggunakan proyek Clair sumber terbuka dan tidak digunakan lagi. Untuk informasi lebih lanjut tentang Clair, lihat Clair on
. GitHub
Pem AWS indaian dasar asli dan Clair didukung di semua wilayah yang terdaftar di AWS Layanan berdasarkan Wilayah
Amazon ECR menggunakan tingkat keparahan untuk CVE dari sumber distribusi hulu jika tersedia. Jika tidak, skor Common Vulnerability Scoring System (CVSS) digunakan. Skor CVSS dapat digunakan untuk mengetahui tingkat kepelikan kelemahan NVD. Untuk informasi selengkapnya, lihat Tingkat kepelikan kelemahan NVD
Anda juga dapat melihat hasil pemindaian dari dalam konsol Amazon ECR atau dengan memanggil DescribeImageScanFindings API. Gambar dengan ker CRITICAL entanan HIGH atau harus dihapus atau dibangun kembali. Jika gambar yang telah digunakan mengembangkan kerentanan, itu harus diganti sesegera mungkin.
Docker Desktop Edge versi 2.3.6.0
-
Mengotomatiskan kepatuhan gambar menggunakan Amazon ECR dan AWS Security Hub CSPM
menjelaskan cara menampilkan informasi kerentanan dari Amazon ECR AWS Security Hub CSPM dan mengotomatiskan remediasi dengan memblokir akses ke gambar yang rentan.
Hapus izin khusus dari gambar Anda
Hak akses menandai setuid dan setgid memungkinkan menjalankan file yang dapat dieksekusi dengan izin pemilik atau grup yang dapat dieksekusi. Hapus semua binari dengan hak akses ini dari gambar Anda karena binari ini dapat digunakan untuk meningkatkan hak istimewa. Pertimbangkan untuk menghapus semua shell dan utilitas seperti nc dan curl yang dapat digunakan untuk tujuan jahat. Anda dapat menemukan file dengan setuid dan hak setgid akses dengan menggunakan perintah berikut.
find / -perm /6000 -type f -exec ls -ld {} \;
Untuk menghapus izin khusus ini dari file-file ini, tambahkan arahan berikut ke image kontainer Anda.
RUN find / -xdev -perm /6000 -type f -exec chmod a-s {} \; || true
Buat satu set gambar yang dikuratori
Daripada mengizinkan pengembang untuk membuat gambar mereka sendiri, buat satu set gambar yang diperiksa untuk tumpukan aplikasi yang berbeda di organisasi Anda. Dengan demikian, pengembang dapat melepaskan pembelajaran cara menyusun Dockerfiles dan berkonsentrasi pada penulisan kode. Saat perubahan digabungkan ke basis kode Anda, CI/CD pipeline dapat secara otomatis mengkompilasi aset dan kemudian menyimpannya di repositori artefak. Dan, terakhir, salin artefak ke gambar yang sesuai sebelum mendorongnya ke registri Docker seperti Amazon ECR. Paling tidak Anda harus membuat satu set gambar dasar yang dapat digunakan pengembang untuk membuat Dockerfiles mereka sendiri. Anda harus menghindari menarik gambar dari Docker Hub. Anda tidak selalu tahu apa yang ada di gambar dan gambar dapat memiliki kerentanan.
Pindai paket aplikasi dan pustaka untuk mencari kerentanan
Penggunaan pustaka open source sekarang umum. Seperti sistem operasi dan paket OS, pustaka ini dapat memiliki kerentanan. Sebagai bagian dari siklus pengembangan, pustaka ini harus dipindai dan diperbarui ketika kerentanan kritis ditemukan.
Docker Desktop melakukan pemindaian lokal menggunakan Snyk. Ini juga dapat digunakan untuk menemukan kerentanan dan potensi masalah lisensi di perpustakaan sumber terbuka. Ini dapat diintegrasikan langsung ke alur kerja pengembang yang memberi Anda kemampuan untuk mengurangi risiko yang ditimbulkan oleh pustaka sumber terbuka. Untuk informasi selengkapnya, lihat topik berikut:
-
Alat Keamanan Aplikasi Sumber Ter
buka mencakup daftar alat untuk mendeteksi kerentanan dalam aplikasi.
Lakukan analisis kode statis
Anda harus melakukan analisis kode statis sebelum membangun image kontainer. Ini dilakukan terhadap kode sumber Anda dan digunakan untuk mengidentifikasi kesalahan pengkodean dan kode yang dapat dieksploitasi oleh aktor jahat, seperti suntikan kesalahan. Anda dapat menggunakan Amazon Inspector. Untuk informasi selengkapnya, lihat Memindai gambar wadah Amazon ECR dengan Amazon Inspector di Panduan Pengguna Amazon Inspector.
Jalankan wadah sebagai pengguna non-root
Anda harus menjalankan kontainer sebagai pengguna non-root. Secara default, container berjalan sebagai root pengguna kecuali direktif diser USER takan dalam Dockerfile Anda. Kemampuan Linux default yang ditetapkan oleh Docker membatasi tindakan yang dapat dijalankan sebagairoot, tetapi hanya sedikit. Misalnya, wadah yang berjalan seperti root masih tidak diizinkan untuk mengakses perangkat.
Sebagai bagian dari CI/CD pipeline Anda, Anda harus memberi tahu Dockerfiles untuk mencari direk USER tif dan gagal membangun jika hilang. Untuk informasi selengkapnya, lihat topik berikut:
-
Dockerfile-lint
adalah alat sumber terbuka dari RedHat yang dapat digunakan untuk memeriksa apakah file sesuai dengan praktik terbaik. -
Hadolint
adalah alat lain untuk membangun gambar Docker yang sesuai dengan praktik terbaik.
Gunakan sistem file root read-only
Anda harus menggunakan sistem file root read-only. Sistem file root kontainer dapat ditulis secara default. Ketika Anda mengonfigurasi wadah dengan sistem file root RO (read-only), itu memaksa Anda untuk secara eksplisit menentukan di mana data dapat disimpan. Ini mengurangi permukaan serangan Anda karena sistem file container tidak dapat ditulis kecuali izin diberikan secara khusus.
catatan
Memiliki sistem file root read-only dapat menyebabkan masalah dengan paket OS tertentu yang diharapkan dapat menulis ke sistem file. Jika Anda berencana untuk menggunakan sistem file root read-only, uji secara menyeluruh terlebih dahulu.
Konfigurasikan tugas dengan batas CPU dan Memori (Amazon EC2)
Anda harus mengkonfigurasi tugas dengan batas CPU dan memori untuk meminimalkan risiko berikut. Batas sumber daya tugas menetapkan batas atas untuk jumlah CPU dan memori yang dapat dicadangkan oleh semua wadah dalam tugas. Jika tidak ada batasan yang ditetapkan, tugas memiliki akses ke CPU dan memori host. Hal ini dapat menyebabkan masalah di mana tugas yang diterapkan pada host bersama dapat membuat tugas lain dari sumber daya sistem kelaparan.
catatan
Amazon ECS pada AWS Fargate tugas mengharuskan Anda menentukan batas CPU dan memori karena menggunakan nilai-nilai ini untuk tujuan penagihan. Satu tugas yang menyita semua sumber daya sistem tidak menjadi masalah bagi Amazon ECS Fargate karena setiap tugas dijalankan pada instans khusus sendiri. Jika Anda tidak menentukan batas memori, Amazon ECS mengalokasikan minimal 4MB untuk setiap wadah. Demikian pula, jika tidak ada batas CPU yang ditetapkan untuk tugas tersebut, agen kontainer Amazon ECS menetapkan minimal 2 CPU.
Gunakan tag yang tidak dapat diubah dengan Amazon ECR
Dengan Amazon ECR, Anda dapat dan harus menggunakan gambar konfigurasi dengan tag yang tidak dapat diubah. Ini mencegah mendorong versi gambar yang diubah atau diperbarui ke repositori gambar Anda dengan tag yang identik. Ini melindungi dari penyerang yang mendorong versi gambar yang dikompromikan ke gambar Anda dengan tag yang sama. Dengan menggunakan tag yang tidak dapat diubah, Anda secara efektif memaksa diri Anda untuk mendorong gambar baru dengan tag yang berbeda untuk setiap perubahan.
Hindari menjalankan wadah sebagai hak istimewa (Amazon EC2)
Anda harus menghindari menjalankan wadah sebagai hak istimewa. Untuk latar belakang, kontainer berjalan sebagaimana privileged dijalankan dengan hak istimewa yang diperluas pada host. Ini berarti container mewarisi semua kemampuan Linux yang ditetapkan root pada host. Penggunaannya harus sangat dibatasi atau dilarang. Kami menyarankan untuk menyetel variabel lingkungan agen kontainer Amazon ECS ECS_DISABLE_PRIVILEGED true untuk mencegah kontainer berjalan seperti privileged pada host tertentu jika privileged tidak diperlukan. Atau Anda dapat menggunakan AWS Lambda untuk memindai definisi tugas Anda untuk penggunaan privileged parameter.
catatan
Menjalankan wadah karena privileged tidak didukung di Amazon ECS aktif. AWS Fargate
Hapus kemampuan Linux yang tidak perlu dari wadah
Berikut ini adalah daftar kemampuan Linux default yang ditetapkan untuk kontainer Docker. Untuk informasi selengkapnya tentang setiap kemampuan, lihat Ringkasan Kemampuan Linux
CAP_CHOWN, CAP_DAC_OVERRIDE, CAP_FOWNER, CAP_FSETID, CAP_KILL, CAP_SETGID, CAP_SETUID, CAP_SETPCAP, CAP_NET_BIND_SERVICE, CAP_NET_RAW, CAP_SYS_CHROOT, CAP_MKNOD, CAP_AUDIT_WRITE, CAP_SETFCAP
Jika wadah tidak memerlukan semua kemampuan kernel Docker yang tercantum di atas, pertimbangkan untuk menjatuhkannya dari wadah. Untuk informasi selengkapnya tentang setiap kemampuan kernel Docker, lihat KernelCapabilities. Anda dapat mengetahui kemampuan mana yang digunakan dengan melakukan hal berikut:
Gunakan kunci yang dikelola pelanggan (CMK) untuk mengenkripsi gambar yang didorong ke Amazon ECR
Anda harus menggunakan kunci yang dikelola pelanggan (CMK) untuk mengenkripsi gambar yang didorong ke Amazon ECR. Gambar yang didorong ke Amazon ECR secara otomatis dienkripsi saat diam dengan kunci AWS Key Management Service ter AWS KMS kelola (). Jika Anda lebih suka menggunakan kunci Anda sendiri, Amazon ECR sekarang mendukung AWS KMS enkripsi dengan kunci yang dikelola pelanggan (CMK). Sebelum mengaktifkan enkripsi sisi server dengan CMK, tinjau Pertimbangan yang tercantum dalam dokumentasi tentang enkripsi saat diam.