diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/ElasticSearchConfiguration.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/ElasticSearchConfiguration.java index b5a0715176d..85eda25df78 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/ElasticSearchConfiguration.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/ElasticSearchConfiguration.java @@ -26,6 +26,10 @@ public class ElasticSearchConfiguration { @NotEmpty private Integer port; + private String username; + + private String password; + public String getHost() { return host; } @@ -42,11 +46,29 @@ public class ElasticSearchConfiguration { this.port = port; } + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + @Override public String toString() { - return "ElasticSearchConfiguration {" + - ", host=" + host + + return "ElasticSearchConfiguration{" + + "host='" + host + '\'' + ", port=" + port + - "}"; + ", username='" + username + '\'' + + ", password='" + password + '\'' + + '}'; } } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/search/SearchResource.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/search/SearchResource.java index c1736ec4e85..329168af7ef 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/search/SearchResource.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/resources/search/SearchResource.java @@ -17,6 +17,12 @@ package org.openmetadata.catalog.resources.search; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.suggest.Suggest; import org.elasticsearch.search.suggest.SuggestBuilder; @@ -66,9 +72,16 @@ public class SearchResource { private static final Logger LOG = LoggerFactory.getLogger(SearchResource.class); public SearchResource(ElasticSearchConfiguration esConfig) { - this.client = new RestHighLevelClient( - RestClient.builder(new HttpHost(esConfig.getHost(), esConfig.getPort(), "http")) - ); + RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(esConfig.getHost(), esConfig.getPort(), "http")); + if(StringUtils.isNotEmpty(esConfig.getUsername())){ + CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(esConfig.getUsername(), esConfig.getPassword())); + restClientBuilder.setHttpClientConfigCallback(httpAsyncClientBuilder -> { + httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider); + return httpAsyncClientBuilder; + }); + } + this.client = new RestHighLevelClient(restClientBuilder); } @GET diff --git a/ingestion/src/metadata/ingestion/sink/elasticsearch.py b/ingestion/src/metadata/ingestion/sink/elasticsearch.py index 0cb4d3233b7..d9b580f8167 100644 --- a/ingestion/src/metadata/ingestion/sink/elasticsearch.py +++ b/ingestion/src/metadata/ingestion/sink/elasticsearch.py @@ -52,6 +52,8 @@ logger = logging.getLogger(__name__) class ElasticSearchConfig(ConfigModel): es_host: str es_port: int = 9200 + es_username: str + es_password: str index_tables: Optional[bool] = True index_topics: Optional[bool] = True index_dashboards: Optional[bool] = True @@ -88,10 +90,14 @@ class ElasticsearchSink(Sink): self.status = SinkStatus() self.rest = OpenMetadataAPIClient(self.metadata_config) self.elasticsearch_doc_type = "_doc" + http_auth = None + if self.config.es_username: + http_auth = (self.config.es_username, self.config.es_password) self.elasticsearch_client = Elasticsearch( [ {"host": self.config.es_host, "port": self.config.es_port}, - ] + ], + http_auth=http_auth, ) if self.config.index_tables: self._check_or_create_index(