AWS Lambda для прокси сервиса ElasticSearch с использованием C#
Я пытаюсь создать AWS-лямду, используя C# для доступа к сервису AWS ElasticSerch. Я создал роль, для которой настроена моя лямбда-функция, которая имеет доступ к ElasticSeach. Но разрешение, похоже, не работает.
Вот моя установка:
Я создал политику доступа с правами чтения и записи к службе ES.
Создана роль и назначена вышеуказанная политика
Я предоставил разрешения на эту роль моему кластеру 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/*"
}
]
}
У меня есть простой код в лямбде, чтобы посмотреть, смогу ли я подключиться к нему.
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. Смотрите это