Bagaimana cara menentukan rentang IP berulang untuk grup keamanan AWS?

Kami menjalankan lingkungan di AWS yang semakin hari semakin kompleks. Saya ingin memiliki kemampuan untuk menentukan rentang sumber IP yang akan saya gunakan berulang kali meskipun dengan mengubah port dan protokol.

Contoh sederhananya adalah mengizinkan akses HTTP, HTTPS, SSH dan MySQL dari jaringan kantor kami ke server yang berbeda. Kadang-kadang dalam lingkungan itu sendiri hal ini dimungkinkan dengan mendefinisikan grup keamanan "bisu" yang kemudian dapat saya rujuk sebagai rentangnya. Apakah ini mungkin untuk rentang IP di luar AWS?


person Agam Rafaeli    schedule 13.04.2015    source sumber


Jawaban (1)


Kami akhirnya menulis skrip yang menggunakan alat AWS CLI untuk menghasilkan grup keamanan kami. Singkatnya, ini memanggil ec2-describe-group untuk mendapatkan status grup keamanan saat ini, lalu lakukan loop melalui layanan & rentang alamat IP untuk memanggil ec2-authorize untuk menambahkan aturan baru ke grup keamanan.

Membuat skrip ini adalah cara terbaik yang dapat kami temukan untuk mengelola serangkaian kelompok keamanan yang saling bergantung yang cukup kompleks tidak hanya di beberapa wilayah AWS tetapi juga di beberapa lokasi kantor. Ini bekerja cukup baik selama beberapa tahun sekarang. Satu-satunya hal yang mungkin saya lakukan secara berbeda jika saya harus mengulangi semuanya adalah menulis ulang skrip ini dengan Python menggunakan boto, tapi itu sebagian besar hanya preferensi pribadi.

Sunting: Berikut cuplikan bagian penting dari salah satu skrip bash yang kami gunakan:

CORPORATE_NETBLOCKS="1.2.3.4/24 4.3.2.1/27"
REMOTE_OFFICE="5.6.7.8/32"
...
ec2-describe-group --show-empty-fields > $TMPGRPFILE
...
echo "Allow access to the utility server"
grp=${myregion}-util
for cidr in $CORPORATE_NETBLOCKS $REMOTE_OFFICE; do
  for p in 22 80 443 8000-8080; do
    ptest=$(echo $p | sed -e 's/-/[[:space:]]+/')
    egrep "PERMISSION.*${AWS_ACCOUNT_ID}.*${grp}[[:space:]].*ALLOWS.*tcp.*${ptest}.*CIDR.*${cidr}.*ingress" $TMPGRPFILE > /dev/null
    if [[ $? -eq 0 ]]; then
      echo "$cidr -> $grp:${p} already in place"
      continue
    fi
    CMD="ec2-authorize -P tcp -p ${p} -s $cidr $grp"
    # echo $CMD
    $CMD
    if [ $? -ne 0 ]; then
      echo "Failed to create permission. Line $LINENO"
      exit 2
    fi
  done
done

Skrip ini memiliki selusin loop yang mirip dengan ini yang menerima berbagai port/cidrs dalam output dari ec2-describe-group dan memanggil ec2-authorize untuk menambahkan aturan apa pun yang belum ada.

person Bruce P    schedule 13.04.2015
comment
Bisakah Anda memasukkan beberapa kode? Ini semua sangat tidak jelas. - person George Stocker; 13.04.2015
comment
Tampaknya mengejutkan bagi saya bahwa tidak ada fitur bawaan untuk ini. Sepertinya hal yang cukup standar untuk dilakukan. Baru saja pindah ke AWS. - person Agam Rafaeli; 14.04.2015