अमेज़ॅन इलास्टिक खोज क्लस्टर के लिए उचित पहुंच नीति


99

मैंने हाल ही में नई अमेज़ॅन इलास्टिक्स खोज सेवा का उपयोग करना शुरू किया है और मुझे उस एक्सेस पॉलिसी का पता नहीं लग सकता है जिसकी मुझे ज़रूरत है ताकि मैं केवल अपने EC2 उदाहरणों से उन सेवाओं तक पहुंच पा सकूं जिनके पास एक विशिष्ट IAM भूमिका है।

वर्तमान में मैंने ES डोमेन के लिए सौंपी गई पहुँच नीति का एक उदाहरण दिया है:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::[ACCOUNT_ID]:role/my_es_role",
        ]
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-east-1:[ACCOUNT_ID]:domain/[ES_DOMAIN]/*"
    }
  ]
}

लेकिन जैसा कि मैंने कहा, यह काम नहीं करता है। मैं EC2 उदाहरण (जिसमें इसकी my_es_roleभूमिका जुड़ी हुई है) में लॉग इन करता हूं और "https: //*.es.amazonaws.com" अंतिम बिंदु पर एक सरल कर्ल कॉल चलाने का प्रयास करता हूं, मुझे निम्न त्रुटि मिलती है:

{"संदेश": "उपयोगकर्ता: अनाम प्रदर्शन करने के लिए अधिकृत नहीं है: es: संसाधन पर ESHttpGet: arn: aws: es: us-East-1: [ACCOUNT_ID]: डोमेन / [ES_DOMAIN]" "}

क्या किसी को पता है कि मुझे काम करने के लिए पहुँच नीति में क्या बदलाव करना है?


14
खबरदार, ElasticSearch पहुँच नीति परिवर्तन लागू होने में लंबा समय लगता है, अन्य IAM परिवर्तनों के विपरीत जो लगभग तात्कालिक हैं। "प्रोसेसिंग" पर ध्यान दिए बिना "लागू होना" और स्विच टैब पर क्लिक करना आसान है ...
सिरिल डचन-डोरिस

जवाबों:


63

आप केवल IAM तक पहुँच को बंद कर सकते हैं, लेकिन आप अपने ब्राउज़र में किबाना को कैसे देख पाएंगे? आप एक प्रॉक्सी सेटअप कर सकते हैं ( देखें जिस्ट और / या एनपीएम मॉड्यूल देखें ) या परिणाम देखने के लिए IAM और IP- आधारित एक्सेस दोनों को सक्षम करें।

मैं निम्नलिखित पहुँच नीति के साथ IAM दोनों IP- प्रतिबंधित पहुँच प्राप्त करने में सक्षम था। ध्यान दें आदेश महत्वपूर्ण है: मैं IAM के बयान से पहले आईपी-आधारित बयान के साथ काम नहीं कर सका।

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:xxxxxxxxxxxx:domain/my-elasticsearch-domain/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "192.168.1.0",
            "192.168.1.1"
          ]
        }
      }
    }
  ]
}

मेरे EC2 उदाहरण में arn:aws:iam::aws:policy/AmazonESFullAccess नीति के साथ एक उदाहरण प्रोफ़ाइल है । लॉगस्टैश को लॉगस्टैश-आउटपुट-अमेजन-एस आउटपुट प्लगइन का उपयोग करके अनुरोध पर हस्ताक्षर करना चाहिए । मेरे EC2 उदाहरण पर चलने वाले लॉगस्टैश में इस तरह का आउटपुट सेक्शन शामिल है:

output {
    amazon_es {
        hosts => ["ELASTICSEARCH_HOST"]
        region => "AWS_REGION"
    }
    # If you need to do some testing & debugging, uncomment this line:
    # stdout { codec => rubydebug }
}

मैं पहुँच नीति (192.168.1.0 और 192.168.1.1) में दो आईपी से किबना तक पहुँच सकता हूँ।


नमस्ते, आपको केवल प्लगइन का उपयोग करने की आवश्यकता है यदि आप IAM- आधारित नीति का उपयोग कर रहे हैं। यदि आपकी पहुँच नीति IP पतों पर आधारित है, तो आप लॉगस्टैश में मानक इलास्टिक्स खोज प्लगइन का उपयोग कर सकते हैं। आपको उस मामले में किसी इंस्टेंस प्रोफाइल की जरूरत नहीं है। इसके अलावा, VPCs में ES सेवा उपलब्ध नहीं है। कनेक्ट करने के लिए आपको सार्वजनिक आईपी पते का उपयोग करना होगा। यह निश्चित नहीं है कि यदि आपके संदर्भ 192.168 के पते किसी और चीज के लिए प्रतिस्थापन हैं, लेकिन गुमराह हो सकते हैं।
गैरेथ मैकडैड

aws:SourceIpमेरे उदाहरण में है ताकि आप Kibana उपयोग कर सकते हैं अपने व्यक्तिगत कार्य केंद्र आईपी करने का इरादा कर रहे हैं। IAM- प्रतिबंधित पहुँच एक या अधिक EC2 उदाहरणों को यह सुनिश्चित किए बिना एलिटिक्सखोज को लिखने में सक्षम बनाती है, जिनके बारे में IP किसी विशेष उदाहरण या CIDR ब्लॉक से संबंधित हैं।
पीट

1
यह ध्यान देने योग्य है कि आपके VPC के निजी IP CIDR रेंज तक सीमित होने से काम नहीं लगता है। ES VPC या कुछ के भीतर काम नहीं करता है।
sventechie

आपके उत्तर में नमूना नीति देने के लिए धन्यवाद; जब तक मैं aws:SourceIpआपके द्वारा दिए गए उदाहरण में एक स्केलर मान से किसी सरणी पर स्विच नहीं करता, तब तक मैं "उपयोगकर्ता: अनाम" त्रुटि से किबाना को प्राप्त करने में असमर्थ था । (मैं सीआईडीआर संकेतन, अगर वह किसी और की मदद करता है।) एडब्ल्यूएस ईएस के लिए नीतियां निर्धारित करने की पूरी प्रक्रिया कम निराशाजनक होगी यदि हर एक नीति परिवर्तन ने क्लस्टर को रहस्यमय "प्रसंस्करण" स्थिति में 20 मिनट तक नहीं डाला। नीति पत्थर की गोलियों पर ध्यान से अंकित है, या जो कुछ भी वे कर रहे हैं।
रॉबर्ट कैलहॉन

38

AWS डॉक्टर के अनुसार और जैसा कि आपने (और मैंने) अभी-अभी परीक्षण किया है, आप AWS ES डोमेन को किसी भूमिका / खाते / उपयोगकर्ता / ... तक सीमित नहीं रख सकते हैं और इसे केवल पूरा कर सकते हैं!

मानक क्लाइंट, जैसे कि कर्ल, हस्ताक्षर पर हस्ताक्षर करने की अनुमति नहीं दे सकता है जो कि पहचान-आधारित पहुंच नीतियों की आवश्यकता है। आपको एक आईपी एड्रेस-आधारित एक्सेस नीति का उपयोग करना चाहिए जो इस कदम के निर्देशों को सफलतापूर्वक निष्पादित करने की अनुमति देता है। ( http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html )

तो आपके पास मूल रूप से दो समाधान हैं:

  • अपनी पहुंच नीति बदलें और इसे IP (नों) तक सीमित रखें, मुझे लगता है कि आप निजी IP का उपयोग नहीं कर सकते क्योंकि आपका ES क्लस्टर आपके VPC (डिफ़ॉल्ट या नहीं) से संबंधित नहीं लगता है। कृपया सार्वजनिक आईपी का उपयोग करें
  • अपने अनुरोध पर हस्ताक्षर करें: http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html#es-managedomains-signing-service-requests

अपने अनुरोध पर हस्ताक्षर करना संभवतः सबसे अच्छा समाधान है यदि आप अपनी पहुंच नीति को बनाए रखना चाहते हैं (जो कि आईपी को प्रतिबंधित करने की तुलना में अधिक लचीला है), लेकिन यह थोड़ा अधिक जटिल लगता है। मैंने अब तक कोशिश नहीं की है और मुझे मदद के लिए कोई डॉक्टर नहीं मिल सकता है।


3
मैंने अपने लैपटॉप के सार्वजनिक आईपी पते का उपयोग किया और कर्ल / ब्राउज़र के साथ समापन बिंदु तक पहुंचने का प्रयास किया, लेकिन मुझे अभी भी उपयोगकर्ता: अनाम त्रुटि मिल रही है।
अनंत गुप्ता

7
मैं उसी समस्या से निपट रहा हूं। और मैंने देखा है कि एलेस्टिक्स खोज द्वारा परिवर्तनों को संसाधित करने में एक लूंग टाइम लगता है।
नीमो

एक्सेस स्टेटमेंट को दो स्टेटमेंट्स के साथ सेट करें: एक IAM एक्सेस के लिए लॉग लिखने के लिए, दूसरा IP- प्रतिबंधित एक्सेस के साथ KIbana को देखने के लिए। विवरण के लिए मेरा उत्तर देखें
पीट

2
मुझे आश्चर्य हुआ कि क्या "लूंग" का मतलब मिनट, घंटे या दिन हैं। देखने में इसके 10-15 मिनट लगते हैं। आप देख सकते हैं कि जब आपके ईएस (हरे रंग की 'सक्रिय' स्थिति की जाँच हो रही है, अगर अपडेट पूरा हो गया है, तो, कुछ और नारंगी की तरह तैयार कर रहा है।
Balmipour

मुझे भी यही समस्या थी और खोज करने के बाद मुझे यह आसान पुस्तकालय मिला ।
१२:१६ बजे gmajivu

6

पार्टी के लिए थोड़ी देर हो गई, लेकिन मैं अपने अनुरोधों पर हस्ताक्षर जोड़कर ठीक उसी मुद्दे से निपटने में सक्षम था।

यदि आप पायथन का उपयोग करते हैं (जैसे मैं करता हूं), तो आप इसे लागू करने के लिए विशेष रूप से आसान बनाने के लिए निम्न पुस्तकालय का उपयोग कर सकते हैं: https://github.com/DavidMuller/aws-requests-auth

इसने मेरे लिए पूरी तरह से काम किया।


1

आपको केवल लोचदार खोज नीति में पूर्ण उपयोगकर्ता नाम की आवश्यकता है।

इस स्थिति में, आप त्रुटि संदेश से ही अपना पूरा उपयोगकर्ता नाम प्राप्त कर सकते हैं। मेरे मामले में: "arn: aws: sts :: [ACCOUNT_ID]: ग्रहण-भूमिका / [LAMBDA_POLICY_NAME] / [LAMBDA_NAME]"

    {
        "Version": "2012-10-17",
        "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:sts::xxxxxxxxxxxx:assumed-role/[lambda-role]/[full-lambda-name]"
            ]
          },
          "Action": "es:*",
          "Resource": "arn:aws:es:[region]:xxxxxxxxxxxxx:domain/[elasticsearch-domain-name]/*"
        }
      ]

    }

0

आप IP आधारित नीति के बजाय संसाधन आधारित नीति या पहचान आधारित नीति का उपयोग कर सकते हैं जो IP पते को हार्ड कोडिंग करने जैसा है।

लेकिन आपको अनुरोध पर हस्ताक्षर करने के लिए हस्ताक्षर 4 संस्करण का उपयोग करने की आवश्यकता है

जावा कार्यान्वयन के लिए कृपया http://mytechbites.blogspot.in/2017/04/secure-amazon-elastic-search-service.html देखें


0

भूमिका ARN को बदलने की आवश्यकता है। यह "arn: aws: iam :: [ACCOUNT_ID]: भूमिका / सेवा-भूमिका / my_es_role" जैसा दिखाई देगा


-2

मैं भी ऐसा करने की कोशिश कर रहा हूं, और मुझे Allow access to the domain from specific IP(s)अपने EC2 उदाहरण के लोचदार IP के साथ विकल्प का उपयोग करके काम करना मिल गया (मैं उदाहरण के निजी IP का उपयोग करके भी काम कर सकता हूं, लेकिन मुझे यकीन नहीं है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.