AWS CLI - 创建脚本以将我的 IP 添加到安全组

AWS CLI - Create script to add my IP to security group

我正在尝试创建一个脚本来将我的 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, type: <class 'str'>, valid types: <class 'dict'>

谁能帮忙找出正确的语法?

更新: 我尝试了一种似乎更好用的新语法

SecurityGroupRule={{IpProtocol=tcp},{FromPort=433},{ToPort=433},{CidrIpv4='IP'}}

但现在我从 AWS 得到了不同的错误 -

Invalid value for portRange. Must specify both from and to ports with TCP/UDP.

更新:供参考 - 这是我使用的解决方法 - (基于 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

这是我用来将当前 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 检索我的 public IP 地址,然后将其添加到所需的安全组。

请注意,安全组中的规则数量是有限制的,因此最终您需要删除未使用的条目。

供参考 - 这是我使用的解决方法 - (基于 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"}

将参数 --security-group-rules 的值放在引号内。 以下两项似乎对我有用(在亚马逊 Linux 2)-

  • 完整值使用双引号,单引号描述-
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}'