Logging SSH dan Manajemen Sesi Menggunakan AWS SSM
Diterbitkan: 2022-03-11Menyiapkan alat atau skrip khusus untuk menyimpan log SSH di Linux bisa jadi membosankan dan rawan kesalahan.
Insinyur dapat menggunakan rooth , screen , atau utilitas lain untuk mencatat aktivitas pengguna tetapi jika izin pengguna tidak diatur dengan benar, pengguna yang terampil dapat menghapus log audit untuk menutupi jejak mereka. Pilihan lain adalah mengatur logging di tingkat kernel, tetapi keahlian yang dibutuhkan untuk itu tidak begitu umum.
Untungnya, ada cara untuk mencatat aktivitas pengguna tanpa menulis satu pun perintah Linux! Kami akan membutuhkan layanan ini:
- EC2
- IAM (Manajemen Identitas dan Akses)
- KMS (Layanan Manajemen Kunci)
- CloudWatch Logs (dan/atau S3)
- AWS Systems Manager (sebelumnya dikenal sebagai SSM)
Mari kita lihat cara mengaturnya masing-masing.
EC2 dan IAM
Meluncurkan instans EC2 biasanya cukup mudah, tetapi ada satu tugas utama yang harus dilakukan selama peluncuran: Kami perlu melampirkan peran IAM ke instans kami, jika tidak, kami tidak akan dapat mencapai hasil yang diharapkan yang dirinci di akhir ini artikel.
Peran IAM yang kami kaitkan dengan instans EC2 kami harus memiliki kebijakan AmazonSSMManagedInstanceCore bawaan , ditambah kebijakan ini (dilampirkan sebagai inline atau dikelola pelanggan):
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "*" } ] }Selain peran IAM, kami biasanya menggunakan konfigurasi instans EC2 ini:
- OSnya adalah Amazon Linux 2, karena secara default sudah terpasang AWS Systems Manager Agent (SSM Agent). (Begitu juga distribusi Ubuntu, yang juga merupakan opsi.)
- Jenis Instance adalah t3.micro (tetapi semua jenis dapat digunakan).
- Grup Keamanan default yang ditetapkan AWS ke VPC akan berfungsi, karena kami tidak memerlukan port SSH terbuka untuk latihan ini.
Kita dapat mulai menyiapkan KMS tanpa menunggu instans EC2 melakukan booting.
KMS
Kami memerlukan kunci KMS jika kami ingin semua log sesi yang dikirim ke CloudWatch disimpan dengan terenkripsi. Mari menuju ke layanan KMS dan membuat kunci.
Kami menyarankan untuk menugaskan administrator agar kunci dapat dikelola oleh pengguna selain pengguna root akun AWS, tetapi jika orang lain tidak memerlukan akses, kami dapat melewati Langkah 3.
Di sini kami memilih "admin" pengguna IAM sebagai administrator kunci, tetapi kami bebas memilih pengguna atau peran apa pun. Kami juga dapat memilih untuk menonaktifkan izin penghapusan kunci untuk administrator.
Kami tidak akan menugaskan pengguna ke kunci ini karena kami ingin kunci ini hanya digunakan oleh layanan CloudWatch Logs untuk operasi enkripsi dan dekripsi log SSH.
Pada halaman Tinjau, kita perlu mengubah kebijakan kunci yang dihasilkan KMS karena tidak menyertakan izin untuk CloudWatch Logs untuk menggunakan kunci tersebut. Kami akan menggantinya dengan kebijakan ini:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow access to CloudWatch Log", "Effect": "Allow", "Principal": { "Service": "logs.REGION.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT_ID:*" } } } ] }Pastikan untuk mengganti semua placeholder:
-
ACCOUNT_IDmenjadi ID akun AWS kami. -
USERNAMEmenjadi nama pengguna administrator yang dipilih pada Langkah 3. Jika kami memilih keluar dari langkah itu, di sini kami menghapus blok pernyataan kedua (blok dengan"Sid": "Allow access for Key Administrators"). -
REGIONmenjadi kode pengenal regional tempat kami menerapkan layanan (misalnya,us-west-1).
Dengan itu, KMS siap digunakan.
Grup Log CloudWatch
Selanjutnya kita memerlukan grup CloudWatch Log (dan/atau ember S3—lihat di bawah) tempat Agen SSM dapat mengirim log sesi SSH. Mari kita ciptakan.
Perhatikan bidang ARN kunci KMS: AWS memberi kami nilai yang diperlukan di sini setelah kunci dibuat di Langkah 5 bagian KMS.
(Jika kami tidak mengaitkan kebijakan yang benar dengan kunci KMS kami sebelumnya, yang mengizinkan layanan CloudWatch Logs untuk menggunakan kunci tersebut, kami akan menerima kesalahan yang terkait dengan kunci KMS pada saat ini.)
Menyimpan Log SSH dalam Bucket S3
Untuk menyimpan log aktivitas dengan S3 alih-alih—atau sebagai tambahan—CloudWatch Logs, kami perlu menambahkan izin ini ke profil instans EC2 kami sebagai kebijakan terpisah (atau menggabungkannya secara manual dengan izin lain yang mungkin perlu kami kaitkan):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration" ], "Resource": "*" }, { "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "*" } ] } Dalam cuplikan di atas, pastikan untuk mengganti placeholder BUCKET_NAME .
Sekarang setelah kami menyiapkan tempat untuk menyimpan log—CloudWatch Logs, bucket S3, atau keduanya—kami siap untuk memasuki sesi SSH.
Manajer Sesi Manajer Sistem AWS
Ini adalah langkah kunci terakhir, di mana kami mengonfigurasi akses aman ke mesin Linux kami untuk pemantauan dan pencatatan sesi SSH. Kita akan mulai di dasbor Session Manager.

Di dasbor, klik tombol putih "Konfigurasikan Preferensi" di kanan atas kotak "Mulai sesi" untuk mengaktifkan pencatatan sesi.
Pada halaman Preferensi, kami akan menemukan beberapa bagian yang dapat kami jelajahi, tetapi fokus kami adalah streaming log sesi SSH ke CloudWatch atau S3 untuk memungkinkan kami melihat dengan cepat apa yang terjadi di dalam mesin Linux kami.
Tepat setelah bagian “CloudWatch logging”, ada bagian “S3 logging” di mana kita dapat memilih bucket.
Setelah SSH logging dikonfigurasi, kita dapat memasukkan SSH ke mesin Linux kita dan menjalankan beberapa perintah untuk melihat apakah aktivitas tersebut ditangkap atau tidak.
Jadi, mari kita mulai sesi. Pada halaman yang sama, kita akan menemukan tab “Sessions” di mana kita dapat memulai sesi. Mengklik tombol "Mulai sesi" akan memberi kami daftar mesin EC2 tempat kami dapat memulai sesi:
Jika kami tidak melihat instance EC2 Linux kami dalam daftar, kami harus memeriksa apakah instance tersebut dalam keadaan berjalan dan memiliki izin IAM yang terkait dengannya seperti yang kami jelaskan sebelumnya.
Menangani Kesalahan Agen SSM “Tidak Mendukung Log Streaming”
Jika kami menerima kesalahan yang mengatakan bahwa versi Agen SSM yang diinstal pada mesin EC2 kami tidak mendukung streaming log CloudWatch, jangan khawatir. Ada cara tanpa rasa sakit untuk memperbaikinya.
Untuk memperbarui Agen SSM, kita perlu menavigasi ke Jalankan Perintah di panel kiri layanan AWS Systems Manager .
Setelah kita berada di sana, kita dapat mengklik tombol oranye "Jalankan Perintah", yang mengarah ke halaman baru di mana kita dapat mengisi beberapa parameter.
Kita akan mulai dengan memilih AWS-UpdateSSMAgent dari daftar.
Setelah itu dipilih, kami akan menggulir ke bawah sampai kami melihat bagian "Target". Di sana kita perlu memilih instance EC2 di mana kita ingin memperbarui Agen SSM, lalu tekan tombol "Jalankan" di bagian akhir. Ini akan mengirim kami ke halaman di mana kami dapat memantau kemajuan pembaruan.
Pembaruan agen tidak akan memakan waktu lebih dari lima menit. Setelah selesai, kita harus dapat membuat sesi kembali di Manajer Sesi.
Pada titik ini, kita harus memulai sesi SSH.
Setelah menjalankan beberapa perintah, mari navigasikan ke grup log CloudWatch Logs (atau bucket S3 kami, tidak ditampilkan) dan konfirmasikan bahwa aktivitas sedang direkam.
Kami sekarang memiliki pengaturan, dengan enkripsi saat istirahat diaktifkan, merekam setiap perintah yang dijalankan di mesin Linux kami.
Faktanya, setiap perintah mungkin lebih dari yang kita inginkan: Rahasia apa pun yang diberikan atau dihasilkan selama sesi akan direkam di CloudWatch atau S3 dan dapat dilihat oleh siapa saja yang memiliki izin yang diperlukan. Untuk mencegahnya, kita bisa menggunakan stty -echo; read passwd; stty echo; stty -echo; read passwd; stty echo; untuk setiap rahasia yang perlu kami berikan selama sesi.
Solusi Logging AWS SSM/SSH Hebat Dengan Peringatan Kecil
Session Manager adalah alat yang berguna untuk mendapatkan akses jarak jauh ke mesin virtual kami di AWS tanpa harus membuka port 22. Faktanya, kami tidak dapat membuat log SSH dengan cara ini jika kami menggunakan penerusan port atau koneksi SSH langsung, sebagai Manajer Sesi catatan dokumentasi.
Meskipun demikian, menggabungkan Pengelola Sesi dengan pencatatan sesi adalah solusi yang andal untuk mengontrol dan memantau aktivitas dalam VM. Selain itu, kami tidak dikenakan biaya untuk menggunakan layanan Session Manager. Kami hanya membayar instans EC2 dan CloudWatch Logs atau bucket S3 kami untuk menyimpan log.
Untuk pembaca yang lebih menyukai tutorial video, saya telah membahas prosedur yang sangat mirip sedikit lebih menyeluruh di YouTube.
Bacaan Lebih Lanjut di Blog Teknik Toptal:
- Studi Kasus: Mengapa Saya Menggunakan AWS Cloud Infrastructure untuk Produk Saya
