2016-12-21 127 views
2

我想授予從我的Elastic Beanstalk(Ruby on Rails)應用程序訪問我的AWS ElasticSearch實例的權限。具體來說,我試圖通過logstash-elasticsearch插件管理logstash數據。我的期望是這將是一個標準的用例(基於this blog post),但它似乎不可能。如何從Elastic Beanstalk連接到AWS ElasticSearch實例?

我試過被設置在ES實例訪問策略的EB角色的第一件事:

{ 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "arn:aws:iam::XXXX:role/aws-elasticbeanstalk-ec2-role" 
     }, 
     "Action": "es:*", 
     "Resource": "arn:aws:es:us-west-1:XXXXX:domain/YYYY/*" 
    } 

這沒有工作,我相信,因爲所使用的EC2實例之間進行通信的端口和ES。我考慮的其他選項:

  • 授予訪問EC2實例的硬編碼IP訪問權限的權限。 (難以維持
  • 授予訪問的彈性IC地址EC2實例(如何?
  • 授予完全公開訪問ES實例(非常不安全
  • 發送某種從Logstash到ES的IAM /用戶憑證。

如果我能弄清楚如何設置它,最後一個選項將起作用。


編輯:答案語法:基於以下birryree的答案,這是我獲得這項工作:

  • 添加新command2_logstash.config文件(從上面的博客文章)以安裝亞馬遜logstash插件:/opt/logstash/bin/logstash-plugin install logstash-output-amazon_es
  • 調整我的logstash配置文件以使用amazon_es插件。這或多或少是對elasticsearch的直接替代,儘管我最終明確指定了aws_access_key_idaws_secret_access_key

回答

3

你有的基本政策應該工作,一個完整的策略,授予權限的IAM角色看起來是這樣的:

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "arn:aws:iam::ACCOUNT:role/ROLE" 
     },  
     "Action": "es:*", 
     "Resource": "arn:aws:es:us-west-1:ACCOUNT:domain/DOMAIN/*" 
    } 
    ] 
} 

當您使用IAM角色/基於用戶的策略,但是,您必須發送與Version 4 Signatures簽署的Elasticsearch請求。當您使用官方AWS開發工具包時,當您訪問AWS ES資源時,他們將透明地執行請求籤名。

雖然您使用的是Logstash,但標準的logstash-elasticsearch插件不支持此操作,所以如果您想最大限度地減少允許訪問ES集羣的人員,那麼您可能希望使用AWS Logstash ES輸出插件。

Amazon AWS實驗室有一個名爲logstash-output-amazon_es的插件,它的行爲與logstash_elasticsearch的行爲基本相同,只是它爲每個請求執行簽名。

這個插件確實有一些限制,比如不支持Logstash 5。x還是(它只支持Logstash v2.x)。將重要的部分合併到官方的logstash插件源中是一個長達一年的問題,但目前尚不清楚這些問題何時會發生。

+0

這太神奇了。謝謝。我在原始問題中爲將來的讀者添加了更詳細的說明。 –