如何为自己的连接设置带有公共IP的EC2?

时间:2015-07-03 13:25:21

标签: amazon-ec2 amazon-vpc apache-kafka

我有一个EC2实例(运行kafka)需要通过公共IP访问自己,但我不想打开全世界的网络ACL。

基本原理是,当与kafka代理建立连接时,代理会通告哪些kafka节点可用。由于kafka将在EC2内外使用,唯一的共同选择是经纪人宣传其公共IP。

我的设置:

  • 具有公共IP(弹性IP)
  • 的实例
  • a vpc
  • 一个安全组,允许从我的工作网络访问kafka端口
  • 互联网网关
  • 允许通过网关进行外部访问的路由

安全组如下:

Custom TCP Rule, proto=TCP, port=9092, src=<my office network>
Custom TCP Rule, prtot=TCP, port=2181, src=<my office network>

简而言之,如果我使用localhost,则所有内容都可以在实例中正常工作。 如果我使用公共IP,那么在实例之外的所有工作都很好。

我现在想要的是在公共IP的实例中使用kafka。

如果我向全世界开放kafka端口:

Custom TCP Rule, proto=TCP, port=9092, src=0.0.0.0/0
Custom TCP Rule, prtot=TCP, port=2181, src=0.0.0.0/0

正如预期的那样,它起作用,但感觉不安全。

如何设置网络ACL以接受来自本地实例/子网/ vpv的入站流量(无关紧要),而不会打开太多?

1 个答案:

答案 0 :(得分:2)

嗯,这不是很干净,但它还具有无需支付外部带宽的额外优势。

我找不到我预期的方式(通过安全组),但只​​是通过更新我的ec2实例上的/ etc / hosts,实际上使用主机名而不是IP,所有都按预期工作。

例如,如果我给实例提供主机名kafka.example.com,那么在/ etc / hosts中包含以下行:

  

127.0.0.1 kafka.example.com

我可以在任何地方使用名称kafka.example.com,即使它实际上指向不同的IP,具体取决于调用的位置。