This is an automated email from the ASF dual-hosted git repository.

wenjun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new f754611509 [DSIP-42] Add dolphinscheduler-aws-authentication module  
(#16043)
f754611509 is described below

commit f7546115099bd36c26e57864a50973cc515de360
Author: Wenjun Ruan <[email protected]>
AuthorDate: Fri May 24 14:15:03 2024 +0800

    [DSIP-42] Add dolphinscheduler-aws-authentication module  (#16043)
---
 deploy/kubernetes/dolphinscheduler/README.md       |  11 +-
 .../dolphinscheduler/templates/configmap.yaml      |   2 +-
 deploy/kubernetes/dolphinscheduler/values.yaml     |  21 +--
 docs/docs/en/architecture/configuration.md         |  22 ++-
 docs/docs/en/guide/resource/configuration.md       | 160 ++++-----------------
 docs/docs/en/guide/task/dms.md                     |  17 ++-
 docs/docs/en/guide/task/sagemaker.md               |  17 ++-
 docs/docs/zh/guide/resource/configuration.md       | 157 ++++----------------
 docs/docs/zh/guide/task/dms.md                     |  17 ++-
 docs/docs/zh/guide/task/sagemaker.md               |  17 ++-
 .../assembly/dolphinscheduler-alert-server.xml     |   7 +
 .../main/assembly/dolphinscheduler-api-server.xml  |   7 +
 .../dolphinscheduler-aws-authentication}/pom.xml   |  35 +++--
 .../aws/AWSCredentialsProviderFactor.java          |  74 ++++++++++
 .../aws/AWSCredentialsProviderType.java            |  49 +++++++
 .../AWSDatabaseMigrationServiceClientFactory.java  |  53 +++++++
 .../aws/AmazonElasticMapReduceClientFactory.java   |  53 +++++++
 .../authentication/aws/AmazonS3ClientFactory.java  |  54 +++++++
 .../aws/AmazonSageMakerClientFactory.java          |  53 +++++++
 .../authentication/aws/AwsConfigurationKeys.java   |  28 ++++
 .../authentication/aws/DataSyncClientFactory.java  |  47 ++++++
 .../src/main/resources/aws.yaml                    |  65 +++++++++
 .../pom.xml                                        |  37 +++--
 dolphinscheduler-common/pom.xml                    |   4 +
 .../common/constants/Constants.java                |  15 +-
 .../common/log/remote/S3RemoteLogHandler.java      |  60 +-------
 .../common/utils/PropertyUtils.java                |  16 ++-
 .../src/main/resources/common.properties           |  22 +--
 .../src/main/resources/remote-logging.yaml         |  18 +--
 .../common/utils/PropertyUtilsTest.java            |  13 ++
 .../src/test/resources/common.properties           |   6 +-
 .../src/test/resources/docker/file-manage/aws.yaml |  65 +++++++++
 .../resources/docker/file-manage/common.properties |  11 --
 .../docker/file-manage/docker-compose.yaml         |   1 +
 .../assembly/dolphinscheduler-master-server.xml    |   7 +
 .../dolphinscheduler-standalone-server.xml         |   7 +
 .../plugin/storage/s3/S3StorageOperator.java       |  53 +------
 .../plugin/storage/s3/S3StorageOperatorTest.java   |   9 --
 .../src/test/resources/common.properties           |  11 --
 .../dolphinscheduler-task-datasync/pom.xml         |   8 +-
 .../plugin/task/datasync/DatasyncHook.java         |  19 +--
 .../dolphinscheduler-task-dms/pom.xml              |   8 +-
 .../dolphinscheduler/plugin/task/dms/DmsHook.java  |  20 +--
 .../dolphinscheduler-task-emr/pom.xml              |   9 +-
 .../plugin/task/emr/AbstractEmrTask.java           |  25 +---
 .../dolphinscheduler-task-sagemaker/pom.xml        |  11 +-
 .../plugin/task/sagemaker/SagemakerTask.java       |  18 +--
 .../assembly/dolphinscheduler-worker-server.xml    |   7 +
 pom.xml                                            |   7 +
 49 files changed, 830 insertions(+), 623 deletions(-)

diff --git a/deploy/kubernetes/dolphinscheduler/README.md 
b/deploy/kubernetes/dolphinscheduler/README.md
index c5e75ca938..209e4e3942 100644
--- a/deploy/kubernetes/dolphinscheduler/README.md
+++ b/deploy/kubernetes/dolphinscheduler/README.md
@@ -120,6 +120,12 @@ Please refer to the [Quick Start in 
Kubernetes](../../../docs/docs/en/guide/inst
 | conf.auto | bool | `false` | auto restart, if true, all components will be 
restarted automatically after the common configuration is updated. if false, 
you need to restart the components manually. default is false |
 | conf.common."alert.rpc.port" | int | `50052` | rpc port |
 | conf.common."appId.collect" | string | `"log"` | way to collect 
applicationId: log, aop |
+| conf.common."aws.credentials.provider.type" | string | 
`"AWSStaticCredentialsProvider"` |  |
+| conf.common."aws.s3.access.key.id" | string | `"minioadmin"` | The AWS 
access key. if resource.storage.type=S3, and credentials.provider.type is 
AWSStaticCredentialsProvider. This configuration is required |
+| conf.common."aws.s3.access.key.secret" | string | `"minioadmin"` | The AWS 
secret access key. if resource.storage.type=S3, and credentials.provider.type 
is AWSStaticCredentialsProvider. This configuration is required |
+| conf.common."aws.s3.bucket.name" | string | `"dolphinscheduler"` | The name 
of the bucket. You need to create them by yourself. Otherwise, the system 
cannot start. All buckets in Amazon S3 share a single namespace; ensure the 
bucket is given a unique name. |
+| conf.common."aws.s3.endpoint" | string | `"http://minio:9000"` | You need to 
set this parameter when private cloud s3. If S3 uses public cloud, you only 
need to set resource.aws.region or set to the endpoint of a public cloud such 
as S3.cn-north-1.amazonaws.com.cn |
+| conf.common."aws.s3.region" | string | `"ca-central-1"` | The AWS Region to 
use. if resource.storage.type=S3, This configuration is required |
 | conf.common."conda.path" | string | 
`"/opt/anaconda3/etc/profile.d/conda.sh"` | set path of conda.sh |
 | conf.common."data-quality.jar.dir" | string | `nil` | data quality option |
 | conf.common."data.basedir.path" | string | `"/tmp/dolphinscheduler"` | user 
data local directory path, please make sure the directory exists and have read 
write permissions |
@@ -138,11 +144,6 @@ Please refer to the [Quick Start in 
Kubernetes](../../../docs/docs/en/guide/inst
 | conf.common."resource.alibaba.cloud.oss.bucket.name" | string | 
`"dolphinscheduler"` | oss bucket name, required if you set 
resource.storage.type=OSS |
 | conf.common."resource.alibaba.cloud.oss.endpoint" | string | 
`"https://oss-cn-hangzhou.aliyuncs.com"` | oss bucket endpoint, required if you 
set resource.storage.type=OSS |
 | conf.common."resource.alibaba.cloud.region" | string | `"cn-hangzhou"` | 
alibaba cloud region, required if you set resource.storage.type=OSS |
-| conf.common."resource.aws.access.key.id" | string | `"minioadmin"` | The AWS 
access key. if resource.storage.type=S3 or use EMR-Task, This configuration is 
required |
-| conf.common."resource.aws.region" | string | `"ca-central-1"` | The AWS 
Region to use. if resource.storage.type=S3 or use EMR-Task, This configuration 
is required |
-| conf.common."resource.aws.s3.bucket.name" | string | `"dolphinscheduler"` | 
The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name. |
-| conf.common."resource.aws.s3.endpoint" | string | `"http://minio:9000"` | 
You need to set this parameter when private cloud s3. If S3 uses public cloud, 
you only need to set resource.aws.region or set to the endpoint of a public 
cloud such as S3.cn-north-1.amazonaws.com.cn |
-| conf.common."resource.aws.secret.access.key" | string | `"minioadmin"` | The 
AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required |
 | conf.common."resource.azure.client.id" | string | `"minioadmin"` | azure 
storage account name, required if you set resource.storage.type=ABS |
 | conf.common."resource.azure.client.secret" | string | `"minioadmin"` | azure 
storage account key, required if you set resource.storage.type=ABS |
 | conf.common."resource.azure.subId" | string | `"minioadmin"` | azure storage 
subId, required if you set resource.storage.type=ABS |
diff --git a/deploy/kubernetes/dolphinscheduler/templates/configmap.yaml 
b/deploy/kubernetes/dolphinscheduler/templates/configmap.yaml
index c9af1c00a5..8c1d515ca7 100644
--- a/deploy/kubernetes/dolphinscheduler/templates/configmap.yaml
+++ b/deploy/kubernetes/dolphinscheduler/templates/configmap.yaml
@@ -37,7 +37,7 @@ data:
   {{- range $key, $value := index .Values.conf "common" }}
     {{- if and $.Values.minio.enabled }}
     {{- if eq $key "resource.storage.type" }}{{ $value = "S3" }}{{- end }}
-    {{- if eq $key "resource.aws.s3.endpoint" }}{{ $value = print "http://"; 
(include "dolphinscheduler.minio.fullname" $) ":9000" }}{{- end }}
+    {{- if eq $key "aws.s3.endpoint" }}{{ $value = print "http://"; (include 
"dolphinscheduler.minio.fullname" $) ":9000" }}{{- end }}
     {{- end }}
     {{ $key }}={{ $value }}
   {{- end }}
diff --git a/deploy/kubernetes/dolphinscheduler/values.yaml 
b/deploy/kubernetes/dolphinscheduler/values.yaml
index 61b6f0def2..3481d600fe 100644
--- a/deploy/kubernetes/dolphinscheduler/values.yaml
+++ b/deploy/kubernetes/dolphinscheduler/values.yaml
@@ -250,20 +250,25 @@ conf:
     # -- resource store on HDFS/S3 path, resource file will store to this base 
path, self configuration, please make sure the directory exists on hdfs and 
have read write permissions. "/dolphinscheduler" is recommended
     resource.storage.upload.base.path: /dolphinscheduler
 
-    # -- The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-    resource.aws.access.key.id: minioadmin
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    aws.credentials.provider.type: AWSStaticCredentialsProvider
 
-    # -- The AWS secret access key. if resource.storage.type=S3 or use 
EMR-Task, This configuration is required
-    resource.aws.secret.access.key: minioadmin
+    # -- The AWS access key. if resource.storage.type=S3, and 
credentials.provider.type is AWSStaticCredentialsProvider. This configuration 
is required
+    aws.s3.access.key.id: minioadmin
 
-    # -- The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, 
This configuration is required
-    resource.aws.region: ca-central-1
+    # -- The AWS secret access key. if resource.storage.type=S3, and 
credentials.provider.type is AWSStaticCredentialsProvider. This configuration 
is required
+    aws.s3.access.key.secret: minioadmin
+
+    # -- The AWS Region to use. if resource.storage.type=S3, This 
configuration is required
+    aws.s3.region: ca-central-1
 
     # -- The name of the bucket. You need to create them by yourself. 
Otherwise, the system cannot start. All buckets in Amazon S3 share a single 
namespace; ensure the bucket is given a unique name.
-    resource.aws.s3.bucket.name: dolphinscheduler
+    aws.s3.bucket.name: dolphinscheduler
 
     # -- You need to set this parameter when private cloud s3. If S3 uses 
public cloud, you only need to set resource.aws.region or set to the endpoint 
of a public cloud such as S3.cn-north-1.amazonaws.com.cn
-    resource.aws.s3.endpoint: http://minio:9000
+    aws.s3.endpoint: http://minio:9000
 
     # -- alibaba cloud access key id, required if you set 
resource.storage.type=OSS
     resource.alibaba.cloud.access.key.id: <your-access-key-id>
diff --git a/docs/docs/en/architecture/configuration.md 
b/docs/docs/en/architecture/configuration.md
index cc3bc94fc0..a490e47d89 100644
--- a/docs/docs/en/architecture/configuration.md
+++ b/docs/docs/en/architecture/configuration.md
@@ -191,19 +191,21 @@ The default configuration is as follows:
 
 Note that DolphinScheduler also supports zookeeper related configuration 
through `bin/env/dolphinscheduler_env.sh`.
 
-For ETCD Registry, please see more details on 
[link](https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-etcd/README.md).
-For JDBC Registry, please see more details on 
[link](https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/README.md).
+For ETCD Registry, please see more details
+on 
[link](https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-etcd/README.md).
+For JDBC Registry, please see more details
+on 
[link](https://github.com/apache/dolphinscheduler/blob/dev/dolphinscheduler-registry/dolphinscheduler-registry-plugins/dolphinscheduler-registry-jdbc/README.md).
 
 ### common.properties [hadoop、s3、yarn config properties]
 
 Currently, common.properties mainly configures Hadoop,s3a related 
configurations. Configuration file location:
 
-|    Service    |           Configuration file           |
-|---------------|----------------------------------------|
-| Master Server | `master-server/conf/common.properties` |
-| Api Server    | `api-server/conf/common.properties`    |
-| Worker Server | `worker-server/conf/common.properties` |
-| Alert Server  | `alert-server/conf/common.properties`  |
+|    Service    |                          Configuration file                  
         |
+|---------------|-----------------------------------------------------------------------|
+| Master Server | `master-server/conf/common.properties`                       
         |
+| Api Server    | `api-server/conf/common.properties`, 
`api-server/conf/aws.yaml`       |
+| Worker Server | `worker-server/conf/common.properties`, 
`worker-server/conf/aws.yaml` |
+| Alert Server  | `alert-server/conf/common.properties`                        
         |
 
 The default configuration is as follows:
 
@@ -212,10 +214,6 @@ The default configuration is as follows:
 | data.basedir.path                             | /tmp/dolphinscheduler        
                    | local directory used to store temp files                  
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 | resource.storage.type                         | NONE                         
                    | type of resource files: HDFS, S3, OSS, GCS, ABS, NONE     
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 | resource.upload.path                          | /dolphinscheduler            
                    | storage path of resource files                            
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-| aws.access.key.id                             | minioadmin                   
                    | access key id of S3                                       
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-| aws.secret.access.key                         | minioadmin                   
                    | secret access key of S3                                   
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-| aws.region                                    | us-east-1                    
                    | region of S3                                              
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-| aws.s3.endpoint                               | http://minio:9000            
                    | endpoint of S3                                            
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 | hdfs.root.user                                | hdfs                         
                    | configure users with corresponding permissions if storage 
type is HDFS                                                                    
                                                                                
                                                                                
                                                                                
              [...]
 | fs.defaultFS                                  | hdfs://mycluster:8020        
                    | If resource.storage.type=S3, then the request url would 
be similar to 's3a://dolphinscheduler'. Otherwise if resource.storage.type=HDFS 
and hadoop supports HA, copy core-site.xml and hdfs-site.xml into 'conf' 
directory                                                                       
                                                                                
                       [...]
 | hadoop.security.authentication.startup.state  | false                        
                    | whether hadoop grant kerberos permission                  
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
diff --git a/docs/docs/en/guide/resource/configuration.md 
b/docs/docs/en/guide/resource/configuration.md
index 6bee9e5a67..1c5b389302 100644
--- a/docs/docs/en/guide/resource/configuration.md
+++ b/docs/docs/en/guide/resource/configuration.md
@@ -28,74 +28,37 @@ The configuration you may need to change:
 
 ## connect AWS S3
 
-if you want to upload resources to `Resource Center` connected to `S3`, you 
need to configure `api-server/conf/common.properties` and 
`worker-server/conf/common.properties`. You can refer to the following:
+if you want to upload resources to `Resource Center` connected to `S3`, you 
need to configure `api-server/conf/common.properties`, 
`api-server/conf/aws.yaml` and `worker-server/conf/common.properties`, 
`worker-server/conf/aws.yaml`. You can refer to the following:
 
 config the following fields
 
 ```properties
-......
 
 resource.storage.type=S3
+```
 
-......
-
-resource.aws.access.key.id=aws_access_key_id
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=aws_secret_access_key
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=us-west-2
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s4. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=
+```yaml
+aws:
+    s3:
+        # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+        # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+        # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+        credentials.provider.type: AWSStaticCredentialsProvider
+        access.key.id: <access.key.id>
+        access.key.secret: <access.key.secret>
+        region: <region>
+        bucket.name: <bucket.name>
+        endpoint: <endpoint>
 
-......
 ```
 
-## Use HDFS or Remote Object Storage
+## connect OSS S3
 
-After version 3.0.0-alpha, if you want to upload resources to `Resource 
Center` connected to `HDFS`, you need to configure 
`api-server/conf/common.properties` and `worker-server/conf/common.properties`.
+if you want to upload resources to `Resource Center` connected to `OSS`, you 
need to configure `api-server/conf/common.properties` and 
`worker-server/conf/common.properties`. You can refer to the following:
 
-```properties
-#
-# 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.
-#
-
-# user data local directory path, please make sure the directory exists and 
have read write permissions
-data.basedir.path=/tmp/dolphinscheduler
-
-# resource view suffixs
-#resource.view.suffixs=txt,log,sh,bat,conf,cfg,py,java,sql,xml,hql,properties,json,yml,yaml,ini,js
-
-# resource storage type: LOCAL, HDFS, S3, OSS, GCS, ABS, OBS
-resource.storage.type=LOCAL
-# resource store on HDFS/S3/OSS path, resource file will store to this base 
path, self configuration, please make sure the directory exists on hdfs and 
have read write permissions. "/dolphinscheduler" is recommended
-resource.storage.upload.base.path=/tmp/dolphinscheduler
-
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=minioadmin
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=minioadmin
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=cn-north-1
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s3. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=http://localhost:9000
+config the following fields
 
+```properties
 # alibaba cloud access key id, required if you set resource.storage.type=OSS 
 resource.alibaba.cloud.access.key.id=<your-access-key-id>
 # alibaba cloud access key secret, required if you set 
resource.storage.type=OSS
@@ -107,89 +70,24 @@ resource.alibaba.cloud.oss.bucket.name=dolphinscheduler
 # oss bucket endpoint, required if you set resource.storage.type=OSS
 resource.alibaba.cloud.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
 
-# alibaba cloud access key id, required if you set resource.storage.type=OBS
+```
+
+## connect OBS S3
+
+if you want to upload resources to `Resource Center` connected to `OBS`, you 
need to configure `api-server/conf/common.properties` and 
`worker-server/conf/common.properties`. You can refer to the following:
+
+config the following fields
+
+```properties
+# access key id, required if you set resource.storage.type=OBS
 resource.huawei.cloud.access.key.id=<your-access-key-id>
-# alibaba cloud access key secret, required if you set 
resource.storage.type=OBS
+# access key secret, required if you set resource.storage.type=OBS
 resource.huawei.cloud.access.key.secret=<your-access-key-secret>
 # oss bucket name, required if you set resource.storage.type=OBS
 resource.huawei.cloud.obs.bucket.name=dolphinscheduler
 # oss bucket endpoint, required if you set resource.storage.type=OBS
 resource.huawei.cloud.obs.endpoint=obs.cn-southwest-2.huaweicloud.com
 
-# if resource.storage.type=HDFS, the user must have the permission to create 
directories under the HDFS root path
-resource.hdfs.root.user=hdfs
-# if resource.storage.type=S3, the value like: s3a://dolphinscheduler; if 
resource.storage.type=HDFS and namenode HA is enabled, you need to copy 
core-site.xml and hdfs-site.xml to conf dir
-resource.hdfs.fs.defaultFS=hdfs://mycluster:8020
-
-# whether to startup kerberos
-hadoop.security.authentication.startup.state=false
-
-# java.security.krb5.conf path
-java.security.krb5.conf.path=/opt/krb5.conf
-
-# login user from keytab username
[email protected]
-
-# login user from keytab path
-login.user.keytab.path=/opt/hdfs.headless.keytab
-
-# kerberos expire time, the unit is hour
-kerberos.expire.time=2
-
-
-# resourcemanager port, the default value is 8088 if not specified
-resource.manager.httpaddress.port=8088
-# if resourcemanager HA is enabled, please set the HA IPs; if resourcemanager 
is single, keep this value empty
-yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
-# if resourcemanager HA is enabled or not use resourcemanager, please keep the 
default value; If resourcemanager is single, you only need to replace ds1 to 
actual resourcemanager hostname
-yarn.application.status.address=http://ds1:%s/ws/v1/cluster/apps/%s
-# job history status url when application number threshold is reached(default 
10000, maybe it was set to 1000)
-yarn.job.history.status.address=http://ds1:19888/ws/v1/history/mapreduce/jobs/%s
-
-# datasource encryption enable
-datasource.encryption.enable=false
-
-# datasource encryption salt
-datasource.encryption.salt=!@#$%^&*
-
-# data quality jar directory path, it would auto discovery data quality jar 
from this given dir. You should keep it empty if you do not change anything in
-# data-quality, it will auto discovery by dolphinscheduler itself. Change it 
only if you want to use your own data-quality jar and it is not in worker-server
-# libs directory(but may sure your jar name start with 
`dolphinscheduler-data-quality`).
-data-quality.jar.dir=
-
-#data-quality.error.output.path=/tmp/data-quality-error-data
-
-# Network IP gets priority, default inner outer
-
-# Whether hive SQL is executed in the same session
-support.hive.oneSession=false
-
-# use sudo or not, if set true, executing user is tenant user and deploy user 
needs sudo permissions; if set false, executing user is the deploy user and 
doesn't need sudo permissions
-sudo.enable=true
-
-# network interface preferred like eth0, default: empty
-#dolphin.scheduler.network.interface.preferred=
-
-# network IP gets priority, default: inner outer
-#dolphin.scheduler.network.priority.strategy=default
-
-# system env path
-#dolphinscheduler.env.path=dolphinscheduler_env.sh
-
-# development state
-development.state=false
-
-# rpc port
-alert.rpc.port=50052
-
-# set path of conda.sh
-conda.path=/opt/anaconda3/etc/profile.d/conda.sh
-
-# Task resource limit state
-task.resource.limit.state=false
-
-# way to collect applicationId: log(original regex match), aop
-appId.collect: log
 ```
 
 > **Note:**
diff --git a/docs/docs/en/guide/task/dms.md b/docs/docs/en/guide/task/dms.md
index a19ec4ba4b..89cf2ef4db 100644
--- a/docs/docs/en/guide/task/dms.md
+++ b/docs/docs/en/guide/task/dms.md
@@ -73,14 +73,17 @@ Parameters of restarting the task by interface
 
 ## Environment to prepare
 
-Some AWS configuration is required, modify a field in file `common.properties`
+Some AWS configuration is required, modify a field in file `aws.yaml`
 
 ```yaml
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=<YOUR AWS ACCESS KEY>
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=<YOUR AWS SECRET KEY>
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=<AWS REGION>
+dms:
+  # The AWS credentials provider type. support: AWSStaticCredentialsProvider, 
InstanceProfileCredentialsProvider
+  # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+  # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+  credentials.provider.type: AWSStaticCredentialsProvider
+  access.key.id: <access.key.id>
+  access.key.secret: <access.key.secret>
+  region: <region>
+  endpoint: <endpoint>
 ```
 
diff --git a/docs/docs/en/guide/task/sagemaker.md 
b/docs/docs/en/guide/task/sagemaker.md
index 7782377130..b520dd33cc 100644
--- a/docs/docs/en/guide/task/sagemaker.md
+++ b/docs/docs/en/guide/task/sagemaker.md
@@ -35,14 +35,17 @@ The task plugin are shown as follows:
 
 ## Environment to prepare
 
-Some AWS configuration is required, modify a field in file `common.properties`
+Some AWS configuration is required, modify a field in file `aws.yaml`
 
 ```yaml
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=<YOUR AWS ACCESS KEY>
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=<YOUR AWS SECRET KEY>
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=<AWS REGION>
+sagemaker:
+  # The AWS credentials provider type. support: AWSStaticCredentialsProvider, 
InstanceProfileCredentialsProvider
+  # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+  # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+  credentials.provider.type: AWSStaticCredentialsProvider
+  access.key.id: <access.key.id>
+  access.key.secret: <access.key.secret>
+  region: <region>
+  endpoint: <endpoint>
 ```
 
diff --git a/docs/docs/zh/guide/resource/configuration.md 
b/docs/docs/zh/guide/resource/configuration.md
index 19a34c577c..735c75da97 100644
--- a/docs/docs/zh/guide/resource/configuration.md
+++ b/docs/docs/zh/guide/resource/configuration.md
@@ -26,77 +26,35 @@ Dolphinscheduler 资源中心使用本地系统默认是开启的,不需要用
 
 ## 对接AWS S3
 
-如果需要使用到资源中心的 S3 上传资源,我们需要对以下路径的进行配置:`api-server/conf/common.properties` 和 
`worker-server/conf/common.properties`。可参考如下:
+如果需要使用到资源中心的 S3 上传资源,我们需要对以下路径的进行配置:`api-server/conf/common.properties`, 
`api-server/conf/aws.yaml` 和 `worker-server/conf/common.properties`, 
`worker-server/conf/aws.yaml`。可参考如下:
 
 配置以下字段
 
 ```properties
-......
 
 resource.storage.type=S3
-
-......
-
-resource.aws.access.key.id=aws_access_key_id
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=aws_secret_access_key
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=us-west-2
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s4. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=
-
-......
 ```
 
-## 对接分布式或远端对象存储
+```yaml
+aws:
+    s3:
+        # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+        # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+        # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+        credentials.provider.type: AWSStaticCredentialsProvider
+        access.key.id: <access.key.id>
+        access.key.secret: <access.key.secret>
+        region: <region>
+        bucket.name: <bucket.name>
+        endpoint: <endpoint>
 
-当需要使用资源中心进行相关文件的创建或者上传操作时,所有的文件和资源都会被存储在分布式文件系统`HDFS`或者远端的对象存储,如`S3`上。所以需要进行以下配置:
+```
 
-### 配置 common.properties 文件
+## 对接阿里云 OSS
 
-在 3.0.0-alpha 版本之后,如果需要使用到资源中心的 HDFS 或 S3 
上传资源,我们需要对以下路径的进行配置:`api-server/conf/common.properties` 和 
`worker-server/conf/common.properties`。可参考如下:
+如果需要使用到资源中心的 OSS 上传资源,我们需要对以下路径的进行配置:`api-server/conf/common.properties` 和 
`worker-server/conf/common.properties`。可参考如下:
 
 ```properties
-#
-# 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.
-#
-
-# user data local directory path, please make sure the directory exists and 
have read write permissions
-data.basedir.path=/tmp/dolphinscheduler
-
-# resource storage type: LOCAL, HDFS, S3, OSS, GCS, ABS, OBS
-resource.storage.type=LOCAL
-
-# resource store on HDFS/S3/OSS path, resource file will store to this hadoop 
hdfs path, self configuration,
-# please make sure the directory exists on hdfs and have read write 
permissions. "/dolphinscheduler" is recommended
-resource.storage.upload.base.path=/tmp/dolphinscheduler
-
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=minioadmin
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=minioadmin
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=cn-north-1
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s3. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=http://localhost:9000
-
 # alibaba cloud access key id, required if you set resource.storage.type=OSS 
 resource.alibaba.cloud.access.key.id=<your-access-key-id>
 # alibaba cloud access key secret, required if you set 
resource.storage.type=OSS
@@ -108,87 +66,22 @@ resource.alibaba.cloud.oss.bucket.name=dolphinscheduler
 # oss bucket endpoint, required if you set resource.storage.type=OSS
 resource.alibaba.cloud.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
 
-# alibaba cloud access key id, required if you set resource.storage.type=OBS
+```
+
+## 对接华为云 OBS
+
+如果需要使用到资源中心的 OBS 上传资源,我们需要对以下路径的进行配置:`api-server/conf/common.properties` 和 
`worker-server/conf/common.properties`。可参考如下:
+
+```properties
+# access key id, required if you set resource.storage.type=OBS
 resource.huawei.cloud.access.key.id=<your-access-key-id>
-# alibaba cloud access key secret, required if you set 
resource.storage.type=OBS
+# access key secret, required if you set resource.storage.type=OBS
 resource.huawei.cloud.access.key.secret=<your-access-key-secret>
 # oss bucket name, required if you set resource.storage.type=OBS
 resource.huawei.cloud.obs.bucket.name=dolphinscheduler
 # oss bucket endpoint, required if you set resource.storage.type=OBS
 resource.huawei.cloud.obs.endpoint=obs.cn-southwest-2.huaweicloud.com
 
-# if resource.storage.type=HDFS, the user must have the permission to create 
directories under the HDFS root path
-resource.hdfs.root.user=root
-# if resource.storage.type=S3, the value like: s3a://dolphinscheduler;
-# if resource.storage.type=HDFS and namenode HA is enabled, you need to copy 
core-site.xml and hdfs-site.xml to conf dir
-resource.hdfs.fs.defaultFS=hdfs://localhost:8020
-
-# whether to startup kerberos
-hadoop.security.authentication.startup.state=false
-
-# java.security.krb5.conf path
-java.security.krb5.conf.path=/opt/krb5.conf
-
-# login user from keytab username
[email protected]
-
-# login user from keytab path
-login.user.keytab.path=/opt/hdfs.headless.keytab
-
-# kerberos expire time, the unit is hour
-kerberos.expire.time=2
-# resource view suffixs
-#resource.view.suffixs=txt,log,sh,bat,conf,cfg,py,java,sql,xml,hql,properties,json,yml,yaml,ini,js
-
-# resourcemanager port, the default value is 8088 if not specified
-resource.manager.httpaddress.port=8088
-# if resourcemanager HA is enabled, please set the HA IPs; if resourcemanager 
is single, keep this value empty
-yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
-# if resourcemanager HA is enabled or not use resourcemanager, please keep the 
default value;
-# If resourcemanager is single, you only need to replace ds1 to actual 
resourcemanager hostname
-yarn.application.status.address=http://localhost:%s/ds/v1/cluster/apps/%s
-# job history status url when application number threshold is reached(default 
10000, maybe it was set to 1000)
-yarn.job.history.status.address=http://localhost:19888/ds/v1/history/mapreduce/jobs/%s
-
-# datasource encryption enable
-datasource.encryption.enable=false
-
-# datasource encryption salt
-datasource.encryption.salt=!@#$%^&*
-
-# data quality jar directory path, it would auto discovery data quality jar 
from this given dir. You should keep it empty if you do not change anything in
-# data-quality, it will auto discovery by dolphinscheduler itself. Change it 
only if you want to use your own data-quality jar and it is not in worker-server
-# libs directory(but may sure your jar name start with 
`dolphinscheduler-data-quality`).
-data-quality.jar.dir=
-
-#data-quality.error.output.path=/tmp/data-quality-error-data
-
-# Network IP gets priority, default inner outer
-
-# Whether hive SQL is executed in the same session
-support.hive.oneSession=false
-
-# use sudo or not, if set true, executing user is tenant user and deploy user 
needs sudo permissions;
-# if set false, executing user is the deploy user and doesn't need sudo 
permissions
-sudo.enable=true
-
-# network interface preferred like eth0, default: empty
-#dolphin.scheduler.network.interface.preferred=
-
-# network IP gets priority, default: inner outer
-#dolphin.scheduler.network.priority.strategy=default
-
-# system env path
-#dolphinscheduler.env.path=env/dolphinscheduler_env.sh
-
-# development state
-development.state=false
-
-# rpc port
-alert.rpc.port=50052
-
-# way to collect applicationId: log(original regex match), aop
-appId.collect: log
 ```
 
 > **注意**:
diff --git a/docs/docs/zh/guide/task/dms.md b/docs/docs/zh/guide/task/dms.md
index 6013f45aef..8a87a36f9a 100644
--- a/docs/docs/zh/guide/task/dms.md
+++ b/docs/docs/zh/guide/task/dms.md
@@ -73,14 +73,17 @@ DolphinScheduler 在 启动DMS 任务后,会跟中DMS任务状态,直至DMS
 
 ## 环境配置
 
-需要进行AWS的一些配置,修改`common.properties`中的以下配置信息
+需要进行AWS的一些配置,修改`aws.yml`中的以下配置信息
 
 ```yaml
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=<YOUR AWS ACCESS KEY>
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=<YOUR AWS SECRET KEY>
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=<AWS REGION>
+dms:
+  # The AWS credentials provider type. support: AWSStaticCredentialsProvider, 
InstanceProfileCredentialsProvider
+  # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+  # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+  credentials.provider.type: AWSStaticCredentialsProvider
+  access.key.id: <access.key.id>
+  access.key.secret: <access.key.secret>
+  region: <region>
+  endpoint: <endpoint>
 ```
 
diff --git a/docs/docs/zh/guide/task/sagemaker.md 
b/docs/docs/zh/guide/task/sagemaker.md
index e4b4c61542..22927171e9 100644
--- a/docs/docs/zh/guide/task/sagemaker.md
+++ b/docs/docs/zh/guide/task/sagemaker.md
@@ -33,14 +33,17 @@ DolphinScheduler SageMaker 组件的功能:
 
 ## 环境配置
 
-需要进行AWS的一些配置,修改`common.properties`中的`xxxxx`为你的配置信息
+需要进行AWS的一些配置,修改`aws.yml`中的以下配置信息
 
 ```yaml
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=<YOUR AWS ACCESS KEY>
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=<YOUR AWS SECRET KEY>
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=<AWS REGION>
+sagemaker:
+  # The AWS credentials provider type. support: AWSStaticCredentialsProvider, 
InstanceProfileCredentialsProvider
+  # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+  # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+  credentials.provider.type: AWSStaticCredentialsProvider
+  access.key.id: <access.key.id>
+  access.key.secret: <access.key.secret>
+  region: <region>
+  endpoint: <endpoint>
 ```
 
diff --git 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/assembly/dolphinscheduler-alert-server.xml
 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/assembly/dolphinscheduler-alert-server.xml
index bf28193b3f..24c8fb2f11 100644
--- 
a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/assembly/dolphinscheduler-alert-server.xml
+++ 
b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/assembly/dolphinscheduler-alert-server.xml
@@ -56,6 +56,13 @@
             </includes>
             <outputDirectory>conf</outputDirectory>
         </fileSet>
+        <fileSet>
+            
<directory>${basedir}/../dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources</directory>
+            <includes>
+                <include>**/*.yaml</include>
+            </includes>
+            <outputDirectory>conf</outputDirectory>
+        </fileSet>
     </fileSets>
     <dependencySets>
         <dependencySet>
diff --git 
a/dolphinscheduler-api/src/main/assembly/dolphinscheduler-api-server.xml 
b/dolphinscheduler-api/src/main/assembly/dolphinscheduler-api-server.xml
index c9fdab4d51..5453f8fb15 100644
--- a/dolphinscheduler-api/src/main/assembly/dolphinscheduler-api-server.xml
+++ b/dolphinscheduler-api/src/main/assembly/dolphinscheduler-api-server.xml
@@ -57,6 +57,13 @@
             </includes>
             <outputDirectory>conf</outputDirectory>
         </fileSet>
+        <fileSet>
+            
<directory>${basedir}/../dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources</directory>
+            <includes>
+                <include>**/*.yaml</include>
+            </includes>
+            <outputDirectory>conf</outputDirectory>
+        </fileSet>
         <fileSet>
             <directory>${basedir}/../dolphinscheduler-ui/dist</directory>
             <outputDirectory>./ui</outputDirectory>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/pom.xml
similarity index 69%
copy from dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml
copy to 
dolphinscheduler-authentication/dolphinscheduler-aws-authentication/pom.xml
index b3e1edb79f..9bad537cd9 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/pom.xml
@@ -20,34 +20,45 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.dolphinscheduler</groupId>
-        <artifactId>dolphinscheduler-task-plugin</artifactId>
+        <artifactId>dolphinscheduler-authentication</artifactId>
         <version>dev-SNAPSHOT</version>
     </parent>
 
-    <artifactId>dolphinscheduler-task-datasync</artifactId>
-    <packaging>jar</packaging>
+    <artifactId>dolphinscheduler-aws-authentication</artifactId>
 
     <dependencies>
+
         <dependency>
-            <groupId>org.apache.dolphinscheduler</groupId>
-            <artifactId>dolphinscheduler-spi</artifactId>
-            <scope>provided</scope>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-emr</artifactId>
         </dependency>
+
         <dependency>
-            <groupId>org.apache.dolphinscheduler</groupId>
-            <artifactId>dolphinscheduler-task-api</artifactId>
-            <scope>provided</scope>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-s3</artifactId>
         </dependency>
-        <!-- 
https://mvnrepository.com/artifact/software.amazon.awssdk/datasync -->
+
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-sagemaker</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.amazonaws</groupId>
+            <artifactId>aws-java-sdk-dms</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>software.amazon.awssdk</groupId>
             <artifactId>datasync</artifactId>
         </dependency>
+
         <dependency>
-            <groupId>org.apache.dolphinscheduler</groupId>
-            <artifactId>dolphinscheduler-common</artifactId>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
             <scope>provided</scope>
         </dependency>
+
     </dependencies>
 
 </project>
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSCredentialsProviderFactor.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSCredentialsProviderFactor.java
new file mode 100644
index 0000000000..c79c70d8c2
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSCredentialsProviderFactor.java
@@ -0,0 +1,74 @@
+/*
+ * 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.authentication.aws;
+
+import static 
org.apache.dolphinscheduler.authentication.aws.AwsConfigurationKeys.AWS_AUTHENTICATION_TYPE;
+
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.auth.InstanceProfileCredentialsProvider;
+
+@Slf4j
+@UtilityClass
+public class AWSCredentialsProviderFactor {
+
+    public static AWSCredentialsProvider credentialsProvider(Map<String, 
String> awsProperties) {
+        String awsAuthenticationType = awsProperties.getOrDefault(
+                AWS_AUTHENTICATION_TYPE, 
AWSCredentialsProviderType.STATIC_CREDENTIALS_PROVIDER.getName());
+        AWSCredentialsProviderType awsCredentialsProviderType =
+                
AWSCredentialsProviderType.of(awsAuthenticationType).orElse(null);
+        if (awsCredentialsProviderType == null) {
+            throw new IllegalArgumentException(
+                    "The aws.credentials.provider.type: " + 
awsAuthenticationType + " is invalidated");
+        }
+        switch (awsCredentialsProviderType) {
+            case STATIC_CREDENTIALS_PROVIDER:
+                return createAWSStaticCredentialsProvider(awsProperties);
+            case INSTANCE_PROFILE_CREDENTIALS_PROVIDER:
+                return createInstanceProfileCredentialsProvider();
+            default:
+                throw new IllegalArgumentException(
+                        "The aws.credentials.provider.type: " + 
awsAuthenticationType + " is invalidated");
+        }
+
+    }
+
+    private static AWSCredentialsProvider 
createAWSStaticCredentialsProvider(Map<String, String> awsProperties) {
+        String awsAccessKeyId = 
awsProperties.get(AwsConfigurationKeys.AWS_ACCESS_KEY_ID);
+        String awsSecretAccessKey = 
awsProperties.get(AwsConfigurationKeys.AWS_SECRET);
+        final BasicAWSCredentials basicAWSCredentials = new 
BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);
+        AWSStaticCredentialsProvider awsStaticCredentialsProvider =
+                new AWSStaticCredentialsProvider(basicAWSCredentials);
+        log.info("AWSStaticCredentialsProvider created successfully");
+        return awsStaticCredentialsProvider;
+    }
+
+    private static AWSCredentialsProvider 
createInstanceProfileCredentialsProvider() {
+        InstanceProfileCredentialsProvider instanceProfileCredentialsProvider =
+                InstanceProfileCredentialsProvider.getInstance();
+        log.info("InstanceProfileCredentialsProvider created successfully");
+        return instanceProfileCredentialsProvider;
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSCredentialsProviderType.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSCredentialsProviderType.java
new file mode 100644
index 0000000000..9b932f1554
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSCredentialsProviderType.java
@@ -0,0 +1,49 @@
+/*
+ * 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.authentication.aws;
+
+import java.util.Optional;
+
+import lombok.Getter;
+
+@Getter
+public enum AWSCredentialsProviderType {
+
+    STATIC_CREDENTIALS_PROVIDER("AWSStaticCredentialsProvider"),
+    
INSTANCE_PROFILE_CREDENTIALS_PROVIDER("InstanceProfileCredentialsProvider"),
+    ;
+
+    private final String name;
+
+    AWSCredentialsProviderType(String name) {
+        this.name = name;
+    }
+
+    public static Optional<AWSCredentialsProviderType> of(String name) {
+        if (name == null) {
+            return Optional.empty();
+        }
+        for (AWSCredentialsProviderType type : values()) {
+            if (type.getName().equalsIgnoreCase(name)) {
+                return Optional.of(type);
+            }
+        }
+        return Optional.empty();
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSDatabaseMigrationServiceClientFactory.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSDatabaseMigrationServiceClientFactory.java
new file mode 100644
index 0000000000..2056268f2b
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AWSDatabaseMigrationServiceClientFactory.java
@@ -0,0 +1,53 @@
+/*
+ * 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.authentication.aws;
+
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.regions.Regions;
+import 
com.amazonaws.services.databasemigrationservice.AWSDatabaseMigrationService;
+import 
com.amazonaws.services.databasemigrationservice.AWSDatabaseMigrationServiceClientBuilder;
+
+@UtilityClass
+public class AWSDatabaseMigrationServiceClientFactory {
+
+    public AWSDatabaseMigrationService 
createAWSDatabaseMigrationServiceClient(Map<String, String> awsProperties) {
+        AWSCredentialsProvider awsCredentialsProvider = 
AWSCredentialsProviderFactor.credentialsProvider(awsProperties);
+        Regions regions = 
Regions.fromName(awsProperties.get(AwsConfigurationKeys.AWS_REGION));
+        String endpoint = awsProperties.get(AwsConfigurationKeys.AWS_ENDPOINT);
+
+        if (endpoint != null && !endpoint.isEmpty()) {
+            return AWSDatabaseMigrationServiceClientBuilder
+                    .standard()
+                    .withEndpointConfiguration(new 
AwsClientBuilder.EndpointConfiguration(endpoint, regions.getName()))
+                    .withCredentials(awsCredentialsProvider)
+                    .build();
+        } else {
+            return AWSDatabaseMigrationServiceClientBuilder
+                    .standard()
+                    .withCredentials(awsCredentialsProvider)
+                    .withRegion(regions)
+                    .build();
+        }
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonElasticMapReduceClientFactory.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonElasticMapReduceClientFactory.java
new file mode 100644
index 0000000000..ea00473b79
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonElasticMapReduceClientFactory.java
@@ -0,0 +1,53 @@
+/*
+ * 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.authentication.aws;
+
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce;
+import 
com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClientBuilder;
+
+@UtilityClass
+public class AmazonElasticMapReduceClientFactory {
+
+    public AmazonElasticMapReduce 
createAmazonElasticMapReduceClient(Map<String, String> awsProperties) {
+        AWSCredentialsProvider awsCredentialsProvider = 
AWSCredentialsProviderFactor.credentialsProvider(awsProperties);
+        Regions regions = 
Regions.fromName(awsProperties.get(AwsConfigurationKeys.AWS_REGION));
+        String endpoint = awsProperties.get(AwsConfigurationKeys.AWS_ENDPOINT);
+
+        if (endpoint != null && !endpoint.isEmpty()) {
+            return AmazonElasticMapReduceClientBuilder
+                    .standard()
+                    .withEndpointConfiguration(new 
AwsClientBuilder.EndpointConfiguration(endpoint, regions.getName()))
+                    .withCredentials(awsCredentialsProvider)
+                    .build();
+        } else {
+            return AmazonElasticMapReduceClientBuilder
+                    .standard()
+                    .withCredentials(awsCredentialsProvider)
+                    .withRegion(regions)
+                    .build();
+        }
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonS3ClientFactory.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonS3ClientFactory.java
new file mode 100644
index 0000000000..c45e4de9ea
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonS3ClientFactory.java
@@ -0,0 +1,54 @@
+/*
+ * 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.authentication.aws;
+
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+
+@UtilityClass
+public class AmazonS3ClientFactory {
+
+    public AmazonS3 createAmazonS3Client(Map<String, String> awsProperties) {
+        AWSCredentialsProvider awsCredentialsProvider = 
AWSCredentialsProviderFactor.credentialsProvider(awsProperties);
+        Regions regions = 
Regions.fromName(awsProperties.get(AwsConfigurationKeys.AWS_REGION));
+        String endpoint = awsProperties.get(AwsConfigurationKeys.AWS_ENDPOINT);
+
+        if (endpoint != null && !endpoint.isEmpty()) {
+            return AmazonS3ClientBuilder
+                    .standard()
+                    .withPathStyleAccessEnabled(true)
+                    .withEndpointConfiguration(new 
AwsClientBuilder.EndpointConfiguration(endpoint, regions.getName()))
+                    .withCredentials(awsCredentialsProvider)
+                    .build();
+        } else {
+            return AmazonS3ClientBuilder
+                    .standard()
+                    .withCredentials(awsCredentialsProvider)
+                    .withRegion(regions)
+                    .build();
+        }
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonSageMakerClientFactory.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonSageMakerClientFactory.java
new file mode 100644
index 0000000000..6bff921894
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AmazonSageMakerClientFactory.java
@@ -0,0 +1,53 @@
+/*
+ * 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.authentication.aws;
+
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.sagemaker.AmazonSageMaker;
+import com.amazonaws.services.sagemaker.AmazonSageMakerClientBuilder;
+
+@UtilityClass
+public class AmazonSageMakerClientFactory {
+
+    public AmazonSageMaker createAmazonSageMakerClient(Map<String, String> 
awsProperties) {
+        AWSCredentialsProvider awsCredentialsProvider = 
AWSCredentialsProviderFactor.credentialsProvider(awsProperties);
+        Regions regions = 
Regions.fromName(awsProperties.get(AwsConfigurationKeys.AWS_REGION));
+        String endpoint = awsProperties.get(AwsConfigurationKeys.AWS_ENDPOINT);
+
+        if (endpoint != null && !endpoint.isEmpty()) {
+            return AmazonSageMakerClientBuilder
+                    .standard()
+                    .withEndpointConfiguration(new 
AwsClientBuilder.EndpointConfiguration(endpoint, regions.getName()))
+                    .withCredentials(awsCredentialsProvider)
+                    .build();
+        } else {
+            return AmazonSageMakerClientBuilder
+                    .standard()
+                    .withCredentials(awsCredentialsProvider)
+                    .withRegion(regions)
+                    .build();
+        }
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AwsConfigurationKeys.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AwsConfigurationKeys.java
new file mode 100644
index 0000000000..3d2d8677b3
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/AwsConfigurationKeys.java
@@ -0,0 +1,28 @@
+/*
+ * 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.authentication.aws;
+
+public class AwsConfigurationKeys {
+
+    public static final String AWS_AUTHENTICATION_TYPE = 
"credentials.provider.type";
+    public static final String AWS_REGION = "region";
+    public static final String AWS_ENDPOINT = "endpoint";
+
+    public static final String AWS_ACCESS_KEY_ID = "access.key.id";
+    public static final String AWS_SECRET = "access.key.secret";
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/DataSyncClientFactory.java
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/DataSyncClientFactory.java
new file mode 100644
index 0000000000..b67c7dd840
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/java/org/apache/dolphinscheduler/authentication/aws/DataSyncClientFactory.java
@@ -0,0 +1,47 @@
+/*
+ * 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.authentication.aws;
+
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.services.datasync.DataSyncClient;
+
+import java.util.Map;
+
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+public class DataSyncClientFactory {
+
+    public DataSyncClient createDataSyncClient(Map<String, String> 
awsProperties) {
+        // todo: upgrade the version of aws sdk
+        String awsAccessKeyId = 
awsProperties.get(AwsConfigurationKeys.AWS_ACCESS_KEY_ID);
+        String awsSecretAccessKey = 
awsProperties.get(AwsConfigurationKeys.AWS_SECRET);
+        final AwsBasicCredentials basicAWSCredentials = 
AwsBasicCredentials.create(awsAccessKeyId, awsSecretAccessKey);
+        final AwsCredentialsProvider awsCredentialsProvider = 
StaticCredentialsProvider.create(basicAWSCredentials);
+
+        // create a datasync client
+        return DataSyncClient.builder()
+                
.region(Region.of(awsProperties.get(AwsConfigurationKeys.AWS_REGION)))
+                .credentialsProvider(awsCredentialsProvider)
+                .build();
+    }
+
+}
diff --git 
a/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources/aws.yaml
 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources/aws.yaml
new file mode 100644
index 0000000000..6d453bb78a
--- /dev/null
+++ 
b/dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources/aws.yaml
@@ -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.
+#
+
+aws:
+  s3:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: accessKey123
+    access.key.secret: secretKey123
+    region: us-east-1
+    bucket.name: dolphinscheduler
+    endpoint: http://s3:9000
+  emr:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+  sagemaker:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+  dms:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+  datasync:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml 
b/dolphinscheduler-authentication/pom.xml
similarity index 63%
copy from dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml
copy to dolphinscheduler-authentication/pom.xml
index 969756a991..b49c4d37d0 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml
+++ b/dolphinscheduler-authentication/pom.xml
@@ -20,28 +20,27 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.dolphinscheduler</groupId>
-        <artifactId>dolphinscheduler-task-plugin</artifactId>
+        <artifactId>dolphinscheduler</artifactId>
         <version>dev-SNAPSHOT</version>
     </parent>
 
-    <artifactId>dolphinscheduler-task-emr</artifactId>
-    <packaging>jar</packaging>
+    <artifactId>dolphinscheduler-authentication</artifactId>
+    <packaging>pom</packaging>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.dolphinscheduler</groupId>
-            <artifactId>dolphinscheduler-spi</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.dolphinscheduler</groupId>
-            <artifactId>dolphinscheduler-task-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk-emr</artifactId>
-        </dependency>
+    <modules>
+        <module>dolphinscheduler-aws-authentication</module>
+    </modules>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.dolphinscheduler</groupId>
+                <artifactId>dolphinscheduler-bom</artifactId>
+                <version>${project.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
-    </dependencies>
 </project>
diff --git a/dolphinscheduler-common/pom.xml b/dolphinscheduler-common/pom.xml
index eda9a72e30..6c83c580ae 100644
--- a/dolphinscheduler-common/pom.xml
+++ b/dolphinscheduler-common/pom.xml
@@ -41,6 +41,10 @@
     </dependencyManagement>
     <dependencies>
         <!-- dolphinscheduler -->
+        <dependency>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-aws-authentication</artifactId>
+        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
index cc07accc9b..0f12f11d00 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
@@ -36,6 +36,7 @@ public final class Constants {
     public static final String COMMON_PROPERTIES_PATH = "/common.properties";
 
     public static final String REMOTE_LOGGING_YAML_PATH = 
"/remote-logging.yaml";
+    public static final String AWS_YAML_PATH = "/aws.yaml";
 
     public static final String FORMAT_SS = "%s%s";
     public static final String FORMAT_S_S = "%s/%s";
@@ -130,8 +131,7 @@ public final class Constants {
      */
     public static final String RESOURCE_STORAGE_TYPE = "resource.storage.type";
 
-    public static final String AWS_S3_BUCKET_NAME = 
"resource.aws.s3.bucket.name";
-    public static final String AWS_END_POINT = "resource.aws.s3.endpoint";
+    public static final String AWS_S3_BUCKET_NAME = "aws.s3.bucket.name";
 
     public static final String ALIBABA_CLOUD_OSS_BUCKET_NAME = 
"resource.alibaba.cloud.oss.bucket.name";
     public static final String ALIBABA_CLOUD_OSS_END_POINT = 
"resource.alibaba.cloud.oss.endpoint";
@@ -704,19 +704,8 @@ public final class Constants {
 
     public static final String REMOTE_LOGGING_OSS_ENDPOINT = 
"remote.logging.oss.endpoint";
 
-    /**
-     * remote logging for S3
-     */
-    public static final String REMOTE_LOGGING_S3_ACCESS_KEY_ID = 
"remote.logging.s3.access.key.id";
-
-    public static final String REMOTE_LOGGING_S3_ACCESS_KEY_SECRET = 
"remote.logging.s3.access.key.secret";
-
     public static final String REMOTE_LOGGING_S3_BUCKET_NAME = 
"remote.logging.s3.bucket.name";
 
-    public static final String REMOTE_LOGGING_S3_ENDPOINT = 
"remote.logging.s3.endpoint";
-
-    public static final String REMOTE_LOGGING_S3_REGION = 
"remote.logging.s3.region";
-
     /**
      * remote logging for GCS
      */
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/log/remote/S3RemoteLogHandler.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/log/remote/S3RemoteLogHandler.java
index 54dba2d5bd..4fef7b032a 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/log/remote/S3RemoteLogHandler.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/log/remote/S3RemoteLogHandler.java
@@ -17,6 +17,7 @@
 
 package org.apache.dolphinscheduler.common.log.remote;
 
+import org.apache.dolphinscheduler.authentication.aws.AmazonS3ClientFactory;
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
 
@@ -26,41 +27,25 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.Map;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.auth.BasicAWSCredentials;
-import com.amazonaws.client.builder.AwsClientBuilder;
-import com.amazonaws.regions.Regions;
 import com.amazonaws.services.s3.AmazonS3;
-import com.amazonaws.services.s3.AmazonS3ClientBuilder;
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectInputStream;
 
 @Slf4j
 public class S3RemoteLogHandler implements RemoteLogHandler, Closeable {
 
-    private String accessKeyId;
+    private final String bucketName;
 
-    private String accessKeySecret;
-
-    private String region;
-
-    private String bucketName;
-
-    private String endPoint;
-
-    private AmazonS3 s3Client;
+    private final AmazonS3 s3Client;
 
     private static S3RemoteLogHandler instance;
 
     private S3RemoteLogHandler() {
-        accessKeyId = readAccessKeyID();
-        accessKeySecret = readAccessKeySecret();
-        region = readRegion();
         bucketName = readBucketName();
-        endPoint = readEndPoint();
         s3Client = buildS3Client();
         checkBucketNameExists(bucketName);
     }
@@ -74,23 +59,8 @@ public class S3RemoteLogHandler implements RemoteLogHandler, 
Closeable {
     }
 
     protected AmazonS3 buildS3Client() {
-        if (StringUtils.isNotEmpty(endPoint)) {
-            return AmazonS3ClientBuilder
-                    .standard()
-                    .withPathStyleAccessEnabled(true)
-                    .withEndpointConfiguration(new 
AwsClientBuilder.EndpointConfiguration(
-                            endPoint, Regions.fromName(region).getName()))
-                    .withCredentials(
-                            new AWSStaticCredentialsProvider(new 
BasicAWSCredentials(accessKeyId, accessKeySecret)))
-                    .build();
-        } else {
-            return AmazonS3ClientBuilder
-                    .standard()
-                    .withCredentials(
-                            new AWSStaticCredentialsProvider(new 
BasicAWSCredentials(accessKeyId, accessKeySecret)))
-                    .withRegion(Regions.fromName(region))
-                    .build();
-        }
+        Map<String, String> awsProperties = 
PropertyUtils.getByPrefix("aws.s3.", "");
+        return AmazonS3ClientFactory.createAmazonS3Client(awsProperties);
     }
 
     @Override
@@ -131,24 +101,8 @@ public class S3RemoteLogHandler implements 
RemoteLogHandler, Closeable {
         }
     }
 
-    protected String readAccessKeyID() {
-        return 
PropertyUtils.getString(Constants.REMOTE_LOGGING_S3_ACCESS_KEY_ID);
-    }
-
-    protected String readAccessKeySecret() {
-        return 
PropertyUtils.getString(Constants.REMOTE_LOGGING_S3_ACCESS_KEY_SECRET);
-    }
-
-    protected String readRegion() {
-        return PropertyUtils.getString(Constants.REMOTE_LOGGING_S3_REGION);
-    }
-
     protected String readBucketName() {
-        return 
PropertyUtils.getString(Constants.REMOTE_LOGGING_S3_BUCKET_NAME);
-    }
-
-    protected String readEndPoint() {
-        return PropertyUtils.getString(Constants.REMOTE_LOGGING_S3_ENDPOINT);
+        return PropertyUtils.getString(Constants.AWS_S3_BUCKET_NAME);
     }
 
     public void checkBucketNameExists(String bucketName) {
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/PropertyUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/PropertyUtils.java
index 82d4de9599..aee1589335 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/PropertyUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/PropertyUtils.java
@@ -17,6 +17,7 @@
 
 package org.apache.dolphinscheduler.common.utils;
 
+import static 
org.apache.dolphinscheduler.common.constants.Constants.AWS_YAML_PATH;
 import static 
org.apache.dolphinscheduler.common.constants.Constants.COMMON_PROPERTIES_PATH;
 import static 
org.apache.dolphinscheduler.common.constants.Constants.REMOTE_LOGGING_YAML_PATH;
 
@@ -42,7 +43,7 @@ public class PropertyUtils {
     private final ImmutablePriorityPropertyDelegate propertyDelegate =
             new ImmutablePriorityPropertyDelegate(
                     new ImmutablePropertyDelegate(COMMON_PROPERTIES_PATH),
-                    new ImmutableYamlDelegate(REMOTE_LOGGING_YAML_PATH));
+                    new ImmutableYamlDelegate(REMOTE_LOGGING_YAML_PATH, 
AWS_YAML_PATH));
 
     public static String getString(String key) {
         return propertyDelegate.get(key.trim());
@@ -106,6 +107,19 @@ public class PropertyUtils {
         return matchedProperties;
     }
 
+    /**
+     * Get all properties with specified prefix, like: fs., will replace the 
prefix with newPrefix
+     */
+    public static Map<String, String> getByPrefix(String prefix, String 
newPrefix) {
+        Map<String, String> matchedProperties = new HashMap<>();
+        for (String propName : propertyDelegate.getPropertyKeys()) {
+            if (propName.startsWith(prefix)) {
+                matchedProperties.put(propName.replace(prefix, newPrefix), 
propertyDelegate.get(propName));
+            }
+        }
+        return matchedProperties;
+    }
+
     public static <T> Set<T> getSet(String key, Function<String, Set<T>> 
transformFunction, Set<T> defaultValue) {
         return propertyDelegate.get(key, transformFunction, defaultValue);
     }
diff --git a/dolphinscheduler-common/src/main/resources/common.properties 
b/dolphinscheduler-common/src/main/resources/common.properties
index fdb553b4bc..cf1723700e 100644
--- a/dolphinscheduler-common/src/main/resources/common.properties
+++ b/dolphinscheduler-common/src/main/resources/common.properties
@@ -39,17 +39,6 @@ resource.azure.tenant.id=minioadmin
 # The query interval
 resource.query.interval=10000
 
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=minioadmin
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=minioadmin
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=cn-north-1
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s3. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=http://localhost:9000
-
 # alibaba cloud access key id, required if you set resource.storage.type=OSS
 resource.alibaba.cloud.access.key.id=<your-access-key-id>
 # alibaba cloud access key secret, required if you set 
resource.storage.type=OSS
@@ -188,16 +177,7 @@ remote.logging.oss.access.key.secret=<access.key.secret>
 remote.logging.oss.bucket.name=<bucket.name>
 # oss endpoint, required if you set remote.logging.target=OSS
 remote.logging.oss.endpoint=<endpoint>
-# s3 access key id, required if you set remote.logging.target=S3
-remote.logging.s3.access.key.id=<access.key.id>
-# s3 access key secret, required if you set remote.logging.target=S3
-remote.logging.s3.access.key.secret=<access.key.secret>
-# s3 bucket name, required if you set remote.logging.target=S3
-remote.logging.s3.bucket.name=<bucket.name>
-# s3 endpoint, required if you set remote.logging.target=S3
-remote.logging.s3.endpoint=<endpoint>
-# s3 region, required if you set remote.logging.target=S3
-remote.logging.s3.region=<region>
+
 # the location of the google cloud credential, required if you set 
remote.logging.target=GCS
 remote.logging.google.cloud.storage.credential=/path/to/credential
 # gcs bucket name, required if you set remote.logging.target=GCS
diff --git a/dolphinscheduler-common/src/main/resources/remote-logging.yaml 
b/dolphinscheduler-common/src/main/resources/remote-logging.yaml
index 2cb48750a4..f413958e64 100644
--- a/dolphinscheduler-common/src/main/resources/remote-logging.yaml
+++ b/dolphinscheduler-common/src/main/resources/remote-logging.yaml
@@ -34,28 +34,16 @@ remote-logging:
     bucket.name: <bucket.name>
     # oss endpoint, required if you set remote-logging.target=OSS
     endpoint: <endpoint>
-  # required if you set remote-logging.target=S3
-  s3:
-    # s3 access key id, required if you set remote-logging.target=S3
-    access.key.id: <access.key.id>
-    # s3 access key secret, required if you set remote-logging.target=S3
-    access.key.secret: <access.key.secret>
-      # s3 bucket name, required if you set remote-logging.target=S3
-    bucket.name: <bucket.name>
-      # s3 endpoint, required if you set remote-logging.target=S3
-    endpoint: <endpoint>
-      # s3 region, required if you set remote-logging.target=S3
-    region: <region>
   google.cloud.storage:
     # the location of the google cloud credential, required if you set 
remote-logging.target=GCS
     credential: /path/to/credential
-      # gcs bucket name, required if you set remote-logging.target=GCS
+    # gcs bucket name, required if you set remote-logging.target=GCS
     bucket.name: <your-bucket>
   abs:
     # abs account name, required if you set resource.storage.type=ABS
     account.name: <your-account-name>
-      # abs account key, required if you set resource.storage.type=ABS
+    # abs account key, required if you set resource.storage.type=ABS
     account.key: <your-account-key>
-      # abs container name, required if you set resource.storage.type=ABS
+    # abs container name, required if you set resource.storage.type=ABS
     container.name: <your-container-name>
 
diff --git 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PropertyUtilsTest.java
 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PropertyUtilsTest.java
index c915197844..8abfb38269 100644
--- 
a/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PropertyUtilsTest.java
+++ 
b/dolphinscheduler-common/src/test/java/org/apache/dolphinscheduler/common/utils/PropertyUtilsTest.java
@@ -17,12 +17,15 @@
 
 package org.apache.dolphinscheduler.common.utils;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import org.apache.dolphinscheduler.common.constants.Constants;
 
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -48,4 +51,14 @@ public class PropertyUtilsTest {
         }, Sets.newHashSet("docker0"));
         Assertions.assertEquals(Sets.newHashSet("docker0"), networkInterface);
     }
+
+    @Test
+    void getByPrefix() {
+        Map<String, String> awsProperties = 
PropertyUtils.getByPrefix("resource.aws.", "");
+        assertThat(awsProperties).containsEntry("access.key.id", "minioadmin");
+        assertThat(awsProperties).containsEntry("secret.access.key", 
"minioadmin");
+        assertThat(awsProperties).containsEntry("region", "cn-north-1");
+        assertThat(awsProperties).containsEntry("s3.bucket.name", 
"dolphinscheduler");
+        assertThat(awsProperties).containsEntry("endpoint", 
"http://localhost:9000";);
+    }
 }
diff --git a/dolphinscheduler-common/src/test/resources/common.properties 
b/dolphinscheduler-common/src/test/resources/common.properties
index 7f66a32a23..ce8ef3bf4f 100644
--- a/dolphinscheduler-common/src/test/resources/common.properties
+++ b/dolphinscheduler-common/src/test/resources/common.properties
@@ -45,6 +45,10 @@ resource.azure.tenant.id=minioadmin
 # The query interval
 resource.query.interval=10000
 
+# The AWS credentials provider type. support: AWSStaticCredentialsProvider, 
InstanceProfileCredentialsProvider
+# AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+# InstanceProfileCredentialsProvider: use the IAM role to authenticate
+aws.credentials.provider.type=AWSStaticCredentialsProvider
 # The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
 resource.aws.access.key.id=minioadmin
 # The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
@@ -54,7 +58,7 @@ resource.aws.region=cn-north-1
 # The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
 resource.aws.s3.bucket.name=dolphinscheduler
 # You need to set this parameter when private cloud s3. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=http://localhost:9000
+resource.aws.endpoint=http://localhost:9000
 
 # alibaba cloud access key id, required if you set resource.storage.type=OSS
 resource.alibaba.cloud.access.key.id=<your-access-key-id>
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/aws.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/aws.yaml
new file mode 100644
index 0000000000..6d453bb78a
--- /dev/null
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/aws.yaml
@@ -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.
+#
+
+aws:
+  s3:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: accessKey123
+    access.key.secret: secretKey123
+    region: us-east-1
+    bucket.name: dolphinscheduler
+    endpoint: http://s3:9000
+  emr:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+  sagemaker:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+  dms:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+  datasync:
+    # The AWS credentials provider type. support: 
AWSStaticCredentialsProvider, InstanceProfileCredentialsProvider
+    # AWSStaticCredentialsProvider: use the access key and secret key to 
authenticate
+    # InstanceProfileCredentialsProvider: use the IAM role to authenticate
+    credentials.provider.type: AWSStaticCredentialsProvider
+    access.key.id: minioadmin
+    access.key.secret: minioadmin
+    region: cn-north-1
+    endpoint: http://localhost:9000
+
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
index 7583b3293a..604befdbf8 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/common.properties
@@ -37,17 +37,6 @@ resource.azure.tenant.id=minioadmin
 # The query interval
 resource.query.interval=10000
 
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=accessKey123
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=secretKey123
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=us-east-1
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s3. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=http://s3:9000
-
 # alibaba cloud access key id, required if you set resource.storage.type=OSS
 resource.alibaba.cloud.access.key.id=<your-access-key-id>
 # alibaba cloud access key secret, required if you set 
resource.storage.type=OSS
diff --git 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
index 9a46ed02ad..ccfe940a6d 100644
--- 
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
+++ 
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/file-manage/docker-compose.yaml
@@ -34,6 +34,7 @@ services:
       retries: 120
     volumes:
       - ./common.properties:/opt/dolphinscheduler/conf/common.properties
+      - ./aws.yaml:/opt/dolphinscheduler/conf/aws.yaml
     depends_on:
       s3:
         condition: service_healthy
diff --git 
a/dolphinscheduler-master/src/main/assembly/dolphinscheduler-master-server.xml 
b/dolphinscheduler-master/src/main/assembly/dolphinscheduler-master-server.xml
index d521e53bc2..f069b07079 100644
--- 
a/dolphinscheduler-master/src/main/assembly/dolphinscheduler-master-server.xml
+++ 
b/dolphinscheduler-master/src/main/assembly/dolphinscheduler-master-server.xml
@@ -56,6 +56,13 @@
             </includes>
             <outputDirectory>conf</outputDirectory>
         </fileSet>
+        <fileSet>
+            
<directory>${basedir}/../dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources</directory>
+            <includes>
+                <include>**/*.yaml</include>
+            </includes>
+            <outputDirectory>conf</outputDirectory>
+        </fileSet>
     </fileSets>
     <dependencySets>
         <dependencySet>
diff --git 
a/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
 
b/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
index db312b7298..480301718e 100644
--- 
a/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
+++ 
b/dolphinscheduler-standalone-server/src/main/assembly/dolphinscheduler-standalone-server.xml
@@ -86,6 +86,13 @@
             </includes>
             <outputDirectory>conf</outputDirectory>
         </fileSet>
+        <fileSet>
+            
<directory>${basedir}/../dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources</directory>
+            <includes>
+                <include>**/*.yaml</include>
+            </includes>
+            <outputDirectory>conf</outputDirectory>
+        </fileSet>
         <fileSet>
             
<directory>${basedir}/../dolphinscheduler-api/src/main/resources</directory>
             <includes>
diff --git 
a/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/main/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperator.java
 
b/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/main/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperator.java
index a13611316e..3e4b207b50 100644
--- 
a/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/main/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperator.java
+++ 
b/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/main/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperator.java
@@ -17,19 +17,18 @@
 
 package org.apache.dolphinscheduler.plugin.storage.s3;
 
-import static 
org.apache.dolphinscheduler.common.constants.Constants.AWS_END_POINT;
 import static 
org.apache.dolphinscheduler.common.constants.Constants.FOLDER_SEPARATOR;
 import static 
org.apache.dolphinscheduler.common.constants.Constants.FORMAT_S_S;
 import static 
org.apache.dolphinscheduler.common.constants.Constants.RESOURCE_TYPE_FILE;
 import static 
org.apache.dolphinscheduler.common.constants.Constants.RESOURCE_TYPE_UDF;
 
+import org.apache.dolphinscheduler.authentication.aws.AmazonS3ClientFactory;
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.enums.ResUploadType;
 import org.apache.dolphinscheduler.common.utils.FileUtils;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
 import org.apache.dolphinscheduler.plugin.storage.api.StorageEntity;
 import org.apache.dolphinscheduler.plugin.storage.api.StorageOperate;
-import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
 import org.apache.dolphinscheduler.spi.enums.ResourceType;
 
 import org.apache.commons.lang3.StringUtils;
@@ -57,11 +56,7 @@ import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
 import com.amazonaws.AmazonServiceException;
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.auth.BasicAWSCredentials;
-import com.amazonaws.client.builder.AwsClientBuilder;
 import com.amazonaws.services.s3.AmazonS3;
-import com.amazonaws.services.s3.AmazonS3ClientBuilder;
 import com.amazonaws.services.s3.model.AmazonS3Exception;
 import com.amazonaws.services.s3.model.DeleteObjectsRequest;
 import com.amazonaws.services.s3.model.ListObjectsV2Request;
@@ -79,71 +74,27 @@ import 
com.amazonaws.services.s3.transfer.TransferManagerBuilder;
 @Data
 public class S3StorageOperator implements Closeable, StorageOperate {
 
-    private String accessKeyId;
-
-    private String accessKeySecret;
-
-    private String region;
-
     private String bucketName;
 
-    private String endPoint;
-
     private AmazonS3 s3Client;
 
     public S3StorageOperator() {
     }
 
     public void init() {
-        accessKeyId = readAccessKeyID();
-        accessKeySecret = readAccessKeySecret();
-        region = readRegion();
         bucketName = readBucketName();
-        endPoint = readEndPoint();
         s3Client = buildS3Client();
         checkBucketNameExists(bucketName);
     }
 
     protected AmazonS3 buildS3Client() {
-        if (!StringUtils.isEmpty(endPoint)) {
-            return AmazonS3ClientBuilder
-                    .standard()
-                    .withPathStyleAccessEnabled(true)
-                    .withEndpointConfiguration(new 
AwsClientBuilder.EndpointConfiguration(
-                            endPoint, region))
-                    .withCredentials(
-                            new AWSStaticCredentialsProvider(new 
BasicAWSCredentials(accessKeyId, accessKeySecret)))
-                    .build();
-        } else {
-            return AmazonS3ClientBuilder
-                    .standard()
-                    .withCredentials(
-                            new AWSStaticCredentialsProvider(new 
BasicAWSCredentials(accessKeyId, accessKeySecret)))
-                    .withRegion(region)
-                    .build();
-        }
-    }
-
-    protected String readAccessKeyID() {
-        return PropertyUtils.getString(TaskConstants.AWS_ACCESS_KEY_ID);
-    }
-
-    protected String readAccessKeySecret() {
-        return PropertyUtils.getString(TaskConstants.AWS_SECRET_ACCESS_KEY);
-    }
-
-    protected String readRegion() {
-        return PropertyUtils.getString(TaskConstants.AWS_REGION);
+        return 
AmazonS3ClientFactory.createAmazonS3Client(PropertyUtils.getByPrefix("aws.s3.", 
""));
     }
 
     protected String readBucketName() {
         return PropertyUtils.getString(Constants.AWS_S3_BUCKET_NAME);
     }
 
-    protected String readEndPoint() {
-        return PropertyUtils.getString(AWS_END_POINT);
-    }
-
     @Override
     public void close() throws IOException {
         s3Client.shutdown();
diff --git 
a/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/test/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperatorTest.java
 
b/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/test/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperatorTest.java
index 0c3f75d861..c5930d713d 100644
--- 
a/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/test/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperatorTest.java
+++ 
b/dolphinscheduler-storage-plugin/dolphinscheduler-storage-s3/src/test/java/org/apache/dolphinscheduler/plugin/storage/s3/S3StorageOperatorTest.java
@@ -78,13 +78,7 @@ public class S3StorageOperatorTest {
     public void setUp() throws Exception {
         s3StorageOperator = Mockito.spy(new S3StorageOperator());
 
-        doReturn(ACCESS_KEY_ID_MOCK).when(s3StorageOperator)
-                .readAccessKeyID();
-        doReturn(ACCESS_KEY_SECRET_MOCK).when(s3StorageOperator)
-                .readAccessKeySecret();
-        doReturn(REGION_MOCK).when(s3StorageOperator).readRegion();
         doReturn(BUCKET_NAME_MOCK).when(s3StorageOperator).readBucketName();
-        doReturn(END_POINT_MOCK).when(s3StorageOperator).readEndPoint();
         Mockito.doReturn(s3Client)
                 .when(s3StorageOperator).buildS3Client();
         Mockito.doNothing()
@@ -96,9 +90,6 @@ public class S3StorageOperatorTest {
     @Test
     public void testInit() {
         verify(s3StorageOperator, times(1)).buildS3Client();
-        Assertions.assertEquals(ACCESS_KEY_ID_MOCK, 
s3StorageOperator.getAccessKeyId());
-        Assertions.assertEquals(ACCESS_KEY_SECRET_MOCK, 
s3StorageOperator.getAccessKeySecret());
-        Assertions.assertEquals(REGION_MOCK, s3StorageOperator.getRegion());
         Assertions.assertEquals(BUCKET_NAME_MOCK, 
s3StorageOperator.getBucketName());
     }
 
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/resources/common.properties
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/resources/common.properties
index 402112263f..40e1c5abcb 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/resources/common.properties
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/test/resources/common.properties
@@ -26,17 +26,6 @@ resource.storage.type=NONE
 # resource store on HDFS/S3 path, resource file will store to this base path, 
self configuration, please make sure the directory exists on hdfs and have read 
write permissions. "/dolphinscheduler" is recommended
 resource.storage.upload.base.path=/dolphinscheduler
 
-# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.access.key.id=minioadmin
-# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.secret.access.key=minioadmin
-# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This 
configuration is required
-resource.aws.region=cn-north-1
-# The name of the bucket. You need to create them by yourself. Otherwise, the 
system cannot start. All buckets in Amazon S3 share a single namespace; ensure 
the bucket is given a unique name.
-resource.aws.s3.bucket.name=dolphinscheduler
-# You need to set this parameter when private cloud s3. If S3 uses public 
cloud, you only need to set resource.aws.region or set to the endpoint of a 
public cloud such as S3.cn-north-1.amazonaws.com.cn
-resource.aws.s3.endpoint=http://localhost:9000
-
 # alibaba cloud access key id, required if you set resource.storage.type=OSS
 resource.alibaba.cloud.access.key.id=<your-access-key-id>
 # alibaba cloud access key secret, required if you set 
resource.storage.type=OSS
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml
index b3e1edb79f..5ec1ce5766 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/pom.xml
@@ -31,22 +31,18 @@
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-spi</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-task-api</artifactId>
-            <scope>provided</scope>
         </dependency>
-        <!-- 
https://mvnrepository.com/artifact/software.amazon.awssdk/datasync -->
         <dependency>
-            <groupId>software.amazon.awssdk</groupId>
-            <artifactId>datasync</artifactId>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-aws-authentication</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-common</artifactId>
-            <scope>provided</scope>
         </dependency>
     </dependencies>
 
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java
index a9f855503a..aff7ba2558 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-datasync/src/main/java/org/apache/dolphinscheduler/plugin/task/datasync/DatasyncHook.java
@@ -17,13 +17,9 @@
 
 package org.apache.dolphinscheduler.plugin.task.datasync;
 
+import org.apache.dolphinscheduler.authentication.aws.DataSyncClientFactory;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
-import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
 
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
-import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
-import software.amazon.awssdk.regions.Region;
 import software.amazon.awssdk.services.datasync.DataSyncClient;
 import 
software.amazon.awssdk.services.datasync.model.CancelTaskExecutionRequest;
 import 
software.amazon.awssdk.services.datasync.model.CancelTaskExecutionResponse;
@@ -48,6 +44,7 @@ import org.apache.commons.lang3.StringUtils;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 import lombok.Data;
@@ -73,16 +70,8 @@ public class DatasyncHook {
     }
 
     protected static DataSyncClient createClient() {
-        final String awsAccessKeyId = 
PropertyUtils.getString(TaskConstants.AWS_ACCESS_KEY_ID);
-        final String awsSecretAccessKey = 
PropertyUtils.getString(TaskConstants.AWS_SECRET_ACCESS_KEY);
-        final String awsRegion = 
PropertyUtils.getString(TaskConstants.AWS_REGION);
-
-        final AwsBasicCredentials basicAWSCredentials = 
AwsBasicCredentials.create(awsAccessKeyId, awsSecretAccessKey);
-        final AwsCredentialsProvider awsCredentialsProvider = 
StaticCredentialsProvider.create(basicAWSCredentials);
-
-        // create a datasync client
-        return 
DataSyncClient.builder().region(Region.of(awsRegion)).credentialsProvider(awsCredentialsProvider)
-                .build();
+        Map<String, String> awsProperties = 
PropertyUtils.getByPrefix("aws.datasync.", "");
+        return DataSyncClientFactory.createDataSyncClient(awsProperties);
     }
 
     public Boolean createDatasyncTask(DatasyncParameters parameters) {
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/pom.xml 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/pom.xml
index 8a3bb85413..4a2be06b47 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/pom.xml
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/pom.xml
@@ -25,27 +25,23 @@
     </parent>
 
     <artifactId>dolphinscheduler-task-dms</artifactId>
-    <packaging>jar</packaging>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-spi</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-task-api</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-common</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk-dms</artifactId>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-aws-authentication</artifactId>
         </dependency>
 
     </dependencies>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/src/main/java/org/apache/dolphinscheduler/plugin/task/dms/DmsHook.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/src/main/java/org/apache/dolphinscheduler/plugin/task/dms/DmsHook.java
index 40aa6a527d..cf2306abb1 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/src/main/java/org/apache/dolphinscheduler/plugin/task/dms/DmsHook.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-dms/src/main/java/org/apache/dolphinscheduler/plugin/task/dms/DmsHook.java
@@ -17,9 +17,9 @@
 
 package org.apache.dolphinscheduler.plugin.task.dms;
 
+import 
org.apache.dolphinscheduler.authentication.aws.AWSDatabaseMigrationServiceClientFactory;
 import org.apache.dolphinscheduler.common.thread.ThreadUtils;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
-import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
 
 import org.apache.commons.io.IOUtils;
 
@@ -29,6 +29,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -37,11 +38,7 @@ import lombok.NoArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.auth.BasicAWSCredentials;
 import 
com.amazonaws.services.databasemigrationservice.AWSDatabaseMigrationService;
-import 
com.amazonaws.services.databasemigrationservice.AWSDatabaseMigrationServiceClientBuilder;
 import 
com.amazonaws.services.databasemigrationservice.model.CreateReplicationTaskRequest;
 import 
com.amazonaws.services.databasemigrationservice.model.CreateReplicationTaskResult;
 import 
com.amazonaws.services.databasemigrationservice.model.DeleteReplicationTaskRequest;
@@ -87,17 +84,8 @@ public class DmsHook {
     }
 
     public static AWSDatabaseMigrationService createClient() {
-        final String awsAccessKeyId = 
PropertyUtils.getString(TaskConstants.AWS_ACCESS_KEY_ID);
-        final String awsSecretAccessKey = 
PropertyUtils.getString(TaskConstants.AWS_SECRET_ACCESS_KEY);
-        final String awsRegion = 
PropertyUtils.getString(TaskConstants.AWS_REGION);
-        final BasicAWSCredentials basicAWSCredentials = new 
BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);
-        final AWSCredentialsProvider awsCredentialsProvider = new 
AWSStaticCredentialsProvider(basicAWSCredentials);
-
-        // create a DMS client
-        return AWSDatabaseMigrationServiceClientBuilder.standard()
-                .withCredentials(awsCredentialsProvider)
-                .withRegion(awsRegion)
-                .build();
+        Map<String, String> awsProperties = 
PropertyUtils.getByPrefix("aws.dms.", "");
+        return 
AWSDatabaseMigrationServiceClientFactory.createAWSDatabaseMigrationServiceClient(awsProperties);
     }
 
     public Boolean createReplicationTask() throws Exception {
diff --git a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml
index 969756a991..fa7e51062e 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/pom.xml
@@ -28,19 +28,20 @@
     <packaging>jar</packaging>
 
     <dependencies>
+
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-spi</artifactId>
-            <scope>provided</scope>
         </dependency>
+
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-task-api</artifactId>
-            <scope>provided</scope>
         </dependency>
+
         <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk-emr</artifactId>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-aws-authentication</artifactId>
         </dependency>
 
     </dependencies>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/src/main/java/org/apache/dolphinscheduler/plugin/task/emr/AbstractEmrTask.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/src/main/java/org/apache/dolphinscheduler/plugin/task/emr/AbstractEmrTask.java
index 6f6ec63a29..412b0b86e8 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/src/main/java/org/apache/dolphinscheduler/plugin/task/emr/AbstractEmrTask.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-emr/src/main/java/org/apache/dolphinscheduler/plugin/task/emr/AbstractEmrTask.java
@@ -22,22 +22,19 @@ import static 
com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKN
 import static 
com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL;
 import static 
com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
 
+import 
org.apache.dolphinscheduler.authentication.aws.AmazonElasticMapReduceClientFactory;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
 import org.apache.dolphinscheduler.plugin.task.api.AbstractRemoteTask;
-import org.apache.dolphinscheduler.plugin.task.api.TaskConstants;
 import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
 import 
org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters;
 
+import java.util.Map;
 import java.util.TimeZone;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce;
-import 
com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClientBuilder;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
 
@@ -94,22 +91,8 @@ public abstract class AbstractEmrTask extends 
AbstractRemoteTask {
         return emrParameters;
     }
 
-    /**
-     * create emr client from BasicAWSCredentials
-     *
-     * @return AmazonElasticMapReduce
-     */
     protected AmazonElasticMapReduce createEmrClient() {
-
-        final String awsAccessKeyId = 
PropertyUtils.getString(TaskConstants.AWS_ACCESS_KEY_ID);
-        final String awsSecretAccessKey = 
PropertyUtils.getString(TaskConstants.AWS_SECRET_ACCESS_KEY);
-        final String awsRegion = 
PropertyUtils.getString(TaskConstants.AWS_REGION);
-        final BasicAWSCredentials basicAWSCredentials = new 
BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);
-        final AWSCredentialsProvider awsCredentialsProvider = new 
AWSStaticCredentialsProvider(basicAWSCredentials);
-        // create an EMR client
-        return AmazonElasticMapReduceClientBuilder.standard()
-                .withCredentials(awsCredentialsProvider)
-                .withRegion(awsRegion)
-                .build();
+        Map<String, String> awsProperties = 
PropertyUtils.getByPrefix("aws.emr.", "");
+        return 
AmazonElasticMapReduceClientFactory.createAmazonElasticMapReduceClient(awsProperties);
     }
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/pom.xml 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/pom.xml
index 7caaf28641..030ab3df58 100644
--- a/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/pom.xml
+++ b/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/pom.xml
@@ -31,26 +31,23 @@
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-spi</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-task-api</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
             <artifactId>dolphinscheduler-common</artifactId>
-            <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>com.amazonaws</groupId>
-            <artifactId>aws-java-sdk-sagemaker</artifactId>
+            <groupId>org.apache.dolphinscheduler</groupId>
+            <artifactId>dolphinscheduler-datasource-all</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.dolphinscheduler</groupId>
-            <artifactId>dolphinscheduler-datasource-all</artifactId>
-            <version>${project.version}</version>
+            <artifactId>dolphinscheduler-aws-authentication</artifactId>
         </dependency>
 
     </dependencies>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/src/main/java/org/apache/dolphinscheduler/plugin/task/sagemaker/SagemakerTask.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/src/main/java/org/apache/dolphinscheduler/plugin/task/sagemaker/SagemakerTask.java
index b1b2cc811f..595655c891 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/src/main/java/org/apache/dolphinscheduler/plugin/task/sagemaker/SagemakerTask.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-sagemaker/src/main/java/org/apache/dolphinscheduler/plugin/task/sagemaker/SagemakerTask.java
@@ -22,7 +22,9 @@ import static 
com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKN
 import static 
com.fasterxml.jackson.databind.DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL;
 import static 
com.fasterxml.jackson.databind.MapperFeature.REQUIRE_SETTERS_FOR_GETTERS;
 
+import 
org.apache.dolphinscheduler.authentication.aws.AmazonSageMakerClientFactory;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.common.utils.PropertyUtils;
 import org.apache.dolphinscheduler.plugin.datasource.api.utils.DataSourceUtils;
 import 
org.apache.dolphinscheduler.plugin.datasource.sagemaker.param.SagemakerConnectionParam;
 import org.apache.dolphinscheduler.plugin.task.api.AbstractRemoteTask;
@@ -41,11 +43,7 @@ import java.util.Map;
 
 import lombok.extern.slf4j.Slf4j;
 
-import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.sagemaker.AmazonSageMaker;
-import com.amazonaws.services.sagemaker.AmazonSageMakerClientBuilder;
 import com.amazonaws.services.sagemaker.model.StartPipelineExecutionRequest;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.PropertyNamingStrategy;
@@ -186,16 +184,8 @@ public class SagemakerTask extends AbstractRemoteTask {
     }
 
     protected AmazonSageMaker createClient() {
-        final String awsAccessKeyId = parameters.getUsername();
-        final String awsSecretAccessKey = parameters.getPassword();
-        final String awsRegion = parameters.getAwsRegion();
-        final BasicAWSCredentials basicAWSCredentials = new 
BasicAWSCredentials(awsAccessKeyId, awsSecretAccessKey);
-        final AWSCredentialsProvider awsCredentialsProvider = new 
AWSStaticCredentialsProvider(basicAWSCredentials);
-        // create a SageMaker client
-        return AmazonSageMakerClientBuilder.standard()
-                .withCredentials(awsCredentialsProvider)
-                .withRegion(awsRegion)
-                .build();
+        Map<String, String> awsProperties = 
PropertyUtils.getByPrefix("aws.sagemaker.", "");
+        return 
AmazonSageMakerClientFactory.createAmazonSageMakerClient(awsProperties);
     }
 
 }
diff --git 
a/dolphinscheduler-worker/src/main/assembly/dolphinscheduler-worker-server.xml 
b/dolphinscheduler-worker/src/main/assembly/dolphinscheduler-worker-server.xml
index 5ac9b6350d..3507604bbe 100644
--- 
a/dolphinscheduler-worker/src/main/assembly/dolphinscheduler-worker-server.xml
+++ 
b/dolphinscheduler-worker/src/main/assembly/dolphinscheduler-worker-server.xml
@@ -57,6 +57,13 @@
             </includes>
             <outputDirectory>conf</outputDirectory>
         </fileSet>
+        <fileSet>
+            
<directory>${basedir}/../dolphinscheduler-authentication/dolphinscheduler-aws-authentication/src/main/resources</directory>
+            <includes>
+                <include>**/*.yaml</include>
+            </includes>
+            <outputDirectory>conf</outputDirectory>
+        </fileSet>
     </fileSets>
     <dependencySets>
         <dependencySet>
diff --git a/pom.xml b/pom.xml
index fc5e994bf9..43c476d317 100755
--- a/pom.xml
+++ b/pom.xml
@@ -57,6 +57,7 @@
         <module>dolphinscheduler-storage-plugin</module>
         <module>dolphinscheduler-extract</module>
         <module>dolphinscheduler-dao-plugin</module>
+        <module>dolphinscheduler-authentication</module>
     </modules>
 
     <properties>
@@ -294,6 +295,12 @@
                 <version>${project.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.apache.dolphinscheduler</groupId>
+                <artifactId>dolphinscheduler-aws-authentication</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+
             <dependency>
                 <groupId>org.junit</groupId>
                 <artifactId>junit-bom</artifactId>

Reply via email to