Как определить повторяющийся диапазон IP-адресов для групп безопасности AWS?

Мы используем среду на AWS, которая с каждым днем ​​становится все более сложной. Я хотел бы иметь некоторую возможность определять исходные диапазоны IP-адресов, которые я буду использовать снова и снова, хотя и с изменением портов и протоколов.

Простой пример — разрешить доступ по протоколам HTTP, HTTPS, SSH и MySQL из нашей офисной сети к различным серверам. Иногда в самой среде это возможно, определив «беззвучную» группу безопасности, на которую я затем могу ссылаться как на диапазон. Возможно ли это для диапазонов IP-адресов за пределами AWS?


person Agam Rafaeli    schedule 13.04.2015    source источник


Ответы (1)


В итоге мы написали скрипт, который использует инструменты интерфейса командной строки AWS для создания групп безопасности. В двух словах, он вызывает ec2-describe-group чтобы получить текущее состояние групп безопасности, затем перебирает службы и диапазоны IP-адресов для вызова ec2-authorize, чтобы добавить новые правила в группы безопасности.

Написание этого сценария было лучшим способом, который мы смогли найти для управления довольно сложным набором взаимозависимых групп безопасности не только в нескольких регионах AWS, но и в нескольких офисных сайтах. Он работает достаточно хорошо уже пару лет. Единственное, что я мог бы сделать по-другому, если бы мне пришлось все переделывать, это переписать эти скрипты на Python, используя boto, но это в основном просто личные предпочтения.

Изменить: вот фрагмент важных частей одного из наших скриптов bash, которые мы используем:

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

Сценарий имеет около дюжины циклов, подобных этому, которые выполняют поиск различных портов/cidr-адресов в выводе ec2-describe-group и вызывают ec2-authorize для добавления любых правил, которых еще нет.

person Bruce P    schedule 13.04.2015
comment
Не могли бы вы включить код? Все это очень расплывчато. - person George Stocker; 13.04.2015
comment
Мне кажется удивительным, что для этого нет встроенной функции. Вроде вполне стандартная вещь. Совсем недавно перешел на AWS. - person Agam Rafaeli; 14.04.2015