

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
<a name="building-shared-amis"></a>

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

**penting**  
Tidak ada daftar pedoman keamanan yang lengkap. Bangun AMIs bersama Anda dengan cermat dan luangkan waktu untuk mempertimbangkan di mana Anda data sensitif Anda terekspos.

**Topics**
+ [Nonaktifkan login jarak jauh berbasis kata sandi untuk pengguna root](#public-amis-disable-password-logins-for-root)
+ [Nonaktifkan akses root lokal](#restrict-root-access)
+ [Hapus pasangan kunci host SSH](#remove-ssh-host-key-pairs)
+ [Instal kredensial kunci publik](#public-amis-install-credentials)
+ [Nonaktifkan pemeriksaan DNS sshd (opsional)](#public-amis-disable-ssh-dns-lookups)
+ [Hapus data sensitif](#public-amis-protect-yourself)

Jika Anda membangun AMIs AWS Marketplace, lihat [Praktik terbaik untuk membangun AMIs](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html) di *Panduan AWS Marketplace Penjual* untuk pedoman, kebijakan, dan praktik terbaik.

## Nonaktifkan login jarak jauh berbasis kata sandi untuk pengguna root
<a name="public-amis-disable-password-logins-for-root"></a>

Menggunakan kata sandi root tetap untuk AMI publik adalah risiko keamanan yang segera 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
   ```

1. 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
<a name="restrict-root-access"></a>

Saat Anda bekerja dengan shared AMIs, 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 host SSH
<a name="remove-ssh-host-key-pairs"></a>

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

Hapus semua file kunci berikut yang ada di sistem Anda.
+  ssh\$1host\$1dsa\$1key 
+  ssh\$1host\$1dsa\$1key.pub 
+  ssh\$1host\$1key 
+  ssh\$1host\$1key.pub 
+  ssh\$1host\$1rsa\$1key 
+  ssh\$1host\$1rsa\$1key.pub 
+ ssh\$1host\$1ecdsa\$1key
+ ssh\$1host\$1ecdsa\$1key.pub
+ ssh\$1host\$1ed25519\$1key
+ ssh\$1host\$1ed25519\$1key.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** mungkin tidak menghapus semua salinan file dari media penyimpanan Anda. Salinan file tersembunyi dapat dibuat dengan penjurnalan sistem file (termasuk Amazon Linux default ext4), snapshot, pencadangan, RAID, dan cache sementara. Untuk informasi lebih lanjut, lihat [dokumentasi yang rusak](https://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html).

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

## Instal kredensial kunci publik
<a name="public-amis-install-credentials"></a>

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 pasangan kunci publik-privat saat meluncurkan sebuah instans. Saat nama pasangan kunci yang valid diberikan ke panggilan API `RunInstances` (atau melalui alat API baris perintah), kunci publik (bagian dari pasangan kunci yang dimiliki Amazon EC2 di server setelah panggilan `CreateKeyPair` atau `ImportKeyPair`) tersedia untuk instans melalui kueri HTTP terhadap metadata instans. 

Untuk masuk melalui SSH, AMI Anda harus mengambil nilai kunci saat boot dan menambahkannya ke `/root/.ssh/authorized_keys` (atau setara untuk akun pengguna lain di AMI). Pengguna dapat meluncurkan instans AMI Anda dengan pasangan kunci dan masuk tanpa yang 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**  
Pemaketan ulang instans berdasarkan AMI ini mencakup kunci yang digunakan untuk meluncurkan. Untuk mencegah inklusi kunci, Anda harus membersihkan (atau menghapus) file `authorized_keys` atau mengecualikan file ini dari pemaketan ulang. 

## Nonaktifkan pemeriksaan DNS sshd (opsional)
<a name="public-amis-disable-ssh-dns-lookups"></a>

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

**Untuk menonaktifkan pemeriksaan DNS sshd**

1. Buka file `/etc/ssh/sshd_config` dengan editor teks dan cari baris berikut:

   ```
   #UseDNS yes
   ```

1. Ubah baris menjadi: 

   ```
   UseDNS no
   ```

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

## Hapus data sensitif
<a name="public-amis-protect-yourself"></a>

Kami tidak sarankan Anda menyimpan data atau perangkat lunak sensitif di AMI apa pun yang Anda bagikan. Pengguna yang meluncurkan AMI bersama mungkin dapat memaketkannya kembali dan mendaftarkannya sebagai milik mereka sendiri. 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 public/private kunci SSH milik pengguna dan `authorized_keys` file SSH 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](ami-tools-commands.md#ami-bundle-vol).
+ Selalu hapus riwayat shell sebelum pembuatan paketan. Jika Anda mencoba lebih dari satu unggahan paketan di AMI yang sama, 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).