From 3a6e10397f693f1674d9f5ecf260b0e8d28d2530 Mon Sep 17 00:00:00 2001 From: Tq Date: Mon, 16 Jan 2023 16:21:26 +0800 Subject: [PATCH] [feature][api-datasource]add redshift auth mode to get connection by access key (#13379) * submit redshift auth mode * add front end * add doc and fix frontend Co-authored-by: devosend --- docs/docs/en/guide/datasource/redshift.md | 20 +++- docs/docs/zh/guide/datasource/redshift.md | 36 ++++++ .../new_ui/dev/datasource/redshift-iam1.png | Bin 0 -> 37027 bytes .../new_ui/dev/datasource/redshift-iam2.png | Bin 0 -> 26591 bytes .../dev/datasource/redshift-password.png | Bin 0 -> 26254 bytes docs/img/new_ui/dev/datasource/redshift.png | Bin 83630 -> 0 bytes dolphinscheduler-bom/pom.xml | 14 +++ .../common/constants/DataSourceConstants.java | 1 + .../AbstractDataSourceProcessor.java | 5 +- .../pom.xml | 8 ++ .../redshift/RedshiftDataSourceClient.java | 53 +++++++++ .../redshift/param/RedshiftAuthMode.java | 65 +++++++++++ .../param/RedshiftConnectionParam.java | 10 ++ .../param/RedshiftDataSourceParamDTO.java | 20 +++- .../param/RedshiftDataSourceProcessor.java | 105 ++++++++++++++++-- .../RedshiftDataSourceProcessorTest.java | 4 +- .../src/locales/en_US/datasource.ts | 6 + .../src/locales/zh_CN/datasource.ts | 8 +- .../src/service/modules/data-source/types.ts | 1 + .../src/views/datasource/list/detail.tsx | 56 ++++++++-- .../src/views/datasource/list/use-form.ts | 30 ++++- 21 files changed, 413 insertions(+), 29 deletions(-) create mode 100644 docs/docs/zh/guide/datasource/redshift.md create mode 100644 docs/img/new_ui/dev/datasource/redshift-iam1.png create mode 100644 docs/img/new_ui/dev/datasource/redshift-iam2.png create mode 100644 docs/img/new_ui/dev/datasource/redshift-password.png delete mode 100644 docs/img/new_ui/dev/datasource/redshift.png create mode 100644 dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftAuthMode.java diff --git a/docs/docs/en/guide/datasource/redshift.md b/docs/docs/en/guide/datasource/redshift.md index 60dd982492..712815a3e0 100644 --- a/docs/docs/en/guide/datasource/redshift.md +++ b/docs/docs/en/guide/datasource/redshift.md @@ -1,7 +1,5 @@ # Amazon Redshift -![Redshift datasource](../../../../img/new_ui/dev/datasource/redshift.png) - ## Datasource Parameters | **Datasource** | **Description** | @@ -11,11 +9,29 @@ | Description | Enter a description of the datasource. | | IP/Host Name | Enter the Redshift service IP. | | Port | Enter the Redshift service port. | +| Validation | Enter the Redshift authentication mode. | | Username | Set the username for Redshift connection. | | Password | Set the password for Redshift connection. | | Database Name | Enter the database name of the Redshift connection. | | jdbc connect parameters | Parameter settings for Redshift connection, in JSON format. | +| AccessKeyID | Mode IAM-accessKey access key ID. | +| SecretAccessKey | Mode IAM-accessKey secret access key. | + +### Validation: Password + +![password](../../../../img/new_ui/dev/datasource/redshift-password.png) + +Use AWS redshift database username and password to login. + +### Validation: IAM-accessKey + +![IAM1](../../../../img/new_ui/dev/datasource/redshift-iam1.png) +![IAM2](../../../../img/new_ui/dev/datasource/redshift-iam2.png) + +Use cluster ID, AWS Region, port(optional) and IAM to login. ## Native Supported Yes, could use this datasource by default. + +Read more about Redshift IAM JDBC driver configuration reference document [redshift-connect-IAM-jdbc](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-configure-jdbc-odbc.html) diff --git a/docs/docs/zh/guide/datasource/redshift.md b/docs/docs/zh/guide/datasource/redshift.md new file mode 100644 index 0000000000..f08753c971 --- /dev/null +++ b/docs/docs/zh/guide/datasource/redshift.md @@ -0,0 +1,36 @@ +# Amazon Redshift + +## 数据源参数 + +使用数据库服务器的用户名和密码验证。 +- 数据源:选择 AZURE Redshift +- 数据源名称:输入数据源的名称 +- 描述:输入数据源的描述 +- IP 主机名:输入连接 Redshift 的 HOST 或 IP ,例如:cluster-name.xxx.region.redshift.amazonaws.com.cn +- 端口:输入连接 Redshift 的端口,默认5439 +- 验证模式:输入 Redshift 的连接模式,目前支持:Password,IAM-accessKey +- 用户名:设置连接 Redshift 的用户名 +- 密码:设置连接 Redshift 的密码 +- 数据库名:输入连接 Redshift 的数据库名称 +- Jdbc 连接参数:用于 Redshift 连接的参数设置,以 JSON 形式填写 +- AccessKeyID:IAM-accessKey模式下的access key ID +- SecretAccessKey:IAM-accessKey模式下的secret access key + +### 验证: Password + +![password](../../../../img/new_ui/dev/datasource/redshift-password.png) + +使用Redshift数据库的用户名和密码验证。 + +### 验证: IAM-accessKey + +![IAM1](../../../../img/new_ui/dev/datasource/redshift-iam1.png) +![IAM2](../../../../img/new_ui/dev/datasource/redshift-iam2.png) + +使用 cluster ID, AWS Region, port(可选) and IAM信息来登录。 + +## 是否原生支持 + +是,数据源不需要任务附加操作即可使用。 + +参考更多关于Redshift相关的JDBC文档[校验模式](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-iam-credentials-configure-jdbc-odbc.html) diff --git a/docs/img/new_ui/dev/datasource/redshift-iam1.png b/docs/img/new_ui/dev/datasource/redshift-iam1.png new file mode 100644 index 0000000000000000000000000000000000000000..f2355c63ca9b1e99d3a7cbe5c97a15c1fbdb184c GIT binary patch literal 37027 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 g52vdTV`qfq)G1}(xocB1_{0Q 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%0DQ@fltesL8d9I3}ovq9wa_p1a>LOhG37oz%3 zSX`NQ-LaYMXCwvZ%f&toi~n>AIS5J9l2ngTLWX2`h{pn3ZK6S^?0>`a3d<67;kveK7Y56MqmA8d=bM_YZBC3e3OOCOh-#`J+% zp0!s{QojDUQNQ`fPr#c=19*Rd_Wr{^;U_SSdnOQah;!MGP6MPtkoGnGtHoFDJorz2 Chmk4( literal 0 HcmV?d00001 diff --git a/docs/img/new_ui/dev/datasource/redshift-password.png b/docs/img/new_ui/dev/datasource/redshift-password.png new file mode 100644 index 0000000000000000000000000000000000000000..f56c8fbfd44fd73fe5ac46bf2840f2605bcafcee GIT binary patch literal 26254 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 z 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�&z9eI=Ad$Cl;)a?dmatt~qa#z65V)6koq>u%3> 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.15 402 1.7.1 + 2.1.0.9 + 1.12.300 @@ -796,6 +798,18 @@ azure-identity ${azure-identity.version} + + com.amazon.redshift + redshift-jdbc42 + ${redshift-jdbc42.version} + test + + + com.amazonaws + aws-java-sdk-redshift + ${aws-java-sdk-redshift.version} + test + diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java index 7400636a9d..58602ba3b2 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/DataSourceConstants.java @@ -67,6 +67,7 @@ public class DataSourceConstants { public static final String JDBC_DB2 = "jdbc:db2://"; public static final String JDBC_PRESTO = "jdbc:presto://"; public static final String JDBC_REDSHIFT = "jdbc:redshift://"; + public static final String JDBC_REDSHIFT_IAM = "jdbc:redshift:iam://"; public static final String JDBC_ATHENA = "jdbc:awsathena://"; public static final String JDBC_TRINO = "jdbc:trino://"; public static final String JDBC_DAMENG = "jdbc:dm://"; diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/AbstractDataSourceProcessor.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/AbstractDataSourceProcessor.java index ae0bad6b59..a5d7502762 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/AbstractDataSourceProcessor.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/datasource/AbstractDataSourceProcessor.java @@ -49,7 +49,10 @@ public abstract class AbstractDataSourceProcessor implements DataSourceProcessor @Override public void checkDatasourceParam(BaseDataSourceParamDTO baseDataSourceParamDTO) { - checkHost(baseDataSourceParamDTO.getHost()); + if (!baseDataSourceParamDTO.getType().equals(DbType.REDSHIFT)) { + // due to redshift use not regular hosts + checkHost(baseDataSourceParamDTO.getHost()); + } checkDatabasePatter(baseDataSourceParamDTO.getDatabase()); checkOther(baseDataSourceParamDTO.getOther()); } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/pom.xml b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/pom.xml index 041dbea12e..850aef34d1 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/pom.xml +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/pom.xml @@ -38,6 +38,14 @@ org.apache.dolphinscheduler dolphinscheduler-datasource-api + + com.amazon.redshift + redshift-jdbc42 + + + com.amazonaws + aws-java-sdk-redshift + diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftDataSourceClient.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftDataSourceClient.java index c9a31080d5..944d507d6d 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftDataSourceClient.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/RedshiftDataSourceClient.java @@ -18,12 +18,65 @@ package org.apache.dolphinscheduler.plugin.datasource.redshift; import org.apache.dolphinscheduler.plugin.datasource.api.client.CommonDataSourceClient; +import org.apache.dolphinscheduler.plugin.datasource.redshift.param.RedshiftAuthMode; +import org.apache.dolphinscheduler.plugin.datasource.redshift.param.RedshiftConnectionParam; +import org.apache.dolphinscheduler.plugin.datasource.redshift.param.RedshiftDataSourceProcessor; import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; import org.apache.dolphinscheduler.spi.enums.DbType; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.concurrent.TimeUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Stopwatch; + public class RedshiftDataSourceClient extends CommonDataSourceClient { + private static final Logger logger = LoggerFactory.getLogger(RedshiftDataSourceClient.class); + public RedshiftDataSourceClient(BaseConnectionParam baseConnectionParam, DbType dbType) { super(baseConnectionParam, dbType); } + + @Override + public Connection getConnection() { + RedshiftConnectionParam connectionParam = (RedshiftConnectionParam) this.baseConnectionParam; + if (connectionParam.getMode().equals(RedshiftAuthMode.PASSWORD)) { + return super.getConnection(); + } + return RedshiftDataSourceProcessor.getConnectionByIAM(connectionParam); + } + + @Override + public void checkClient() { + RedshiftConnectionParam connectionParam = (RedshiftConnectionParam) this.baseConnectionParam; + Stopwatch stopwatch = Stopwatch.createStarted(); + String validationQuery = this.baseConnectionParam.getValidationQuery(); + if (connectionParam.getMode().equals(RedshiftAuthMode.PASSWORD)) { + // Checking data source client + try { + this.jdbcTemplate.execute(validationQuery); + } catch (Exception e) { + throw new RuntimeException("JDBC connect failed", e); + } finally { + logger.info("Time to execute check jdbc client with sql {} for {} ms ", + this.baseConnectionParam.getValidationQuery(), stopwatch.elapsed(TimeUnit.MILLISECONDS)); + } + } else { + try (Statement statement = getConnection().createStatement()) { + if (!statement.execute(validationQuery)) { + throw new SQLException("execute check redshift access key failed : " + validationQuery); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + logger.info("Time to execute check redshift access key with sql {} for {} ms ", + this.baseConnectionParam.getValidationQuery(), stopwatch.elapsed(TimeUnit.MILLISECONDS)); + } + } + } } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftAuthMode.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftAuthMode.java new file mode 100644 index 0000000000..2fa62ae2eb --- /dev/null +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftAuthMode.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.dolphinscheduler.plugin.datasource.redshift.param; + +import static java.util.stream.Collectors.toMap; + +import java.util.Arrays; +import java.util.Map; +import java.util.NoSuchElementException; + +import com.fasterxml.jackson.annotation.JsonValue; +import com.google.common.base.Functions; + +public enum RedshiftAuthMode { + + PASSWORD(0, "password"), + IAM_ACCESS_KEY(1, "IAM-accessKey"), + ; + + private static final Map AUTH_TYPE_MAP = + Arrays.stream(RedshiftAuthMode.values()).collect(toMap(RedshiftAuthMode::getCode, Functions.identity())); + private final int code; + @JsonValue + private final String descp; + + RedshiftAuthMode(int code, String descp) { + this.code = code; + this.descp = descp; + } + + public static RedshiftAuthMode of(int type) { + if (AUTH_TYPE_MAP.containsKey(type)) { + return AUTH_TYPE_MAP.get(type); + } + return null; + } + + public static RedshiftAuthMode ofName(String name) { + return Arrays.stream(RedshiftAuthMode.values()).filter(e -> e.name().equals(name)).findFirst() + .orElseThrow(() -> new NoSuchElementException("no such auth type")); + } + + public int getCode() { + return code; + } + + public String getDescp() { + return descp; + } +} diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftConnectionParam.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftConnectionParam.java index dd3c2d1b6e..f671e026d0 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftConnectionParam.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftConnectionParam.java @@ -19,8 +19,16 @@ package org.apache.dolphinscheduler.plugin.datasource.redshift.param; import org.apache.dolphinscheduler.spi.datasource.BaseConnectionParam; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class RedshiftConnectionParam extends BaseConnectionParam { + protected RedshiftAuthMode mode; + protected String dbUser; + @Override public String toString() { return "RedshiftConnectionParam{" @@ -33,6 +41,8 @@ public class RedshiftConnectionParam extends BaseConnectionParam { + ", driverClassName='" + driverClassName + '\'' + ", validationQuery='" + validationQuery + '\'' + ", other='" + other + '\'' + + ", dbUser='" + dbUser + '\'' + + ", mode='" + mode + '\'' + '}'; } } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceParamDTO.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceParamDTO.java index e7f5a49246..6fbb4b23e3 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceParamDTO.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceParamDTO.java @@ -20,8 +20,21 @@ package org.apache.dolphinscheduler.plugin.datasource.redshift.param; import org.apache.dolphinscheduler.plugin.datasource.api.datasource.BaseDataSourceParamDTO; import org.apache.dolphinscheduler.spi.enums.DbType; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter public class RedshiftDataSourceParamDTO extends BaseDataSourceParamDTO { + protected RedshiftAuthMode mode; + protected String dbUser; + + @Override + public DbType getType() { + return DbType.REDSHIFT; + } + @Override public String toString() { return "RedshiftDataSourceParamDTO{" @@ -33,11 +46,8 @@ public class RedshiftDataSourceParamDTO extends BaseDataSourceParamDTO { + ", userName='" + userName + '\'' + ", password='" + password + '\'' + ", other='" + other + '\'' + + ", dbUser='" + dbUser + '\'' + + ", mode='" + mode + '\'' + '}'; } - - @Override - public DbType getType() { - return DbType.REDSHIFT; - } } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java index df951f8345..c9163fb5df 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/main/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessor.java @@ -29,6 +29,7 @@ import org.apache.dolphinscheduler.spi.datasource.ConnectionParam; import org.apache.dolphinscheduler.spi.enums.DbType; import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; import java.sql.Connection; import java.sql.DriverManager; @@ -55,8 +56,25 @@ public class RedshiftDataSourceProcessor extends AbstractDataSourceProcessor { String[] hostPortArray = hostSeperator[hostSeperator.length - 1].split(Constants.COMMA); RedshiftDataSourceParamDTO redshiftDatasourceParamDTO = new RedshiftDataSourceParamDTO(); - redshiftDatasourceParamDTO.setPort(Integer.parseInt(hostPortArray[0].split(Constants.COLON)[1])); - redshiftDatasourceParamDTO.setHost(hostPortArray[0].split(Constants.COLON)[0]); + redshiftDatasourceParamDTO.setMode(connectionParams.getMode()); + redshiftDatasourceParamDTO.setDbUser(connectionParams.getDbUser()); + if (connectionParams.getMode().equals(RedshiftAuthMode.PASSWORD)) { + redshiftDatasourceParamDTO.setPort(Integer.parseInt(hostPortArray[0].split(Constants.COLON)[1])); + redshiftDatasourceParamDTO.setHost(hostPortArray[0].split(Constants.COLON)[0]); + } else { + if (hostPortArray[0].contains(Constants.COLON)) { + String portString = hostPortArray[0].split(Constants.COLON)[1]; + if (StringUtils.isNumeric(portString)) { + redshiftDatasourceParamDTO.setPort(Integer.parseInt(portString)); + redshiftDatasourceParamDTO.setHost(hostPortArray[0].split(Constants.COLON)[0]); + } else { + redshiftDatasourceParamDTO.setHost(hostPortArray[0]); + } + } else { + redshiftDatasourceParamDTO.setHost(hostPortArray[0]); + } + + } redshiftDatasourceParamDTO.setDatabase(connectionParams.getDatabase()); redshiftDatasourceParamDTO.setUserName(connectionParams.getUser()); redshiftDatasourceParamDTO.setOther(connectionParams.getOther()); @@ -67,9 +85,7 @@ public class RedshiftDataSourceProcessor extends AbstractDataSourceProcessor { @Override public BaseConnectionParam createConnectionParams(BaseDataSourceParamDTO datasourceParam) { RedshiftDataSourceParamDTO redshiftParam = (RedshiftDataSourceParamDTO) datasourceParam; - String address = - String.format("%s%s:%s", DataSourceConstants.JDBC_REDSHIFT, redshiftParam.getHost(), - redshiftParam.getPort()); + String address = getAddress(redshiftParam); String jdbcUrl = address + Constants.SLASH + redshiftParam.getDatabase(); RedshiftConnectionParam redshiftConnectionParam = new RedshiftConnectionParam(); @@ -81,6 +97,8 @@ public class RedshiftDataSourceProcessor extends AbstractDataSourceProcessor { redshiftConnectionParam.setDatabase(redshiftParam.getDatabase()); redshiftConnectionParam.setDriverClassName(getDatasourceDriver()); redshiftConnectionParam.setValidationQuery(getValidationQuery()); + redshiftConnectionParam.setMode(redshiftParam.getMode()); + redshiftConnectionParam.setDbUser(redshiftParam.getDbUser()); return redshiftConnectionParam; } @@ -114,8 +132,14 @@ public class RedshiftDataSourceProcessor extends AbstractDataSourceProcessor { public Connection getConnection(ConnectionParam connectionParam) throws ClassNotFoundException, SQLException { RedshiftConnectionParam redshiftConnectionParam = (RedshiftConnectionParam) connectionParam; Class.forName(getDatasourceDriver()); - return DriverManager.getConnection(getJdbcUrl(connectionParam), - redshiftConnectionParam.getUser(), PasswordUtils.decodePassword(redshiftConnectionParam.getPassword())); + if (redshiftConnectionParam.getMode().equals(RedshiftAuthMode.PASSWORD)) { + return DriverManager.getConnection(getJdbcUrl(connectionParam), + redshiftConnectionParam.getUser(), + PasswordUtils.decodePassword(redshiftConnectionParam.getPassword())); + } else if (redshiftConnectionParam.getMode().equals(RedshiftAuthMode.IAM_ACCESS_KEY)) { + return getConnectionByIAM(redshiftConnectionParam); + } + return null; } @Override @@ -128,7 +152,34 @@ public class RedshiftDataSourceProcessor extends AbstractDataSourceProcessor { return new RedshiftDataSourceProcessor(); } - private String transformOther(Map otherMap) { + /** + * 2 auth mode + * PASSWORD: address example: jdbc:redshift://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439 + * IAM_ACCESS_KEY: + * address example1: jdbc:redshift:iam://examplecluster:us-west-2 + * address example2: jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439 + * + * @param redshiftParam + * @return + */ + private String getAddress(RedshiftDataSourceParamDTO redshiftParam) { + if (redshiftParam.getMode().equals(RedshiftAuthMode.PASSWORD)) { + return String.format("%s%s:%s", DataSourceConstants.JDBC_REDSHIFT, redshiftParam.getHost(), + redshiftParam.getPort()); + } else if (redshiftParam.getMode().equals(RedshiftAuthMode.IAM_ACCESS_KEY)) { + if (redshiftParam.getPort() == null) { + // construct IAM_ACCESS_KEY example 1 format + return String.format("%s%s", DataSourceConstants.JDBC_REDSHIFT_IAM, redshiftParam.getHost()); + } else { + // construct IAM_ACCESS_KEY example 2 format + return String.format("%s%s:%s", DataSourceConstants.JDBC_REDSHIFT_IAM, redshiftParam.getHost(), + redshiftParam.getPort()); + } + } + return null; + } + + private static String transformOther(Map otherMap) { if (MapUtils.isNotEmpty(otherMap)) { List list = new ArrayList<>(otherMap.size()); otherMap.forEach((key, value) -> list.add(String.format("%s=%s", key, value))); @@ -137,4 +188,42 @@ public class RedshiftDataSourceProcessor extends AbstractDataSourceProcessor { return null; } + /** + * 2 auth mode + * PASSWORD: address example: jdbc:redshift://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev + * IAM_ACCESS_KEY: + * address example1: jdbc:redshift:iam://examplecluster:us-west-2/dev?AccessKeyID=xxx&SecretAccessKey=xxx&DbUser=kristen + * address example2: jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev?AccessKeyID=xxx&SecretAccessKey=xxx&DbUser=kristen + * + * @param redshiftConnectionParam + * @return + */ + public static Connection getConnectionByIAM(RedshiftConnectionParam redshiftConnectionParam) { + String basic; + String authParams = String.format("AccessKeyID=%s&SecretAccessKey=%s&DbUser=%s", + redshiftConnectionParam.getUser(), PasswordUtils.decodePassword(redshiftConnectionParam.getPassword()), + redshiftConnectionParam.getDbUser()); + String connectionUrl; + if (MapUtils.isNotEmpty(redshiftConnectionParam.getOther())) { + basic = String.format("%s?%s", redshiftConnectionParam.getJdbcUrl(), + transformOther(redshiftConnectionParam.getOther())); + // if have other params map, basic will be + // 'jdbc:redshift:iam://examplecluster:us-west-2/dev?param1=xx¶m2=xx' + // append AccessKeyID &SecretAccessKey &DbUser + connectionUrl = String.format("%s&%s", basic, authParams); + } else { + basic = redshiftConnectionParam.getJdbcUrl(); + // if none other params map, basic will be 'jdbc:redshift:iam://examplecluster:us-west-2/dev' + // append AccessKeyID &SecretAccessKey &DbUser + connectionUrl = String.format("%s?%s", basic, authParams); + } + try { + Class.forName(DataSourceConstants.COM_REDSHIFT_JDBC_DRIVER); + return DriverManager.getConnection(connectionUrl); + } catch (SQLException e) { + throw new RuntimeException(e); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/test/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessorTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/test/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessorTest.java index 1c752667b4..2e61f71536 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/test/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessorTest.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-redshift/src/test/java/org/apache/dolphinscheduler/plugin/datasource/redshift/param/RedshiftDataSourceProcessorTest.java @@ -49,7 +49,7 @@ public class RedshiftDataSourceProcessorTest { redshiftDatasourceParamDTO.setUserName("awsuser"); redshiftDatasourceParamDTO.setPassword("123456"); redshiftDatasourceParamDTO.setOther(props); - + redshiftDatasourceParamDTO.setMode(RedshiftAuthMode.PASSWORD); try (MockedStatic mockedStaticPasswordUtils = Mockito.mockStatic(PasswordUtils.class)) { mockedStaticPasswordUtils.when(() -> PasswordUtils.encodePassword(Mockito.anyString())).thenReturn("test"); RedshiftConnectionParam connectionParams = (RedshiftConnectionParam) redshiftDatasourceProcessor @@ -63,7 +63,7 @@ public class RedshiftDataSourceProcessorTest { public void testCreateConnectionParams2() { String connectionJson = "{\"user\":\"awsuser\",\"password\":\"123456\",\"address\":\"jdbc:redshift://localhost:5439\"" - + ",\"database\":\"dev\",\"jdbcUrl\":\"jdbc:redshift://localhost:5439/dev\"}"; + + ",\"database\":\"dev\",\"jdbcUrl\":\"jdbc:redshift://localhost:5439/dev\",\"mode\":\"password\"}"; RedshiftConnectionParam connectionParams = (RedshiftConnectionParam) redshiftDatasourceProcessor .createConnectionParams(connectionJson); Assertions.assertNotNull(connectionParams); diff --git a/dolphinscheduler-ui/src/locales/en_US/datasource.ts b/dolphinscheduler-ui/src/locales/en_US/datasource.ts index 6c1e48eee8..dfa8e6d01d 100644 --- a/dolphinscheduler-ui/src/locales/en_US/datasource.ts +++ b/dolphinscheduler-ui/src/locales/en_US/datasource.ts @@ -86,4 +86,10 @@ export default { clientSecret: 'ClientSecret', OAuth_token_endpoint: 'OAuth 2.0 token endpoint', endpoint_tips: 'Please enter OAuth Token', + AccessKeyID:'AccessKeyID', + AccessKeyID_tips:'Please input AccessKeyID', + SecretAccessKey:'SecretAccessKey', + SecretAccessKey_tips:'Please input SecretAccessKey', + dbUser:'DbUser', + dbUser_tips:'Please input DbUser', } diff --git a/dolphinscheduler-ui/src/locales/zh_CN/datasource.ts b/dolphinscheduler-ui/src/locales/zh_CN/datasource.ts index 48c29992e3..749647270d 100644 --- a/dolphinscheduler-ui/src/locales/zh_CN/datasource.ts +++ b/dolphinscheduler-ui/src/locales/zh_CN/datasource.ts @@ -82,5 +82,11 @@ export default { clientId: 'ClientId', clientSecret: 'ClientSecret', OAuth_token_endpoint: 'OAuth 2.0 token endpoint', - endpoint_tips: '请输入OAuth' + endpoint_tips: '请输入OAuth', + AccessKeyID:'AccessKeyID', + AccessKeyID_tips:'请输入AccessKeyID', + SecretAccessKey:'SecretAccessKey', + SecretAccessKey_tips:'请输入SecretAccessKey', + dbUser:'DbUser', + dbUser_tips:'请输入DbUser', } diff --git a/dolphinscheduler-ui/src/service/modules/data-source/types.ts b/dolphinscheduler-ui/src/service/modules/data-source/types.ts index 0d0b3e8867..aa43909bc4 100644 --- a/dolphinscheduler-ui/src/service/modules/data-source/types.ts +++ b/dolphinscheduler-ui/src/service/modules/data-source/types.ts @@ -72,6 +72,7 @@ interface IDataSource { bindTestId?: number endpoint?: string MSIClientId?: string + dbUser?: string } interface ListReq { diff --git a/dolphinscheduler-ui/src/views/datasource/list/detail.tsx b/dolphinscheduler-ui/src/views/datasource/list/detail.tsx index bb46683265..0d9dd6235a 100644 --- a/dolphinscheduler-ui/src/views/datasource/list/detail.tsx +++ b/dolphinscheduler-ui/src/views/datasource/list/detail.tsx @@ -162,6 +162,7 @@ const DetailModal = defineComponent({ showPrincipal, showMode, modeOptions, + redShitModeOptions, loading, saving, testing, @@ -245,7 +246,9 @@ const DetailModal = defineComponent({ v-show={showPort} label={t('datasource.port')} path='port' - show-require-mark + show-require-mark={ + !(showMode && detailForm.mode === 'IAM-accessKey') + } > {/* SqlPassword */} @@ -427,10 +430,47 @@ const DetailModal = defineComponent({ placeholder={t('datasource.OAuth_token_endpoint')} /> - - - - + + + + + + + + + diff --git a/dolphinscheduler-ui/src/views/datasource/list/use-form.ts b/dolphinscheduler-ui/src/views/datasource/list/use-form.ts index dcf15e766c..0159905a34 100644 --- a/dolphinscheduler-ui/src/views/datasource/list/use-form.ts +++ b/dolphinscheduler-ui/src/views/datasource/list/use-form.ts @@ -54,7 +54,8 @@ export function useForm(id?: number) { testFlag: -1, bindTestId: undefined, endpoint: '', - MSIClientId: '' + MSIClientId: '', + dbUser: '' } as IDataSourceDetail const state = reactive({ @@ -88,6 +89,9 @@ export function useForm(id?: number) { port: { trigger: ['input'], validator() { + if (state.showMode && state.detailForm.mode === 'IAM-accessKey') { + return + } if (!state.detailForm.port && state.showPort) { return new Error(t('datasource.port_tips')) } @@ -180,6 +184,18 @@ export function useForm(id?: number) { } } }, + dbUser: { + trigger: ['input'], + validator() { + if ( + !state.detailForm.dbUser && + state.showMode && + state.detailForm.mode === 'IAM-accessKey' + ) { + return new Error(t('datasource.IAM-accessKey')) + } + } + } // databaseUserName: { // trigger: ['input'], // validator() { @@ -210,6 +226,16 @@ export function useForm(id?: number) { label: "accessToken", value: 'accessToken', }, + ], + redShitModeOptions: [ + { + label: 'password', + value: 'password' + }, + { + label: 'IAM-accessKey', + value: 'IAM-accessKey' + } ] }) @@ -222,7 +248,7 @@ export function useForm(id?: number) { state.showHost = type !== 'ATHENA' state.showPort = type !== 'ATHENA' state.showAwsRegion = type === 'ATHENA' - state.showMode = type === 'AZURESQL' + state.showMode = ['AZURESQL', 'REDSHIFT'].includes(type) if (type === 'ORACLE' && !id) { state.detailForm.connectType = 'ORACLE_SERVICE_NAME'