AWS安全组:按规则说明过滤

时间:2018-02-04 16:12:53

标签: amazon-ec2 aws-sdk aws-security-group

2017年8月下旬,AWS为每个安全组规则添加了一个描述字段,这对识别和搜索规则非常有帮助。 但是,UI中无法同时更改来自不同安全组的多个规则。

例如,假设不同安全组中有规则为某些IP地址打开端口,其描述为“NY Office”。如果IP地址发生变化,我希望能够在不知道以前的IP地址的情况下使用描述“NY Office”更新规则,或者必须进入每个规则并更新它。

我正在编写一个小程序,但似乎没有办法按规则的描述进行过滤。仅限安全组描述或任何其他规则字段,如ip,port和protocol。

任何人都知道如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

如果您使用的是aws-cli,则需要使用版本1.14.34。如果执行以下命令,您将注意到显示了每个规则的描述字段。您可以在命令中使用--query来获取所需的规则

aws ec2 describe-security-groups --group-ids XXXXX

如果您使用的是AWS-SDK-PHP,则需要使用版本3.x.查看this页面并查找 describeSecurityGroups

答案 1 :(得分:0)

您还可以使用:

#!/bin/bash

# This is based on the work done at https://gist.github.com/isalgueiro/212a612fc232f1437ce88876937691d3/revisions#diff-c6d6f47361666bfba5538e6e0101bafd

###################
# Define variables#
###################
# Expect for securityGroupIds is sg-...
securityGroupIds="Insert_Your_SGID"
# Expected for ruleDescription is something like Home, or OfficeNY
ruleDescription="OfficePT"

# Retrieve my public IP
publicIP=`dig +short myip.opendns.com @resolver1.opendns.com`

## Find existing rule with the configured description
cidrIP=`aws ec2 describe-security-groups --group-ids $securityGroupIds | jq -r '.SecurityGroups[0].IpPermissions[] | select(.ToPort==80) | .IpRanges[] | select(.Description == "'$ruleDescription'") | .CidrIp' | tail -1f`

## Delete it, if found
if [ -n "${cidrIP}" ]; then
  aws ec2 revoke-security-group-ingress --group-id $securityGroupIds --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp":"'$cidrIP'"}]}]'
fi

## Add the new rule
aws ec2 authorize-security-group-ingress --group-id $securityGroupIds --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "IpRanges": [{"CidrIp": "'$publicIP'/32", "Description": "'$ruleDescription'"}]}]'

来自:https://gist.github.com/0xtf/76a1e008e655b49d5e8c4299d39df66a