我正在尝试创建一个脚本,将我的IP地址添加到AWS VPC安全组中,比如
> aws ec2 modify-security-group-rules --group-id GROUPID
> --security-group-rules SecurityGroupRuleId= RULEID
SecurityGroupRule={IpProtocol:'tcp',FromPort:433,ToPort:433,CidrIpv4:'MYIP'}
但我不断收到不同的错误,比如-
IpProtocol:tcp,类型:<类"str">,有效类型:<类"dict">
有人能帮忙找出正确的语法吗?
更新:我尝试了一种新的语法,它似乎更适合
SecurityGroupRule={{IpProtocol=tcp},{FromPort=433},{ToPort=433},{CidrIpv4='IP'}}
但现在我从AWS得到了一个不同的错误-
portRange的值无效。必须使用TCP/UDP同时指定从端口和到端口。
UPDATE:仅供参考-这是我使用的解决方法-(基于John Rotenstein的回答(我没有修改规则,而是每次创建一个新规则并保存规则ID,以便下次运行脚本时删除它
IP=`curl -s http://whatismyip.akamai.com/`
aws ec2 revoke-security-group-ingress
--group-id GROUP_ID
--security-group-rule-ids $(cat ruleid_1.txt)
aws ec2 authorize-security-group-ingress --group-id GROUP_ID
--ip-permissions "IpProtocol"="tcp","FromPort"=433,"ToPort"=443,"IpRanges"="[{CidrIp=$IP/32,Description=Shalev}]"|jq '.SecurityGroupRules[0].SecurityGroupRuleId' -r > ruleid_1.txt
将参数--security-group-rules
的值放在引号内。以下两项似乎都适用于我(在AmazonLinux2上(-
- 使用双引号表示完整值,并用单引号表示描述-
aws ec2 modify-security-group-rules --group-id sg-xxx
--security-group-rules "SecurityGroupRuleId=sgr-xxx,SecurityGroupRule={Description='SSH
Test1',CidrIpv4=x.x.x.x/32,IpProtocol=tcp,FromPort=22,ToPort=22}"
- 使用单引号表示完整值,并用双引号表示描述-
aws ec2 modify-security-group-rules --group-id sg-xxx
--security-group-rules 'SecurityGroupRuleId=sgr-xxx,SecurityGroupRule={Description="SSH
Test2",CidrIpv4=x.x.x.x/32,IpProtocol=tcp,FromPort=22,ToPort=22}'
供参考-这是我使用的解决方法-(基于John Rotenstein的回答(我没有修改规则,而是每次创建一个新规则并保存规则ID,以便下次运行脚本时删除它
IP=`curl -s http://whatismyip.akamai.com/`
aws ec2 revoke-security-group-ingress
--group-id GROUP_ID
--security-group-rule-ids $(cat ruleid_1.txt)
aws ec2 authorize-security-group-ingress --group-id GROUP_ID
--ip-permissions "IpProtocol"="tcp","FromPort"=433,"ToPort"=443,"IpRanges"="[{CidrIp=$IP/32,Description=Shalev}]"|jq '.SecurityGroupRules[0].SecurityGroupRuleId' -r > ruleid_1.txt
以下是使用aws CLI更改规则的方法。需要";ec2:ModifySecurityGroupRules";准许
aws ec2 describe-security-group-rules help
aws ec2 modify-security-group-rules --group-id sg--???????
--security-group-rules SecurityGroupRuleId=sgr---???????,SecurityGroupRule={IpProtocol=tcp,FromPort=22,ToPort=22,CidrIpv4=IP/32,Description="Regra
Alterada"}
以下是我用来将当前IP地址添加到安全组的脚本:
IP=`curl -s http://whatismyip.akamai.com/`
aws ec2 authorize-security-group-ingress --group-name XXX --protocol tcp --port 22 --cidr $IP/32 --output text
它使用Akamai检索我的公共IP地址,然后将其添加到所需的安全组中。
请注意,安全组中的规则数量是有限制的,因此最终需要删除未使用的条目。
为SecurityGroupRule
使用变量。
类似:
IP=`curl -s http://whatismyip.akamai.com/`
security_group_rules={CidrIpv4=$IP/32,IpProtocol=tcp,FromPort=443,ToPort=443}
aws ec2 modify-security-group-rules
--group-id sg-123
--security-group-rules SecurityGroupRuleId=sgr-123,SecurityGroupRule=$security_group_rules
它对我来说非常有效。
附言:这是我的第一个答案。