Rekomendasi untuk membuat Linux bersama AMIs - Amazon Elastic Compute Cloud

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Rekomendasi untuk membuat Linux bersama AMIs

Gunakan panduan berikut untuk mengurangi permukaan serangan dan meningkatkan keandalan yang AMIs Anda buat.

penting

Tidak ada daftar pedoman keamanan yang lengkap. Bangun berbagi Anda AMIs dengan hati-hati dan luangkan waktu untuk mempertimbangkan di mana Anda dapat mengekspos data sensitif.

Jika Anda membangun AMIs AWS Marketplace, lihat Praktik terbaik untuk membangun AMIs di Panduan AWS Marketplace Penjual untuk pedoman, kebijakan, dan praktik terbaik.

Untuk informasi tambahan tentang berbagi AMIs dengan aman, lihat artikel berikut:

Nonaktifkan login jarak jauh berbasis kata sandi untuk pengguna root

Menggunakan kata sandi root tetap untuk publik AMI adalah risiko keamanan yang dapat dengan cepat diketahui. Bahkan mengandalkan pengguna untuk mengubah kata sandi setelah masuk pertama membuka jendela kesempatan kecil potensi penyalahgunaan.

Untuk mengatasi masalah ini, nonaktifkan masuk jarak jauh berbasis kata sandi untuk pengguna root.

Untuk menonaktifkan login jarak jauh berbasis kata sandi untuk pengguna root
  1. Buka file /etc/ssh/sshd_config dengan teks editor dan temukan baris berikut:

    #PermitRootLogin yes
  2. Ubah baris menjadi:

    PermitRootLogin without-password

    Lokasi file konfigurasi ini mungkin berbeda untuk distribusi Anda, atau jika Anda tidak menjalankan OpenSSH. Jika demikian, berkonsultasilah dengan dokumentasi yang relevan.

Nonaktifkan akses root lokal

Saat Anda bekerja dengan sharedAMIs, praktik terbaik adalah menonaktifkan login root langsung. Caranya, masuk ke instans yang sedang berjalan dan keluarkan perintah berikut:

[ec2-user ~]$ sudo passwd -l root
catatan

Perintah ini tidak memengaruhi penggunaan sudo.

Hapus pasangan kunci SSH host

Jika Anda berencana untuk membagikan AMI turunan dari publikAMI, hapus pasangan kunci SSH host yang ada yang berada di/etc/ssh. Ini memaksa SSH untuk menghasilkan pasangan SSH kunci unik baru ketika seseorang meluncurkan instance menggunakan AndaAMI, meningkatkan keamanan dan mengurangi kemungkinan "man-in-the-middle" serangan.

Hapus semua file kunci berikut yang ada di sistem Anda.

  • ssh_host_dsa_key

  • ssh_host_dsa_key.pub

  • ssh_host_key

  • ssh_host_key.pub

  • ssh_host_rsa_key

  • ssh_host_rsa_key.pub

  • ssh_host_ecdsa_key

  • ssh_host_ecdsa_key.pub

  • ssh_host_ed25519_key

  • ssh_host_ed25519_key.pub

Anda dapat menghapus semua file ini dengan aman dengan perintah berikut.

[ec2-user ~]$ sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
Awas

Utilitas penghapusan aman, seperti shred, tidak boleh menghapus semua salinan file dari media penyimpanan Anda. Salinan file tersembunyi dapat dibuat dengan membuat jurnal sistem file (termasuk Amazon Linux default ext4), snapshot, backup, RAID dan caching sementara. Untuk informasi selengkapnya, lihat dokumentasi shred.

penting

Jika Anda lupa untuk menghapus pasangan kunci SSH host yang ada dari publik AndaAMI, proses audit rutin kami memberi tahu Anda dan semua pelanggan yang menjalankan instance tentang potensi risiko AMI keamanan Anda. Setelah masa tenggang singkat, kami menandai AMI privat.

Instal kredensial kunci publik

Setelah mengonfigurasi AMI untuk mencegah masuk menggunakan kata sandi, Anda harus memastikan pengguna dapat masuk menggunakan mekanisme lain.

Amazon EC2 memungkinkan pengguna untuk menentukan nama key pair public-private saat meluncurkan instance. Ketika nama key pair yang valid diberikan ke RunInstances API panggilan (atau melalui API alat baris perintah), kunci publik (bagian dari key pair yang EC2 disimpan Amazon di server setelah panggilan ke CreateKeyPair atauImportKeyPair) dibuat tersedia untuk instance melalui HTTP kueri terhadap metadata instance.

Untuk masukSSH, Anda AMI harus mengambil nilai kunci saat boot dan menambahkannya ke /root/.ssh/authorized_keys (atau yang setara untuk akun pengguna lain diAMI). Pengguna dapat meluncurkan instance Anda AMI dengan key pair dan masuk tanpa memerlukan kata sandi root.

Banyak distribusi, termasuk Amazon Linux dan Ubuntu, menggunakan paket cloud-init untuk menginjeksikan kredensial kunci publik untuk pengguna yang telah dikonfigurasi. Jika distribusi Anda tidak mendukung cloud-init, Anda dapat menambahkan kode berikut ke skrip penyalaan sistem (seperti /etc/rc.local) untuk menarik kunci publik yang Anda tentukan pada saat peluncuran untuk pengguna root.

catatan

Dalam contoh berikut, alamat IP http://169.254.169.254/ adalah alamat tautan lokal dan hanya valid dari instans.

IMDSv2
if [ ! -d /root/.ssh ] ; then mkdir -p /root/.ssh chmod 700 /root/.ssh fi # Fetch public key using HTTP TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key if [ $? -eq 0 ] ; then cat /tmp/my-key >> /root/.ssh/authorized_keys chmod 700 /root/.ssh/authorized_keys rm /tmp/my-key fi
IMDSv1
if [ ! -d /root/.ssh ] ; then mkdir -p /root/.ssh chmod 700 /root/.ssh fi # Fetch public key using HTTP curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key if [ $? -eq 0 ] ; then cat /tmp/my-key >> /root/.ssh/authorized_keys chmod 700 /root/.ssh/authorized_keys rm /tmp/my-key fi

Hal ini dapat diterapkan ke pengguna; Anda tidak perlu membatasinya ke pengguna root.

catatan

Rebundling instance berdasarkan ini AMI termasuk kunci yang digunakan untuk meluncurkannya. Untuk mencegah inklusi kunci, Anda harus membersihkan (atau menghapus) file authorized_keys atau mengecualikan file ini dari pemaketan ulang.

Nonaktifkan DNS pemeriksaan sshd (opsional)

Menonaktifkan DNS pemeriksaan sshd sedikit melemahkan keamanan sshd Anda. Namun, jika DNS resolusi gagal, SSH login masih berfungsi. Jika Anda tidak menonaktifkan pemeriksaan sshd, kegagalan DNS resolusi mencegah semua login.

Untuk menonaktifkan pemeriksaan sshd DNS
  1. Buka file /etc/ssh/sshd_config dengan editor teks dan cari baris berikut:

    #UseDNS yes
  2. Ubah baris menjadi:

    UseDNS no
catatan

Lokasi file konfigurasi ini dapat berbeda untuk distribusi Anda atau jika Anda tidak menjalankan OpenSSH. Jika demikian, berkonsultasilah dengan dokumentasi yang relevan.

Hapus data sensitif

Kami merekomendasikan untuk tidak menyimpan data atau perangkat lunak sensitif pada apa pun AMI yang Anda bagikan. Pengguna yang meluncurkan shared AMI mungkin dapat menggabungkannya kembali dan mendaftarkannya sebagai milik mereka. Ikuti panduan ini untuk membantu Anda menghindari beberapa risiko keamanan yang mudah diabaikan:

  • Kami menyarankan penggunaan opsi --exclude directory pada ec2-bundle-vol untuk melewati direktori dan subdirektori yang berisi informasi rahasia yang tidak ingin Anda sertakan dalam paketan Anda. Secara khusus, kecualikan semua pasangan kunci SSH publik/pribadi milik pengguna dan SSH authorized_keys file saat menggabungkan gambar. Publik Amazon AMIs menyimpan ini /root/.ssh untuk pengguna root, dan /home/user_name/.ssh/ untuk pengguna biasa. Untuk informasi selengkapnya, lihat ec2-bundle-vol.

  • Selalu hapus riwayat shell sebelum pembuatan paketan. Jika Anda mencoba lebih dari satu unggahan bundel yang samaAMI, riwayat shell berisi kunci akses Anda. Contoh berikut harus menjadi perintah terakhir yang Anda jalankan sebelum memaketkan dari dalam instans.

    [ec2-user ~]$ shred -u ~/.*history
    Awas

    Batasan shred yang dijelaskan dalam peringatan di atas berlaku juga di sini.

    Perhatikan bahwa bash mencatat riwayat sesi saat ini ke disk saat keluar. Jika Anda keluar dari instans setelah menghapus ~/.bash_history, lalu masuk kembali, Anda akan menemukan ~/.bash_history telah dibuat ulang dan berisi semua perintah yang dijalankan selama sesi Anda sebelumnya.

    Program lain selain bash juga menulis riwayat ke disk, berhati-hatilah dan hapus atau kecualikan dot-file dan dot-directories yang tidak perlu.

  • Membuat paketan dari instans berjalan memerlukan kunci privat dan sertifikat X.509 Anda. Simpan kredensial ini dan kredensial lainnya di lokasi yang tidak dipaketkan (misalnya penyimpanan instans).