This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new f63b7fd6bd8 branch-4.1: [improvement](cloud) Support configurable S3
credentials providers #62788 (#63680)
f63b7fd6bd8 is described below
commit f63b7fd6bd8da036328e44ad608afcdb60890546
Author: Yixuan Wang <[email protected]>
AuthorDate: Wed May 27 11:32:46 2026 +0800
branch-4.1: [improvement](cloud) Support configurable S3 credentials
providers #62788 (#63680)
pick: https://github.com/apache/doris/pull/62788
---
be/src/util/s3_util.cpp | 10 ++++
cloud/src/meta-service/meta_service_resource.cpp | 28 +++++----
cloud/src/recycler/s3_accessor.cpp | 41 ++++++++++---
cloud/src/recycler/s3_accessor.h | 3 +
common/cpp/aws_common.cpp | 12 +++-
.../org/apache/doris/catalog/S3StorageVault.java | 4 +-
.../datasource/property/storage/S3Properties.java | 68 +++++++++++++++++++++-
.../property/storage/S3PropertiesTest.java | 32 ++++++++++
gensrc/proto/cloud.proto | 5 ++
gensrc/thrift/AgentService.thrift | 7 ++-
10 files changed, 185 insertions(+), 25 deletions(-)
diff --git a/be/src/util/s3_util.cpp b/be/src/util/s3_util.cpp
index 2013c3c4b74..d977b0aca87 100644
--- a/be/src/util/s3_util.cpp
+++ b/be/src/util/s3_util.cpp
@@ -626,6 +626,16 @@ static CredProviderType
cred_provider_type_from_thrift(TCredProviderType::type c
return CredProviderType::Simple;
case TCredProviderType::INSTANCE_PROFILE:
return CredProviderType::InstanceProfile;
+ case TCredProviderType::ENV:
+ return CredProviderType::Env;
+ case TCredProviderType::SYSTEM_PROPERTIES:
+ return CredProviderType::SystemProperties;
+ case TCredProviderType::WEB_IDENTITY:
+ return CredProviderType::WebIdentity;
+ case TCredProviderType::CONTAINER:
+ return CredProviderType::Container;
+ case TCredProviderType::ANONYMOUS:
+ return CredProviderType::Anonymous;
default:
__builtin_unreachable();
LOG(WARNING) << "Invalid TCredProviderType value: " <<
cred_provider_type
diff --git a/cloud/src/meta-service/meta_service_resource.cpp
b/cloud/src/meta-service/meta_service_resource.cpp
index b4e5e0d0b15..1c511488673 100644
--- a/cloud/src/meta-service/meta_service_resource.cpp
+++ b/cloud/src/meta-service/meta_service_resource.cpp
@@ -59,6 +59,11 @@ bool is_valid_storage_vault_name(const std::string& str) {
namespace doris::cloud {
+static CredProviderTypePB get_cred_provider_type(const ObjectStoreInfoPB& obj)
{
+ return obj.has_cred_provider_type() ? obj.cred_provider_type()
+ : CredProviderTypePB::INSTANCE_PROFILE;
+}
+
static std::string_view print_cluster_status(const ClusterStatus& status) {
switch (status) {
case ClusterStatus::UNKNOWN:
@@ -679,12 +684,11 @@ static void create_object_info_with_encrypt(const
InstanceInfoPB& instance, Obje
std::string region = obj->has_region() ? obj->region() : "";
if (obj->has_role_arn()) {
- if (obj->role_arn().empty() || !obj->has_cred_provider_type() ||
- obj->cred_provider_type() != CredProviderTypePB::INSTANCE_PROFILE
||
- !obj->has_provider() || obj->provider() != ObjectStoreInfoPB::S3
|| bucket.empty() ||
- endpoint.empty() || region.empty()) {
+ if (obj->role_arn().empty() || !obj->has_cred_provider_type() ||
!obj->has_provider() ||
+ obj->provider() != ObjectStoreInfoPB::S3 || bucket.empty() ||
endpoint.empty() ||
+ region.empty()) {
code = MetaServiceCode::INVALID_ARGUMENT;
- msg = "s3 conf info err with role_arn, please check it";
+ msg = "s3 conf info err with role_arn or cred provider, please
check it";
return;
}
} else {
@@ -1037,7 +1041,7 @@ static int alter_s3_storage_vault(InstanceInfoPB&
instance, std::unique_ptr<Tran
new_vault.mutable_obj_info()->clear_encryption_info();
new_vault.mutable_obj_info()->set_role_arn(obj_info.role_arn());
-
new_vault.mutable_obj_info()->set_cred_provider_type(CredProviderTypePB::INSTANCE_PROFILE);
+
new_vault.mutable_obj_info()->set_cred_provider_type(get_cred_provider_type(obj_info));
if (obj_info.has_external_id()) {
new_vault.mutable_obj_info()->set_external_id(obj_info.external_id());
}
@@ -1170,7 +1174,7 @@ static ObjectStoreInfoPB
object_info_pb_factory(ObjectStorageDesc& obj_desc,
} else {
last_item.set_role_arn(role_arn);
last_item.set_external_id(external_id);
- last_item.set_cred_provider_type(CredProviderTypePB::INSTANCE_PROFILE);
+ last_item.set_cred_provider_type(get_cred_provider_type(obj));
}
last_item.set_bucket(bucket);
// format prefix, such as `/aa/bb/`, `aa/bb//`, `//aa/bb`, ` /aa/bb` ->
`aa/bb`
@@ -1330,9 +1334,8 @@ void
MetaServiceImpl::alter_storage_vault(google::protobuf::RpcController* contr
}
if (!role_arn.empty()) {
- if (!obj.has_cred_provider_type() ||
- obj.cred_provider_type() !=
CredProviderTypePB::INSTANCE_PROFILE ||
- !obj.has_provider() || obj.provider() !=
ObjectStoreInfoPB::S3) {
+ if (!obj.has_cred_provider_type() || !obj.has_provider() ||
+ obj.provider() != ObjectStoreInfoPB::S3) {
code = MetaServiceCode::INVALID_ARGUMENT;
msg = "s3 conf info err with role_arn, please check it";
return;
@@ -1627,7 +1630,8 @@ void
MetaServiceImpl::alter_obj_store_info(google::protobuf::RpcController* cont
return;
}
- if (it.role_arn() == role_arn && it.external_id() ==
external_id) {
+ if (it.role_arn() == role_arn && it.external_id() ==
external_id &&
+ get_cred_provider_type(it) ==
get_cred_provider_type(request->obj())) {
// not change, just return ok
code = MetaServiceCode::OK;
msg = "ak/sk not changed";
@@ -1639,7 +1643,7 @@ void
MetaServiceImpl::alter_obj_store_info(google::protobuf::RpcController* cont
it.set_role_arn(role_arn);
it.set_external_id(external_id);
-
it.set_cred_provider_type(CredProviderTypePB::INSTANCE_PROFILE);
+
it.set_cred_provider_type(get_cred_provider_type(request->obj()));
}
auto now_time = std::chrono::system_clock::now();
diff --git a/cloud/src/recycler/s3_accessor.cpp
b/cloud/src/recycler/s3_accessor.cpp
index 0f2a7776fcc..9d0094437eb 100644
--- a/cloud/src/recycler/s3_accessor.cpp
+++ b/cloud/src/recycler/s3_accessor.cpp
@@ -20,7 +20,9 @@
#include <aws/core/auth/AWSAuthSigner.h>
#include <aws/core/auth/AWSCredentials.h>
#include <aws/core/auth/AWSCredentialsProviderChain.h>
+#include <aws/core/auth/STSCredentialsProvider.h>
#include <aws/core/client/DefaultRetryStrategy.h>
+#include <aws/core/platform/Environment.h>
#include <aws/identity-management/auth/STSAssumeRoleCredentialsProvider.h>
#include <aws/s3/S3Client.h>
#include <aws/sts/STSClient.h>
@@ -238,7 +240,12 @@ std::optional<S3Conf> S3Conf::from_obj_store_info(const
ObjectStoreInfoPB& obj_i
if (obj_info.has_role_arn() && !obj_info.role_arn().empty()) {
s3_conf.role_arn = obj_info.role_arn();
s3_conf.external_id = obj_info.external_id();
- s3_conf.cred_provider_type = CredProviderType::InstanceProfile;
+ if (obj_info.has_cred_provider_type()) {
+ s3_conf.cred_provider_type =
+
cred_provider_type_from_pb(obj_info.cred_provider_type());
+ } else {
+ s3_conf.cred_provider_type = CredProviderType::InstanceProfile;
+ }
}
}
@@ -314,6 +321,28 @@ std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
S3Accessor::_get_aws_credenti
return std::make_shared<Aws::Auth::DefaultAWSCredentialsProviderChain>();
}
+std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
S3Accessor::_create_credentials_provider(
+ CredProviderType type) {
+ switch (type) {
+ case CredProviderType::Env:
+ return
std::make_shared<Aws::Auth::EnvironmentAWSCredentialsProvider>();
+ case CredProviderType::SystemProperties:
+ return
std::make_shared<Aws::Auth::ProfileConfigFileAWSCredentialsProvider>();
+ case CredProviderType::WebIdentity:
+ return
std::make_shared<Aws::Auth::STSAssumeRoleWebIdentityCredentialsProvider>();
+ case CredProviderType::Container:
+ return std::make_shared<Aws::Auth::TaskRoleCredentialsProvider>(
+
Aws::Environment::GetEnv("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI").c_str());
+ case CredProviderType::InstanceProfile:
+ return
std::make_shared<Aws::Auth::InstanceProfileCredentialsProvider>();
+ case CredProviderType::Anonymous:
+ return std::make_shared<Aws::Auth::AnonymousAWSCredentialsProvider>();
+ case CredProviderType::Default:
+ default:
+ return std::make_shared<CustomAwsCredentialsProviderChain>();
+ }
+}
+
std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
S3Accessor::_get_aws_credentials_provider_v2(
const S3Conf& s3_conf) {
if (!s3_conf.ak.empty() && !s3_conf.sk.empty()) {
@@ -322,11 +351,7 @@ std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
S3Accessor::_get_aws_credenti
return
std::make_shared<Aws::Auth::SimpleAWSCredentialsProvider>(std::move(aws_cred));
}
- if (s3_conf.cred_provider_type == CredProviderType::InstanceProfile) {
- if (s3_conf.role_arn.empty()) {
- return std::make_shared<CustomAwsCredentialsProviderChain>();
- }
-
+ if (!s3_conf.role_arn.empty()) {
Aws::Client::ClientConfiguration clientConfiguration =
S3Environment::getClientConfiguration();
if (_ca_cert_file_path.empty()) {
@@ -338,13 +363,13 @@ std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
S3Accessor::_get_aws_credenti
}
auto stsClient = std::make_shared<Aws::STS::STSClient>(
- std::make_shared<CustomAwsCredentialsProviderChain>(),
clientConfiguration);
+ _create_credentials_provider(s3_conf.cred_provider_type),
clientConfiguration);
return std::make_shared<Aws::Auth::STSAssumeRoleCredentialsProvider>(
s3_conf.role_arn, Aws::String(), s3_conf.external_id,
Aws::Auth::DEFAULT_CREDS_LOAD_FREQ_SECONDS, stsClient);
}
- return std::make_shared<CustomAwsCredentialsProviderChain>();
+ return _create_credentials_provider(s3_conf.cred_provider_type);
}
std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
S3Accessor::get_aws_credentials_provider(
diff --git a/cloud/src/recycler/s3_accessor.h b/cloud/src/recycler/s3_accessor.h
index 04b29481494..17242d72b7c 100644
--- a/cloud/src/recycler/s3_accessor.h
+++ b/cloud/src/recycler/s3_accessor.h
@@ -162,6 +162,9 @@ protected:
std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
_get_aws_credentials_provider_v2(
const S3Conf& s3_conf);
+ std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
_create_credentials_provider(
+ CredProviderType type);
+
std::shared_ptr<Aws::Auth::AWSCredentialsProvider>
get_aws_credentials_provider(
const S3Conf& s3_conf);
diff --git a/common/cpp/aws_common.cpp b/common/cpp/aws_common.cpp
index c8f5e4faf47..3c7f5a0eda5 100644
--- a/common/cpp/aws_common.cpp
+++ b/common/cpp/aws_common.cpp
@@ -29,6 +29,16 @@ CredProviderType
cred_provider_type_from_pb(cloud::CredProviderTypePB cred_provi
return CredProviderType::Simple;
case cloud::CredProviderTypePB::INSTANCE_PROFILE:
return CredProviderType::InstanceProfile;
+ case cloud::CredProviderTypePB::ENV:
+ return CredProviderType::Env;
+ case cloud::CredProviderTypePB::SYSTEM_PROPERTIES:
+ return CredProviderType::SystemProperties;
+ case cloud::CredProviderTypePB::WEB_IDENTITY:
+ return CredProviderType::WebIdentity;
+ case cloud::CredProviderTypePB::CONTAINER:
+ return CredProviderType::Container;
+ case cloud::CredProviderTypePB::ANONYMOUS:
+ return CredProviderType::Anonymous;
default:
__builtin_unreachable();
LOG(WARNING) << "Invalid CredProviderTypePB value: " <<
cred_provider_type
@@ -74,4 +84,4 @@ std::string get_valid_ca_cert_path(const
std::vector<std::string>& ca_cert_file_
}
return "";
}
-}
\ No newline at end of file
+}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/S3StorageVault.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/S3StorageVault.java
index b2a8b61fff1..d312cc0e45d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/S3StorageVault.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/S3StorageVault.java
@@ -72,6 +72,7 @@ public class S3StorageVault extends StorageVault {
public static final String BUCKET = S3Properties.BUCKET;
public static final String ROLE_ARN = S3Properties.ROLE_ARN;
public static final String EXTERNAL_ID = S3Properties.EXTERNAL_ID;
+ public static final String CREDENTIALS_PROVIDER_TYPE =
S3Properties.CREDENTIALS_PROVIDER_TYPE;
}
public static final HashSet<String> ALLOW_ALTER_PROPERTIES = new
HashSet<>(Arrays.asList(
@@ -81,7 +82,8 @@ public class S3StorageVault extends StorageVault {
PropertyKey.SECRET_KEY,
PropertyKey.USE_PATH_STYLE,
PropertyKey.ROLE_ARN,
- PropertyKey.EXTERNAL_ID
+ PropertyKey.EXTERNAL_ID,
+ PropertyKey.CREDENTIALS_PROVIDER_TYPE
));
@SerializedName(value = "properties")
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
index 9b2aa2a8c11..54a55458c37 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
@@ -441,6 +441,7 @@ public class S3Properties extends
AbstractS3CompatibleProperties {
public static final String ROLE_ARN = "s3.role_arn";
public static final String EXTERNAL_ID = "s3.external_id";
+ public static final String CREDENTIALS_PROVIDER_TYPE =
"s3.credentials_provider_type";
public static final String ROOT_PATH = "s3.root.path";
public static final String BUCKET = "s3.bucket";
public static final String VALIDITY_CHECK = "s3_validity_check";
@@ -468,6 +469,7 @@ public class S3Properties extends
AbstractS3CompatibleProperties {
public static final String ROLE_ARN = "AWS_ROLE_ARN";
public static final String EXTERNAL_ID = "AWS_EXTERNAL_ID";
+ public static final String CREDENTIALS_PROVIDER_TYPE =
"AWS_CREDENTIALS_PROVIDER_TYPE";
public static final List<String> REQUIRED_FIELDS =
Arrays.asList(ENDPOINT);
public static final List<String> FS_KEYS = Arrays.asList(ENDPOINT,
REGION, ACCESS_KEY, SECRET_KEY, TOKEN,
@@ -557,6 +559,68 @@ public class S3Properties extends
AbstractS3CompatibleProperties {
if (properties.containsKey(Env.EXTERNAL_ID)) {
properties.putIfAbsent(EXTERNAL_ID,
properties.get(Env.EXTERNAL_ID));
}
+
+ if (properties.containsKey(Env.CREDENTIALS_PROVIDER_TYPE)) {
+ properties.putIfAbsent(CREDENTIALS_PROVIDER_TYPE,
properties.get(Env.CREDENTIALS_PROVIDER_TYPE));
+ }
+ }
+
+ private static AwsCredentialsProviderMode
getCredentialsProviderMode(Map<String, String> properties,
+ AwsCredentialsProviderMode defaultMode) {
+ String mode = properties.get(CREDENTIALS_PROVIDER_TYPE);
+ if (StringUtils.isBlank(mode)) {
+ mode = properties.get(Env.CREDENTIALS_PROVIDER_TYPE);
+ }
+ if (StringUtils.isBlank(mode)) {
+ return defaultMode;
+ }
+ return AwsCredentialsProviderMode.fromString(mode);
+ }
+
+ private static CredProviderTypePB getCredProviderTypePB(Map<String,
String> properties) {
+ AwsCredentialsProviderMode mode =
getCredentialsProviderMode(properties,
+ AwsCredentialsProviderMode.INSTANCE_PROFILE);
+ switch (mode) {
+ case DEFAULT:
+ return CredProviderTypePB.DEFAULT;
+ case ENV:
+ return CredProviderTypePB.ENV;
+ case SYSTEM_PROPERTIES:
+ return CredProviderTypePB.SYSTEM_PROPERTIES;
+ case WEB_IDENTITY:
+ return CredProviderTypePB.WEB_IDENTITY;
+ case CONTAINER:
+ return CredProviderTypePB.CONTAINER;
+ case INSTANCE_PROFILE:
+ return CredProviderTypePB.INSTANCE_PROFILE;
+ case ANONYMOUS:
+ return CredProviderTypePB.ANONYMOUS;
+ default:
+ throw new IllegalArgumentException("Unsupported AWS
credentials provider mode: " + mode);
+ }
+ }
+
+ private static TCredProviderType getTCredProviderType(Map<String, String>
properties) {
+ AwsCredentialsProviderMode mode =
getCredentialsProviderMode(properties,
+ AwsCredentialsProviderMode.INSTANCE_PROFILE);
+ switch (mode) {
+ case DEFAULT:
+ return TCredProviderType.DEFAULT;
+ case ENV:
+ return TCredProviderType.ENV;
+ case SYSTEM_PROPERTIES:
+ return TCredProviderType.SYSTEM_PROPERTIES;
+ case WEB_IDENTITY:
+ return TCredProviderType.WEB_IDENTITY;
+ case CONTAINER:
+ return TCredProviderType.CONTAINER;
+ case INSTANCE_PROFILE:
+ return TCredProviderType.INSTANCE_PROFILE;
+ case ANONYMOUS:
+ return TCredProviderType.ANONYMOUS;
+ default:
+ throw new IllegalArgumentException("Unsupported AWS
credentials provider mode: " + mode);
+ }
}
private static final Pattern IPV4_PORT_PATTERN =
Pattern.compile("((?:\\d{1,3}\\.){3}\\d{1,3}:\\d{1,5})");
@@ -633,7 +697,7 @@ public class S3Properties extends
AbstractS3CompatibleProperties {
if (properties.containsKey(S3Properties.EXTERNAL_ID)) {
builder.setExternalId(properties.get(S3Properties.EXTERNAL_ID));
}
- builder.setCredProviderType(CredProviderTypePB.INSTANCE_PROFILE);
+ builder.setCredProviderType(getCredProviderTypePB(properties));
}
return builder;
@@ -647,7 +711,7 @@ public class S3Properties extends
AbstractS3CompatibleProperties {
if (properties.containsKey(S3Properties.EXTERNAL_ID)) {
s3Info.setExternalId(properties.get(S3Properties.EXTERNAL_ID));
}
- s3Info.setCredProviderType(TCredProviderType.INSTANCE_PROFILE);
+ s3Info.setCredProviderType(getTCredProviderType(properties));
}
s3Info.setEndpoint(properties.get(S3Properties.ENDPOINT));
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3PropertiesTest.java
b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3PropertiesTest.java
index dc1b1270a39..e44af95de8f 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3PropertiesTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/datasource/property/storage/S3PropertiesTest.java
@@ -17,9 +17,13 @@
package org.apache.doris.datasource.property.storage;
+import org.apache.doris.catalog.S3StorageVault;
+import org.apache.doris.cloud.proto.Cloud.CredProviderTypePB;
import org.apache.doris.common.Config;
import org.apache.doris.common.ExceptionChecker;
import org.apache.doris.common.UserException;
+import org.apache.doris.thrift.TCredProviderType;
+import org.apache.doris.thrift.TS3StorageParam;
import com.google.common.collect.Maps;
import mockit.Expectations;
@@ -263,6 +267,34 @@ public class S3PropertiesTest {
Assertions.assertEquals("s3.us-west-2.amazonaws.com",
s3Props.getEndpoint());
}
+ @Test
+ public void testS3IamRoleCredentialsProviderTypeForCloudAndThrift() {
+ origProps.put("s3.endpoint", "s3.us-west-2.amazonaws.com");
+ origProps.put("s3.region", "us-west-2");
+ origProps.put("s3.bucket", "bucket");
+ origProps.put("s3.root.path", "root");
+ origProps.put("s3.role_arn",
"arn:aws:iam::123456789012:role/MyTestRole");
+
+ Assertions.assertEquals(CredProviderTypePB.INSTANCE_PROFILE,
+
S3Properties.getObjStoreInfoPB(origProps).getCredProviderType());
+ TS3StorageParam s3StorageParam =
S3Properties.getS3TStorageParam(origProps);
+ Assertions.assertEquals(TCredProviderType.INSTANCE_PROFILE,
s3StorageParam.getCredProviderType());
+
+ origProps.put("s3.credentials_provider_type", "container");
+ Assertions.assertEquals(CredProviderTypePB.CONTAINER,
+
S3Properties.getObjStoreInfoPB(origProps).getCredProviderType());
+ s3StorageParam = S3Properties.getS3TStorageParam(origProps);
+ Assertions.assertEquals(TCredProviderType.CONTAINER,
s3StorageParam.getCredProviderType());
+
+ origProps.remove("s3.credentials_provider_type");
+ origProps.put("AWS_CREDENTIALS_PROVIDER_TYPE", "env");
+ Assertions.assertEquals(CredProviderTypePB.ENV,
+
S3Properties.getObjStoreInfoPB(origProps).getCredProviderType());
+ s3StorageParam = S3Properties.getS3TStorageParam(origProps);
+ Assertions.assertEquals(TCredProviderType.ENV,
s3StorageParam.getCredProviderType());
+
Assertions.assertTrue(S3StorageVault.ALLOW_ALTER_PROPERTIES.contains(S3Properties.CREDENTIALS_PROVIDER_TYPE));
+ }
+
@Test
public void testGetAwsCredentialsProviderWithIamRoleAndExternalId(@Mocked
StsClientBuilder mockBuilder,
diff --git a/gensrc/proto/cloud.proto b/gensrc/proto/cloud.proto
index 710a0b0dd79..d16f30cb53f 100644
--- a/gensrc/proto/cloud.proto
+++ b/gensrc/proto/cloud.proto
@@ -269,6 +269,11 @@ enum CredProviderTypePB {
DEFAULT = 1; // DefaultAWSCredentialsProviderChain
SIMPLE = 2; // SimpleAWSCredentialsProvider, corresponding to (ak, sk)
INSTANCE_PROFILE = 3; // InstanceProfileCredentialsProvider
+ ENV = 4; // EnvironmentAWSCredentialsProvider
+ SYSTEM_PROPERTIES = 5; // SystemPropertiesCredentialsProvider
+ WEB_IDENTITY = 6; // STSAssumeRoleWebIdentityCredentialsProvider
+ CONTAINER = 7; // TaskRoleCredentialsProvider
+ ANONYMOUS = 8; // AnonymousAWSCredentialsProvider
}
message ObjectStoreInfoPB {
diff --git a/gensrc/thrift/AgentService.thrift
b/gensrc/thrift/AgentService.thrift
index 969bcfd142e..8041b8484ac 100644
--- a/gensrc/thrift/AgentService.thrift
+++ b/gensrc/thrift/AgentService.thrift
@@ -91,7 +91,12 @@ enum TCredProviderType {
// used for creating different credentials provider when creating s3client
DEFAULT = 0, // DefaultAWSCredentialsProviderChain
SIMPLE = 1, // SimpleAWSCredentialsProvider, corresponding to (ak, sk)
- INSTANCE_PROFILE = 2 // InstanceProfileCredentialsProvider
+ INSTANCE_PROFILE = 2, // InstanceProfileCredentialsProvider
+ ENV = 3, // EnvironmentAWSCredentialsProvider
+ SYSTEM_PROPERTIES = 4, // SystemPropertiesCredentialsProvider
+ WEB_IDENTITY = 5, // STSAssumeRoleWebIdentityCredentialsProvider
+ CONTAINER = 6, // TaskRoleCredentialsProvider
+ ANONYMOUS = 7 // AnonymousAWSCredentialsProvider
}
struct TS3StorageParam {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]