AWS Lambda для прокси сервиса ElasticSearch с использованием C#

Я пытаюсь создать AWS-лямду, используя C# для доступа к сервису AWS ElasticSerch. Я создал роль, для которой настроена моя лямбда-функция, которая имеет доступ к ElasticSeach. Но разрешение, похоже, не работает.

Вот моя установка:

  1. Я создал политику доступа с правами чтения и записи к службе ES. введите описание изображения здесь

  2. Создана роль и назначена вышеуказанная политика

  3. Я предоставил разрешения на эту роль моему кластеру ES.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::XXXXXXXXXXX:role/lambda-es-role"
      },
      "Action": "es:*",
      "Resource": "arn:aws:es:us-west-2:XXXXXXXXXXXXXx:domain/es-test-es/*"
    }
  ]
}

  1. У меня есть простой код в лямбде, чтобы посмотреть, смогу ли я подключиться к нему.

    public async Task<string> FunctionHandler()
        {
    
            HttpClient client = new HttpClient();
            var response = await client.GetStringAsync("https://XXXXX.us-west-2.es.amazonaws.com/firstindex");
    
            return response;
        }
    

Это дает мне 403 Запрещенную ошибку. Я даже пытался установить доверительные отношения с es.amazonaws.com для этой роли. Это также не сработало.

Если я сделаю кластер ES общедоступным, я смогу увидеть ответ.

Будет ли этот метод работать с лямбда? Я пропускаю некоторые разрешения?

1 ответ

Решение

Я думаю, что вам нужно подписать ваш запрос, используя Signature Version 4. Смотрите это

Другие вопросы по тегам