确保 EIP 不会跨 VPC 重用

making sure that EIP is not reused across VPCs

给定:
我们想要重用的一个(或多个)弹性 IP。 (ip池)
一个 CloudFormation 模板,其中包含一台关联了弹性 ip 的机器。 (通过 AWS::EC2::EIPAssociation) 启动/拆除从共享 EIP 池获取 ips 的多个 CloudFormation 堆栈。 (ip是栈中的参数,在栈启动前计算)

我的预期是,如果一个 VPC / CloudFormation 堆栈已经在使用 EIP,其他尝试使用它的尝试就会失败。
事实证明,如果您尝试在另一个堆栈中使用相同的 EIP,它会起作用。 EIP 将绑定到最新创建的堆栈。

更糟的是,如果堆栈 1 使用 EIP,堆栈 2 使用相同的 EIP,如果在堆栈 2 使用 'stole' IP 后拆除堆栈 1,堆栈 2 将丢失 IP(导致 IP 是免费的 - 即未绑定到任何实例)。

有人 运行 解决过这个问题吗?在上述情况下,您如何确保自己没有 运行ning?

我必须使用 ips 的原因是它们在我通过 public 互联网与之交互的系统中被列入白名单以供访问。流量必须来自该池中的 IP,不能随便抓取任何随机 public ip。

我不是 100% 如果你想要的可以通过 cloudformation 实现。但就我个人而言,我会以不同的方式来做。 Cloudformation 非常擅长它的功能,但是当您想要开始添加逻辑和条件时,它会遇到困难。

照常创建所有实例,但不要尝试绑定 eip,而是使用用户数据脚本和 aws cli 搜索未附加的 eip 并附加它。使用 cli 执行此操作将为您提供更多功能。

祝你好运

不要将 EIP 直接附加到实例,而是附加一个附有 EIP 的 ENI。如果 ENI 正在使用中,它不会从它当前附加到的实例中分离出来。