AWS CLI;撤销默认安全组入口规则会导致错误

Posted

技术标签:

【中文标题】AWS CLI;撤销默认安全组入口规则会导致错误【英文标题】:AWS CLi; Revoking default security group ingress rule results in an error 【发布时间】:2020-09-29 06:31:40 【问题描述】:

有人要求我弄清楚如何通过 CLi 在 AWS 中创建项目,以便以后实现自动化。我被困在安全组上。我可以创建一个罚款,我可以添加入口规则没问题,但我注意到创建的默认组具有所有流量任意/任意的入口规则,并引用 SG 作为源。

我想删除它作为安全风险的可能载体。我收到一条错误消息,提示该规则不存在。我已经尝试使用 SG 组 id、组名,甚至使用 ip 权限语法,这都会导致相同的错误。我也没有看到编辑入口规则的方法。有没有人成功做到这一点?

当然,GUI 非常简单,而且运行良好,我只需要知道正确的语法即可以编程方式执行此操作。

【问题讨论】:

能否发布您尝试过的 CLI 命令? 试过这个:aws ec2 revoke-security-group-ingress --profile us-west-1 --group-id sg-XXXXXXXXXXXXXXXXc --protocol all --cidr 0.0.0.0/0。我也试过这个:aws ec2 revoke-security-group-ingress --profile us-west-1 --group-id sg-XXXXXXXXXXXXXXXXc --ip-permissions '["IpProtocol": "-1", "IpRanges “:[“CidrIp”:“0.0.0.0/0”]]'。两者都导致以下错误:“调用 RevokeSecurityGroupIngress 操作时发生错误 (InvalidPermission.NotFound):此安全组中不存在指定的规则。” 【参考方案1】:

诀窍是通过describe-security-groups 获取当前规则的输出,然后将其作为参数传递给revoke-security-group-ingress。这样,规则就完全匹配了。

首先,此命令提取现有的入站权限:

aws ec2 describe-security-groups --group-ids sg-xxx --query SecurityGroups[].IpPermissions[]

输出如下:

[
    
        "FromPort": 0,
        "IpProtocol": "tcp",
        "IpRanges": [
            
                "CidrIp": "0.0.0.0/0"
            
        ],
        "Ipv6Ranges": [
            
                "CidrIpv6": "::/0"
            
        ],
        "PrefixListIds": [],
        "ToPort": 65535,
        "UserIdGroupPairs": []
    
]

然后,将该命令嵌入到revoke-security-group-ingress 命令中:

aws ec2 revoke-security-group-ingress --group-id sg-xxx --ip-permissions "`aws ec2 describe-security-groups --group-ids sg-xxx --query SecurityGroups[].IpPermissions[]`"

(这适用于我的 Mac。如果您运行的是 Windows,请在 Ubuntu shell 下运行它。)

【讨论】:

我也在使用 mac。当我尝试时,我得到了错误。 zsh:未找到匹配项:SecurityGroups[].IpPermissions[]。我的命令:aws ec2 describe-security-groups --group-ids sg-xxxxxxxxxxxxxx --query SecurityGroups[].IpPermissions[]. aws ec2 describe-security-groups --profile us-west-1 "SecurityGroups": [ "IpPermissionsEgress": [ "IpProtocol": "-1", "PrefixListIds": [] , "IpRanges": [ "CidrIp": "0.0.0.0/0" "Description": "default VPC security group", "IpPermissions": [ "IpProtocol": "-1", "PrefixListIds": [], "IpRanges": [], "UserIdGroupPairs ": [ "UserId": "x", "GroupId": "sg-x" 在不指定--query 的情况下尝试describe-security-groups 命令以查看所提供的输出。听起来你的 shell 对命令做了一些奇怪的事情,因为 zsh 不应该抱怨。在组合命令之前,请确保它返回的结果类似于我上面显示的结果。随意将您的错误/调试添加到您的问题中,使其格式正确。

以上是关于AWS CLI;撤销默认安全组入口规则会导致错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 附加或删除安全组的入口/出口规则?

使用动态块作为安全组入口规则的 Terraform 问题

阿里云ECS安装好宝塔 但访问不了面板的解决办法

通过 Terraform 添加 AWS 安全组时出现问题

AWS考证方向:AWS实例安全组设置

AWS 安全组不允许入站流量