如何为AWS安全组定义重复的IP范围?

时间:2015-04-13 10:48:41

标签: security amazon-web-services amazon-vpc

我们正在AWS上运行一个日复一日变得越来越复杂的环境。我想有一些能力来定义IP源范围,我将一次又一次地使用它来改变端口和协议。

一个简单的例子是允许从我们的办公室网络到不同服务器的HTTP,HTTPS,SSH和MySQL访问。有时在环境本身中,这可以通过定义一个“静音”安全组来实现,然后我可以将其作为范围引用。这可能适用于AWS以外的IP范围吗?

1 个答案:

答案 0 :(得分:2)

我们最终编写了一个使用AWS CLI tools生成安全组的脚本。简而言之,它调用ec2-describe-group来获取安全组的当前状态,然后循环通过服务& IP地址范围用于调用ec2-authorize以向安全组添加新规则。

脚本化这是我们发现管理一组相当复杂的相互依赖的安全组的最佳方式,不仅在多个AWS区域内,而且在多个办公站点之间。它现在已经运作了好几年。关于我不得不重做的唯一方法就是使用boto在Python中重写这些脚本,但这主要只是个人偏好。

编辑:这是我们使用的一个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

该脚本有十几个类似于此的循环,用于grep ec2-describe-group输出中的各种端口/ cidrs,并调用ec2-authorize来添加任何尚未到位的规则。