AWS Lambda使用C#代理ElasticSearch Service

时间:2018-11-20 22:19:48

标签: amazon-web-services aws-lambda aws-elasticsearch aws-sdk-net

我正在尝试使用c#创建一个AWS lamda来访问AWS ElasticSerch服务。我创建了一个角色,可以将我的lambda函数配置为使用该角色,该角色可以访问ElasticSeach。但是许可似乎并不起作用。

这是我的设置:

  1. 我创建了具有对ES服务的读写访问权限的访问策略。 enter image description here

  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. 我在lambda中有一个简单的代码,看是否可以连接到它。

    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群集公开,则可以看到响应。

此方法可用于Lambda吗?我缺少一些权限吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要使用签名版本4签署请求。请参见this