首页 > 解决方案 > Boto 出口安全策略

问题描述

我正在尝试创建一个以sg1另一个安全组sg2为目标的出站安全组策略。根据authorize_egress() 文档

IpPermissions->IPRanges->CidrIp — 您可以指定 CIDR 范围或源安全组,不能同时指定两者。要指定单个 IPv4 地址,请使用 /32 前缀长度。

SourceSecurityGroupName — 不支持。使用一组 IP 权限来指定目标安全组

但是,以下代码因意外的参数类型错误而失败 - 有人知道此语法和/或我做错了什么吗?

sg1 = ec2.create_security_group(GroupName=sg1, Description=sg1, VpcId=vpc.id)

sg1_policy_egress = [{
    'IpProtocol': 'tcp', 
    'FromPort': 443, 
    'ToPort': 443,
    'IpRanges': [{
        'CidrIp': sg2
    }]
}]

sg1.authorize_egress(IpPermissions=sg1_policy_egress)

标签: pythonamazon-web-servicesboto

解决方案


您不能在IpRanges列表中指定组。您需要改用UserIdGroupPairs列表。我建议使用该字段的sg2组 ID 值。GroupId指定目标组的其他方法是可能的,但您描述的情况不需要。

具体来说,您想要:

sg1_policy_egress = [{
    'IpProtocol': 'tcp', 
    'FromPort': 443, 
    'ToPort': 443,
    'UserIdGroupPairs': [{
        'GroupId': sg2
    }]
}]

推荐阅读