Amazon Elastic Search Cluster için uygun erişim politikası


99

Yakın zamanda yeni Amazon Elasticsearch Service'i kullanmaya başladım ve ihtiyaç duyduğum erişim politikasını çözemiyorum, böylece hizmetlere yalnızca belirli bir IAM rolü atanmış EC2 bulut sunucularımdan erişebiliyorum.

ES alanı için şu anda atadığım erişim politikasının bir örneği:

{
  "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]/*"
    }
  ]
}

Ama dediğim gibi, bu işe yaramıyor. EC2 my_es_rolebulut sunucusunda (ona bağlı bir role sahip ) oturum açıyorum ve "https: //*.es.amazonaws.com" uç noktasında basit bir curl çağrısı çalıştırmaya çalışıyorum, aşağıdaki hatayı alıyorum:

{"Mesaj": "Kullanıcı: anonim gerçekleştirme yetkisine sahip değil: es: ESHttpGet kaynak: arn: aws: es: us-east-1: [ACCOUNT_ID]: etki alanı / [ES_DOMAIN] /“}

Bunun çalışması için erişim politikasında neyi değiştirmem gerektiğini bilen var mı?


14
Dikkat edin, ElasticSearch erişim politikası değişikliklerinin uygulanması, neredeyse anlık olan diğer IAM değişikliklerinin aksine uzun zaman alır. "İşleniyor ..."
mesajını

Yanıtlar:


63

Erişimi yalnızca IAM'ye kilitleyebilirsiniz, ancak Kibana'yı tarayıcınızda nasıl görüntüleyeceksiniz? Sonuçları görüntülemek için bir proxy kurabilir ( bkz. Temel ve / veya NPM modülü ) veya hem IAM hem de IP tabanlı erişimi etkinleştirebilirsiniz.

Aşağıdaki Erişim İlkesi ile hem IAM erişimi hem de IP kısıtlamalı erişim elde edebildim. Sıranın önemli olduğuna dikkat edin: IAM ifadesinden önce IP tabanlı ifadeyle çalışmasını sağlayamadım.

{
  "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 bulut sunucumun arn:aws:iam::aws:policy/AmazonESFullAccess politikaya sahip bir bulut sunucusu profili var . Logstash, istekleri logstash-output-amazon-es çıktı eklentisini kullanarak imzalamalıdır . EC2 bulut sunucumda çalışan Logstash şunun gibi bir çıktı bölümü içeriyor:

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

Kibana'ya erişim politikasındaki iki IP'den (192.168.1.0 ve 192.168.1.1) erişebilirim.


Merhaba, eklentiyi yalnızca IAM tabanlı bir politika kullanıyorsanız kullanmanız gerekir. Erişim politikanız IP adreslerine dayanıyorsa, Logstash'ta standart elasticsearch eklentisini kullanabilirsiniz. Bu durumda da bir örnek profiline ihtiyacınız yoktur. Ayrıca, ES servisi VPC'lerde mevcut değildir. Bağlanmak için genel ip adreslerini kullanmanız gerekir. 192.168 adresine yaptığınız referansların başka bir şeyin yerine geçtiğinden emin değilim, ancak yanıltıcı olabilir.
Garreth McDaid

aws:SourceIpBenim örnekte 's Kibana kullanabilmeniz için kişisel iş istasyonu IP olması amaçlanmıştır. IAM ile sınırlı erişim, bir veya daha fazla EC2 bulut sunucusunun, hangi IP'lerin belirli bir bulut sunucusuna veya CIDR bloğuna ait olduğu konusunda endişelenmeden Elasticsearch'e yazmasına olanak tanır.
Pete

1
VPC'nizin özel IP CIDR aralığını sınırlamanın işe yaramadığını belirtmekte fayda var . ES, VPC veya başka bir şey içinde çalışmaz.
sventechie

Cevabınızda örnek bir politika verdiğiniz için teşekkür ederiz; Verdiğiniz aws:SourceIpörnekte olduğu gibi, skaler bir değerden bir diziye geçene kadar korkunç "Kullanıcı: anonim" hatasını geçmeden Kibana'yı alamadım . (Eğer başka birine yardımcı oluyorsa, ben CIDR gösterimiyim.) AWS ES için ilke belirleme sürecinin tamamı, her bir ilke değişikliğinin kümeyi 20 dakika boyunca gizemli "işleme" durumuna getirmemesi durumunda daha az sinir bozucu olacaktır. politika dikkatlice taş tabletlere veya ne yapıyorlarsa yapsınlar üzerine yazılmıştır.
Robert Calhoun

38

AWS belgesine göre ve sizin (ve benim) az önce test ettiğimiz gibi, bir AWS ES etki alanına erişimi bir rol / hesap / kullanıcı / ile sınırlayamazsınız ve basitçe cURL edin!

Curl gibi standart istemciler, kimlik tabanlı erişim ilkeleri için gerekli olan istek imzalamayı gerçekleştiremez. Bu adımın talimatlarını başarılı bir şekilde gerçekleştirmek için anonim erişime izin veren IP adresi tabanlı bir erişim ilkesi kullanmalısınız. ( http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg-search.html )

Yani temelde iki çözümünüz var:

Erişim politikanızı olduğu gibi (bir IP ile kısıtlamaktan daha esnektir) korumak istiyorsanız, isteğinizi imzalamak muhtemelen en iyi çözümdür, ancak biraz daha karmaşık görünmektedir. Şimdiye kadar denemedim ve yardım edecek herhangi bir belge bulamıyorum.


3
Dizüstü bilgisayarımın genel IP adresini kullandım ve uç noktaya curl / tarayıcı ile erişmeyi denedim, ancak yine de Kullanıcı: anonim hatası alıyorum.
Anant Gupta

7
Ben de aynı problemle uğraşıyorum. ve değişiklikleri aws elasticsearch ile işlemenin çooook uzun bir zaman aldığını fark ettim.
nemo

İki deyim içeren bir Erişim Politikası belirleyin: biri günlükleri yazmak için IAM erişimi için, diğeri ise KIbana'yı görüntülemek için IP ile sınırlı erişime sahip. Ayrıntılar için cevabımı görün
Pete

2
"Loooong" kelimesinin dakikalar mı, saatler mi yoksa günler mi olduğunu merak ettim. 10-15 dakika gibi görünüyor.
ES'nizin

Aynı sorunu yaşadım ve aradıktan sonra bu kullanışlı kütüphaneyi buldum .
gmajivu


1

Elastik arama politikasında sadece tam kullanıcı ismine ihtiyacınız var.

Bu durumda, tam kullanıcı adınızı hata mesajının kendisinden alabilirsiniz. Benim durumumda: "arn: aws: sts :: [ACCOUNT_ID]: varsayılan-rol / [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

Rol ARN'nin değiştirilmesi gerekiyor. "arn: aws: iam :: [ACCOUNT_ID]: role / service-role / my_es_role" gibi görünecek


-2

Ayrıca bunu yapmaya çalışıyorum ve Allow access to the domain from specific IP(s)EC2 bulut sunucumun Esnek IP seçeneğini kullanarak çalıştırdım (ayrıca örneğin özel IP'sini kullanarak da çalışabilir, ancak çok emin değilim)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.