如何授权包含变量的安全组规则?

时间:2017-12-07 15:16:14

标签: amazon-web-services amazon-ec2

我写了一个Cloud Formation模板,启动了12台服务器。

我希望在创建每个新的AWS EC2实例时运行的用户数据脚本自动将规则添加到安全组。

如果我提前了解CIDR块,那么就像运行一样简单:

aws ec2 authorize-security-group-ingress \
    --group-id $opsSG \
    --ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "172.53.0.0/16"}]}]' \
    --region us-west-2

但是CIDR块保存在一个变量中,该变量由Cloud Formation堆栈创建填充。

所以我尝试了各种方法来添加此规则,但除非明确设置CIDR块(如上所示),否则它总是会失败。

这是我试过的:

--ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "$vpccidr"}]}]' \
--region us-west-2

这就是我得到的错误:

An error occurred (InvalidParameterValue) when calling the AuthorizeSecurityGroupIngress operation: CIDR block $vpccidr is malformed

更多尝试:

echo """'[{\"IpProtocol\": \"-1\", \"IpRanges\": [{\"CidrIp\": \"$(echo $vpccidr)\"}]}]'""" > /tmp/1

然后:

aws ec2 authorize-security-group-ingress \
    --group-id $opsSG \
    --ip-permissions $(cat /tmp/1) \
    --region us-west-2

aws ec2 authorize-security-group-ingress \
    --group-id $opsSG \
    --ip-permissions '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "$(echo $vpccidr)"}]}]' \
    --region us-west-2

aws ec2 authorize-security-group-ingress \
    --group-id $opsSG \
    --cli-input-json file:///tmp/1.json \
    --region us-west-2

Error parsing parameter 'cli-input-json': Invalid JSON: No JSON object could be decoded
JSON received: '[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "172.53.0.0/16"}]}]'

无论我尝试什么,它都无法将规则添加到安全组。

有什么想法吗?

0 个答案:

没有答案