AWS Lambda 使用 C# 代理 ElasticSearch 服务
AWS Lambda to proxy ElasticSearch Service using C#
我正在尝试使用 c# 创建一个 AWS lamda 来访问 AWS ElasticSerch 服务。我创建了一个角色,我的 lambda 函数被配置为使用它可以访问 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/*"
}
]
}
我在 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 Forbidden 错误。我什至尝试为角色设置与 es.amazonaws.com 的信任关系。那也没用。
如果我制作ES集群public,我可以看到响应。
此方法适用于 Lambda 吗?我是否缺少某些权限?
我认为您需要使用签名版本 4 签署您的请求。请参阅 this
我正在尝试使用 c# 创建一个 AWS lamda 来访问 AWS ElasticSerch 服务。我创建了一个角色,我的 lambda 函数被配置为使用它可以访问 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/*"
}
]
}
我在 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 Forbidden 错误。我什至尝试为角色设置与 es.amazonaws.com 的信任关系。那也没用。
如果我制作ES集群public,我可以看到响应。
此方法适用于 Lambda 吗?我是否缺少某些权限?
我认为您需要使用签名版本 4 签署您的请求。请参阅 this