Saya mencoba menemukan cara untuk menentukan kelompok keamanan yatim piatu sehingga saya dapat membersihkan dan menyingkirkan mereka. Apakah ada yang tahu cara menemukan grup keamanan yang tidak digunakan.
Baik melalui konsol atau dengan alat baris perintah akan bekerja (Menjalankan alat baris perintah di linux dan mesin OSX).
Jawaban:
Catatan: ini hanya mempertimbangkan penggunaan keamanan di EC2, bukan layanan lain seperti RDS. Anda harus melakukan lebih banyak pekerjaan untuk memasukkan grup keamanan yang digunakan di luar EC2. Hal baiknya adalah Anda tidak dapat dengan mudah (bahkan mungkin tidak mungkin) menghapus grup keamanan aktif jika Anda melewatkan satu grup yang terkait dengan layanan lain.
Dengan menggunakan alat AWS CLI yang lebih baru, saya menemukan cara mudah untuk mendapatkan apa yang saya butuhkan:
Pertama, dapatkan daftar semua grup keamanan
Kemudian mendapatkan semua kelompok keamanan diikat ke sebuah contoh, kemudian disalurkan ke
sort
kemudianuniq
:Kemudian gabungkan dan bandingkan 2 daftar dan lihat apa yang tidak digunakan dari daftar utama:
sumber
aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].SecurityGroups[*]' --output text | tr '\t' '\n' | sort | uniq
aws rds describe-db-security-groups --query 'DBSecurityGroups[*].EC2SecurityGroups[*].EC2SecurityGroupId' --output text | tr '\t' '\n' | sort | uniq
aws ec2 describe-network-interfaces --query 'NetworkInterfaces[*].Groups[*].GroupId' --output text| tr '\t' '\n' | sort | uniq
untuk mendeskripsikan antarmuka jaringan.Jika Anda memilih semua grup keamanan Anda di konsol EC2, lalu tekan tindakan -> Hapus Grup Keamanan, munculan akan muncul yang memberi tahu Anda bahwa Anda tidak dapat menghapus grup keamanan yang dilampirkan ke instans, grup keamanan lain, atau antarmuka jaringan, dan itu akan mencantumkan grup keamanan yang dapat Anda hapus; yaitu grup keamanan yang tidak digunakan :)
sumber
Ini adalah kode sampel yang ditulis dalam boto (Python SDK untuk AWS) untuk mencantumkan Grup Keamanan berdasarkan jumlah instans yang terkait dengannya.
Anda dapat menggunakan logika ini untuk mendapatkan hal yang sama di baris perintah juga
Kode Boto
Keluaran
sumber
Setelah sekitar satu tahun penggunaan yang tidak diaudit, saya merasa perlu untuk mengaudit grup keamanan AWS EC2 saya dan membersihkan grup lama yang tidak digunakan.
Ini adalah tugas yang menakutkan untuk dilakukan melalui GUI web, jadi saya melihat ke AWS CLI untuk mempermudah tugas. Saya menemukan awal tentang cara melakukan ini di StackOverflow, tetapi itu masih jauh dari selesai. Jadi saya memutuskan untuk menulis naskah saya sendiri. Saya menggunakan AWS CLI, MySQL dan beberapa "Bash-foo" untuk melakukan hal berikut:
Dapatkan daftar semua grup keamanan EC2. Saya menyimpan group-id, group-name dan description dalam tabel yang disebut "groups" dalam database MySQL yang disebut aws_security_groups di localhost. Jumlah total grup yang ditemukan dilaporkan ke pengguna.
Dapatkan daftar semua grup keamanan yang terkait dengan masing-masing layanan berikut dan kecualikan mereka dari tabel: EC2 Istances EC2 Elastic Load Balancers AWS RDS Instans AWS OpsWorks (tidak boleh dihapus per Amazon) Grup keamanan default (Tidak dapat dihapus ) ElastiCache
Untuk setiap layanan, saya melaporkan hitungan jumlah grup yang tersisa di tabel setelah pengecualian selesai.
CATATAN: 1. Anda akan ingin membuat file untuk menyimpan host MySQL Anda, nama pengguna dan kata sandi dan mengarahkan variabel $ DBCONFIG ke sana. Ini harus terstruktur seperti ini:
Beri tahu saya jika Anda merasa ini berguna atau memiliki komentar, perbaikan, atau peningkatan.
Ini skripnya.
Dan inilah sql untuk membuat database.
sumber
Contoh boto mencetak ID Grup dan Nama hanya dari grup keamanan yang tidak memiliki contoh saat ini.
Ini juga menunjukkan bagaimana menentukan wilayah mana yang Anda khawatirkan.
Untuk memastikan grup keamanan mana yang masih digunakan, Anda harus membalik atau menghapus
if len(sg.instances()) == 0
pengujian dan mencetaklen(sg.instances())
nilainya.Misalnya
sumber
Dengan menggunakan AWS SDK node.js, saya dapat mengonfirmasi bahwa AWS tidak mengizinkan Anda untuk menghapus grup keamanan yang sedang digunakan. Saya menulis skrip yang hanya mencoba menghapus semua grup dan menangani kesalahan dengan baik. Ini berfungsi untuk VPC klasik dan modern. Pesan error tersebut dapat dilihat di bawah.
sumber
Di antara fungsi lainnya, ScoutSuite dan Prowler melaporkan Grup Keamanan EC2 yang tidak digunakan. Keduanya open source.
sumber
Ke SG yang terpasang ke antarmuka jaringan:
Dengan nama:
Menurut id:
sumber
Ada alat di pasar AWS yang membuat ini jauh lebih mudah. Ini menunjukkan kepada Anda grup mana yang dilampirkan / dilepas agar mudah dihapus, tetapi juga membandingkan Log Aliran VPC Anda dengan aturan grup keamanan dan menunjukkan kepada Anda aturan SG mana yang sedang digunakan atau tidak. AWS memposting solusi ELK-stack untuk melakukan ini, tetapi itu sangat rumit.
Ini alatnya, dan penafian yang saya kerjakan. Tapi saya harap Anda semua menganggapnya relevan: https://www.piasoftware.net/single-post/2018/04/24/VIDEO-Watch-as-we-clean-up-EC2-security-groups-in-just -beberapa menit
sumber
Sayangnya jawaban yang dipilih tidak seakurat yang saya butuhkan (saya sudah mencoba menyelidiki mengapa, tetapi saya lebih suka menerapkannya).
Jika saya memeriksa SEMUA
NetworkInterfaces
, mencari keterikatan pada apa punSecurityGroup
, Itu memberi saya hasil parsial. Jika saya hanya memeriksanyaEC2Instances
, hasilnya juga sebagian.Jadi itulah pendekatan saya terhadap masalah ini:
all_secgrp
all_instances
filter
fungsi dan pemfilteran menggunakannyasecurity-group-id
)all_secgrp
Terlampir Anda dapat melihat potongan kode. Jangan mengeluh tentang efisiensi, tetapi cobalah untuk mengoptimalkannya jika Anda mau.
sumber
Ini adalah masalah yang sulit, jika Anda memiliki grup keamanan yang mereferensikan grup keamanan lain dalam aturan. Jika demikian, Anda harus menyelesaikan DependencyErrors, yang tidak sepele.
Jika Anda hanya menggunakan alamat IP, maka solusi ini akan berfungsi, setelah Anda membuat klien boto3:
sumber