如何使用 Python boto 判断 AWS 弹性网络接口 (ENI) 是否具有 public IP 地址?

How to tell if AWS Elastic Network Interface (ENI) has a public IP address using Python boto?

我正在审核安全组,现在我的任务是找到没有 public IP 地址且入站安全组规则引用 public IP 地址的 ENI。

我有遍历 ENI 的代码,并查看每个 ENI 附加的安全组,我希望回收它。这是代码:

used_sgs = {}
enis = ec2_conn.get_all_network_interfaces()
for eni in enis:
    eni_sgs = eni.groups
    for sg in eni_sgs:
        sgn = sg.name
        if sgn not in used_sgs:
           used_sgs[sgn] = 0
        used_sgs[sgn]+=1

是否有我可以嗅探的属性来查看 ENI 是否具有 public IP?或者我是否必须采取其他路线(遍历实例,或获取 ENI 附件,或其他方式)?

eni.publicIp

并不是所有的 enis 都有关联的 publicIp。所以检查 publicIp 属性是否存在然后获取该值

for eni in enis:
  if hasattr(eni, 'publicIp') and eni.publicIp:
    print eni.id, eni.publicIp