2015-07-03 127 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,具體取決於調用的地方。