Изменение политики AWS Elastic search с использованием лямбда-функции

#amazon-web-services #aws-lambda #amazon-elasticsearch

#amazon-веб-сервисы #aws-lambda #amazon-elasticsearch

Вопрос:

Я пытаюсь изменить политику доступа к эластичному поиску с помощью лямбда-функции, используя node js, в настоящее время политика доступа выглядит следующим образом

 {
  "Version": "2012-10-17",
  "Statement": [
  {
   "Effect": "Allow",
   "Principal": {
     "AWS": "*"
   },
   "Action": "es:*",
   "Resource": "arn:aws:es:us-east-1:XXXX:domain/YYY/*"
 }
]
}
  

код, который я пробовал в lambda

 var params = {
     DomainName: 'YYYY'
};
const es = new AWS.ES();
es.upgradeElasticsearchDomain(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
});
  

это всегда выдает ошибку
is not authorized to perform: es:UpdateElasticsearchDomainConfig on resource с кодом ошибки "code": "AccessDeniedException",

в param я добавлю AccessPolicies , что это совпадает с политикой, добавленной в моем вопросе, но Effect будет Deny

Комментарии:

1. не могли бы вы поделиться кодом, в котором вы создаете экземпляр своего es-клиента? (скрытие URL, ofc)

2. @ThalesMinussi я только что внес изменения в свой вопрос const es = new AWS.ES();

3. предоставлен ли вашей лямбда-функции ESFullAccess?

4. Я не знаю больше об этом .. как это проверить??

5. Проверьте роль IAM, используемую вашей лямбда-функцией. Вы можете зайти в консоль Lambda AWS и посмотреть, какую роль IAM она использует. Затем перейдите в IAM -> Роли и проверьте, имеет ли роль, прикрепленная к вашей лямбда-функции, полный доступ к ElasticSearch или нет

Ответ №1:

После дальнейшего обсуждения этого с OP выяснилось, что это было из-за отсутствия разрешений для роли IAM, прикрепленной к лямбда-функции.

Для других пользователей, сталкивающихся с такой же проблемой, обязательно подключите ESFullAccess к лямбда-функции, которая работает с ElasticSearch.

Для этого перейдите в IAM -> Роли и выберите роль, прикрепленную к вашей лямбда-функции.

Нажмите «прикрепить политики» и прикрепите ESFullAccess, как показано на рисунке ниже:

введите описание изображения здесь