diff --git a/dataprepper/pipelines.yaml b/dataprepper/pipelines.yaml index ac78a7d..d90ccc3 100644 --- a/dataprepper/pipelines.yaml +++ b/dataprepper/pipelines.yaml @@ -3,6 +3,10 @@ chorus-ubi-pipeline: http: port: 2021 ssl: false +# authentication: +# http_basic: +# username: ubi +# password: ubi sink: - opensearch: hosts: [ "http://ubi-dev-os:9200" ] diff --git a/docker-compose.yaml b/docker-compose.yaml index 2aa1d54..6717d94 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -24,6 +24,8 @@ services: logger.level: info OPENSEARCH_INITIAL_ADMIN_PASSWORD: SuperSecretPassword_123 #ubi.dataprepper.url: "http://dataprepper-dev-os:2021/log/ingest" + #ubi.dataprepper.auth.username: "ubi" + #ubi.dataprepper.auth.password: "ubi" ulimits: memlock: soft: -1 diff --git a/src/main/java/org/opensearch/ubi/UbiActionFilter.java b/src/main/java/org/opensearch/ubi/UbiActionFilter.java index 816024b..fbdb536 100644 --- a/src/main/java/org/opensearch/ubi/UbiActionFilter.java +++ b/src/main/java/org/opensearch/ubi/UbiActionFilter.java @@ -8,10 +8,7 @@ package org.opensearch.ubi; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.http.HttpHeaders; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; @@ -44,9 +41,11 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Base64; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -186,11 +185,21 @@ private void sendToDataPrepper(final String dataPrepperUrl, final QueryRequest q try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + final String dataPrepperUserName = environment.settings().get(UbiSettings.DATA_PREPPER_AUTH_USERNAME); + final HttpPost httpPost = new HttpPost(dataPrepperUrl); httpPost.setEntity(new StringEntity(queryRequest.toString())); httpPost.setHeader("Content-type", "application/json"); + if(dataPrepperUserName != null) { + final String dataPrepperPassword = environment.settings().get(UbiSettings.DATA_PREPPER_AUTH_PASSWORD); + final String auth = dataPrepperUserName + ":" + dataPrepperPassword; + final byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes(StandardCharsets.ISO_8859_1)); + final String authHeader = "Basic " + new String(encodedAuth, StandardCharsets.ISO_8859_1); + httpPost.setHeader(HttpHeaders.AUTHORIZATION, authHeader); + } + AccessController.doPrivileged((PrivilegedAction) () -> { try (CloseableHttpResponse response = httpClient.execute(httpPost)) { final int status = response.getStatusLine().getStatusCode(); diff --git a/src/main/java/org/opensearch/ubi/UbiSettings.java b/src/main/java/org/opensearch/ubi/UbiSettings.java index 656962a..02257ac 100644 --- a/src/main/java/org/opensearch/ubi/UbiSettings.java +++ b/src/main/java/org/opensearch/ubi/UbiSettings.java @@ -10,7 +10,6 @@ import org.opensearch.common.settings.Setting; -import java.util.Collections; import java.util.List; /** @@ -23,18 +22,40 @@ public class UbiSettings { */ public static final String DATA_PREPPER_URL = "ubi.dataprepper.url"; + /** + * The optional username for Data Prepper's http_source. + */ + public static final String DATA_PREPPER_AUTH_USERNAME = "ubi.dataprepper.auth.username"; + + /** + * The optional password for Data Prepper's http_source. + */ + public static final String DATA_PREPPER_AUTH_PASSWORD = "ubi.dataprepper.auth.password"; + private static final Setting DATA_PREPPER_URL_SETTING = Setting.simpleString( DATA_PREPPER_URL, Setting.Property.Dynamic, Setting.Property.NodeScope); + private static final Setting DATA_PREPPER_AUTH_USERNAME_SETTING = Setting.simpleString( + DATA_PREPPER_AUTH_USERNAME, + Setting.Property.Dynamic, + Setting.Property.NodeScope); + + private static final Setting DATA_PREPPER_AUTH_PASSWORD_PASSWORD = Setting.simpleString( + DATA_PREPPER_AUTH_PASSWORD, + Setting.Property.Dynamic, + Setting.Property.NodeScope); + /** * Gets a list of the UBI plugin settings. * @return A list of the UBI plugin settings. */ public static List> getSettings() { - return Collections.singletonList( - DATA_PREPPER_URL_SETTING + return List.of( + DATA_PREPPER_URL_SETTING, + DATA_PREPPER_AUTH_USERNAME_SETTING, + DATA_PREPPER_AUTH_PASSWORD_PASSWORD ); }