首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测断电EC2实例在打开电源时是否具有AWS公共池IP

如何检测断电EC2实例在打开电源时是否具有AWS公共池IP
EN

Stack Overflow用户
提问于 2020-06-03 19:08:46
回答 1查看 460关注 0票数 0

我正在编写一个Powershell脚本,用一个公共IP来定位所有EC2实例。我知道如何在NetworkInterfaces中获得弹性IP和公共池IP关联。但是,当为公共池IP (而不是EIP)配置的EC2实例被关闭时,公共IP将被释放回池中,并且关联将从NetworkInterface中删除。我似乎在任何地方都找不到任何标志或其他配置来表明,当EC2恢复供电时,它将请求一个新的公共池IP。我需要识别关闭电源的EC2实例,这些实例可能会为安全报告提供公共IP,而不必为它们供电才能找到答案。

例如,这个EC2有一个公用池IP,当它被打开时。然而,当它被关闭时,就像现在一样,关联对象已经和IP一起被删除了。是不是有什么配置会表明它会在启动后获得一个新的公共池IP?

代码语言:javascript
复制
PS X:\projects\GACM\cloudsecurity> (get-ec2instance -instanceid i-99999999999999999 -region us-east-1).instances.networkinterfaces|select *

    Association        :
    Attachment         : Amazon.EC2.Model.InstanceNetworkInterfaceAttachment
    Description        : Primary network interface
    Groups             : {launch-wizard-4}
    Ipv6Addresses      : {}
    ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-03 20:03:03

确定实例是否具有池式公共ip地址的唯一方法是分析CloudTrail日志。

在创建实例时,将创建一个日志条目。日志中的requestParameters有一个名为networkInterfaceSet的JSON对象,它有一个条目数组,这些条目的键associatePublicIpAddress为true或false。

此时,您无法确定当EC2处于已停止状态时,它是否具有公共IP地址。除非您已经将一个弹性IP链接到实例。

当启动EC2实例时,它可以从子网设置继承公共IP地址的分配,也可以将其设置为启用公共IP,或者禁用。这被记录在云跟踪日志中。

目前,除了云跟踪日志之外,没有其他方法可以更改该行为或查看该行为。

例如,如果子网启用了公共IP,并且在启动EC2实例并显式禁用它时,那么您的实例获得公共ip地址的唯一方法是从快照重新创建实例,或者分配一个弹性IP。如果实例最初是使用公共IP启动的,则无法删除该公共IP。

没有描述-网络接口或描述-实例提供任何元数据与启用或禁用的公共IP地址,不包括弹性IP。

如前所述,确定实例是否具有公共IP的唯一方法是启动实例并查看正在运行的实例元数据。

亚马逊EC2实例IP地址文档声明:

您可以按照以下方式控制实例是否接收公共IP地址:

  • 修改子网的公共IP地址属性。有关更多信息,请参见修改Amazon用户指南中子网的公共IPv4寻址属性。
  • 在启动期间启用或禁用公共IP寻址功能,该功能覆盖子网的公共IP寻址属性。有关更多信息,请参见在实例启动期间分配公共IPv4地址。

公共IP地址是从亚马逊的公共IPv4地址池分配给您的实例的,并且不与您的AWS帐户相关联。当公共IP地址与实例断开关联时,它将被释放回公共IPv4地址池,并且不能重用它。

您不能手动关联或断开公共IP地址与实例的关联。相反,在某些情况下,我们从实例中释放公共IP地址,或者为其分配一个新的IP地址:

  • 当实例停止、休眠或终止时,我们会释放它的公共IP地址。停止或休眠的实例在启动时接收新的公共IP地址。
  • 当您将一个弹性IP地址与其关联时,我们会释放您实例的公共IP地址。当您将弹性IP地址与您的实例分离时,它将接收一个新的公共IP地址。
  • 如果VPC中的实例的公共IP地址已被释放,则如果您的实例附加了多个网络接口,它将不会收到新的IP地址。
  • 如果您的实例的公共IP地址被释放,而它有一个与弹性IP地址相关联的次要私有IP地址,则该实例不会接收新的公共IP地址。

如果您需要一个可以根据需要与实例相关联的持久公共IP地址,则可以使用弹性IP地址。

实验

我在子网中创建了一个EC2实例,其中启用了公共IP地址的分配。我将EC2实例设置为在启动时分配公共IP地址。更改子网自动赋值没有任何影响。我重复了这个过程,这一次允许使用子网的设置来创建EC2实例。我禁用了子网中的自动分配。该实例是在没有公共IP的情况下创建的。然后,我在子网上启用了自动分配,并停止并启动了实例。没有分配公共IP地址。

因此,基于上述文件和我的实验。池公共IP地址的分配是在EC2实例启动时决定的。这是不能改变的。我运行了“描述-网络-接口”、“描述-实例CLI”命令来获取ENI的详细信息,而且没有元数据提供标志来指示在实例启动时将分配公共IP地址。我唯一能找到任何信息的地方就是CloudTrail日志。

如果您正在使用AWS最佳实践,则应该使用EC2启动CloudFormation实例。在这里,您将知道EC2实例是否具有公共IP。

或者,您不允许通过使用分配给用户的服务控制策略或策略分配池公用IP地址。然后使用其他方法暴露机器,要么使用弹性IP地址,要么使用负载平衡器。

我认为重新审视您的用例,以了解您正在努力实现的目标是非常重要的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62180815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档