diff --git a/core/services/s3/src/backend.rs b/core/services/s3/src/backend.rs index 3413fd5e81d6..97650ccd02b9 100644 --- a/core/services/s3/src/backend.rs +++ b/core/services/s3/src/backend.rs @@ -198,6 +198,12 @@ impl S3Builder { self } + /// Set assume_role_duration_seconds for this backend. + pub fn assume_role_duration_seconds(mut self, v: u32) -> Self { + self.config.assume_role_duration_seconds = Some(v); + self + } + /// Set default storage_class for this backend. /// /// Available values: @@ -850,6 +856,9 @@ impl Builder for S3Builder { assume_role_provider = assume_role_provider.with_role_session_name(role_session_name.clone()); } + if let Some(duration_seconds) = config.assume_role_duration_seconds { + assume_role_provider = assume_role_provider.with_duration_seconds(duration_seconds); + } provider = ProvideCredentialChain::new().push(assume_role_provider); } diff --git a/core/services/s3/src/config.rs b/core/services/s3/src/config.rs index 8c219de6c707..a15a2107a421 100644 --- a/core/services/s3/src/config.rs +++ b/core/services/s3/src/config.rs @@ -102,6 +102,8 @@ pub struct S3Config { pub external_id: Option, /// role_session_name for this backend. pub role_session_name: Option, + /// assume_role_duration_seconds for this backend. + pub assume_role_duration_seconds: Option, /// Disable config load so that opendal will not load config from /// environment. ///