如何使用.net Core客户端进行AWS签名授权和调用弹性搜索



我正在为AWS使用OKTA身份验证,并运行在C:Usersusername.awscredentials中创建配置文件的工具。我可以看到下面的内容进入文件:

[my.profile]Aws_access_key_id = XXXXAws_secret_access_key = XXXXXAws_session_token = xxxx

我想调用查询弹性搜索使用。net核心和这个配置文件凭证。我试图使用官方。net客户端https://github.com/elastic/elasticsearch-net/,但无法找到如何通过当前配置文件的方法。

配置文件

我可以使用以下代码获得配置文件:

var result = chain.TryGetProfile("my.profile", out CredentialProfile?凭证);If (result) {Environment.SetEnvironmentVariable("AWS_PROFILE"credentials.Name);Environment.SetEnvironmentVariable("AWS_ACCESS_KEY_ID"credentials.Options.AccessKey);Environment.SetEnvironmentVariable("AWS_SECRET_ACCESS_KEY"credentials.Options.SecretKey);Environment.SetEnvironmentVariable("AWS_SESSION_TOKEN"credentials.Options.Token);Environment.SetEnvironmentVariable("AWS_REGION"credentials.Region.SystemName);}

但不确定如何将其传递给客户端以生成签名AWS标头来验证请求。

你能有人帮助我,并提供一些代码来做到这一点吗?

这是我在Startup内部使用的一个扩展方法,用于注册经过身份验证的弹性客户端。

包:

<PackageReference Include="NEST" Version="7.12.1" />
<PackageReference Include="Elasticsearch.Net.Aws" Version="7.1.0" />
代码:

public static void AddElasticsearch(this IServiceCollection services, IConfiguration configuration)
{
var url = "elasticsearch_url";
var defaultIndex = "index_name";
var httpConnection = new AwsHttpConnection();
var pool = new SingleNodeConnectionPool(new Uri(url));
var config = new ConnectionSettings(pool, httpConnection);
config.DefaultIndex(defaultIndex);
config.DefaultFieldNameInferrer(p => p.Normalize());
config.DisableDirectStreaming();
var client = new ElasticClient(config);
services.AddSingleton(client);
}

如果您使用的是由AWS托管的OpenSearch客户端,您将无法使用较新版本的NEST和ElasticSearch包。

相关内容

  • 没有找到相关文章

最新更新