2015-07-03 121 views
0

我有一个EC2实例(运行kafka),它需要通过公共IP访问自己,但我不想打开整个世界的网络ACL。如何使用公共IP为自己的连接设置EC2?

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

我的设置:

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

安全组是如下:

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。

如果我打开卡夫卡端口到整个世界:

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的入站流量(无关紧要)而不会打开太多?

回答

2

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

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

例如,如果我给该实例的主机名kafka.example.com,然后通过具有在/ etc /主机以下行:

127.0.0.1 kafka.example.com

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