Struct S3ExpressSessionGranter
pub struct S3ExpressSessionGranter { /* private fields */ }services-s3 only.Expand description
Grants expiration-aware credentials for one S3 Express directory bucket or one caller-configured compatible endpoint.
The source credential authorizes s3express:CreateSession and is used only
to sign the issuance request. The output contains only the independently
usable access key, secret access key, S3 session token, and exact expiration
returned by S3. Every call performs a new CreateSession; granted outputs
are never cached.
S3 fixes the session lifetime at five minutes and does not expose a lifetime
request parameter. Call reqsign_core::Granter::grant with None.
§Example
use reqsign_aws_v4::{
DefaultCredentialProvider, S3ExpressSessionConfig, S3ExpressSessionGrant,
S3ExpressSessionGranter,
};
use reqsign_core::{Context, Granter};
let config = S3ExpressSessionConfig::from_bucket(
"my-bucket--usw2-az1--x-s3",
"us-west-2",
)?;
let grant = S3ExpressSessionGrant::maximum_allowed();
let granter = Granter::new(
Context::new(),
DefaultCredentialProvider::new(),
S3ExpressSessionGranter::new(config, grant),
);
let credential = granter.grant(None).await?;Implementations§
§impl S3ExpressSessionGranter
impl S3ExpressSessionGranter
pub fn new(
config: S3ExpressSessionConfig,
grant: impl Into<S3ExpressSessionGrantSelection>,
) -> S3ExpressSessionGranter
pub fn new( config: S3ExpressSessionConfig, grant: impl Into<S3ExpressSessionGrantSelection>, ) -> S3ExpressSessionGranter
Create a granter with stable bucket configuration and a mode selection.
pub fn new_with_custom_endpoint(
bucket: impl Into<String>,
region: impl Into<String>,
endpoint: impl Into<String>,
grant: impl Into<S3ExpressSessionGrantSelection>,
) -> Result<S3ExpressSessionGranter, Error>
pub fn new_with_custom_endpoint( bucket: impl Into<String>, region: impl Into<String>, endpoint: impl Into<String>, grant: impl Into<S3ExpressSessionGrantSelection>, ) -> Result<S3ExpressSessionGranter, Error>
Create a granter for a compatible service at a custom HTTPS endpoint.
This path deliberately bypasses AWS directory-bucket name, Zone ID,
partition, and DNS derivation rules. The endpoint must already route
CreateSession to bucket; reqsign sends the exact configured authority
and does not add the bucket to the request target. region is used
verbatim in the SigV4 credential scope.
§Security
The endpoint receives AWS Authorization material and, when the source
credential is temporary, its x-amz-security-token. Reqsign validates
endpoint syntax but cannot determine whether the configured service is
authorized to receive those credentials or implements CreateSession.
§Example
use reqsign_aws_v4::{
S3ExpressSessionGrant, S3ExpressSessionGranter, S3ExpressSessionMode,
};
let granter = S3ExpressSessionGranter::new_with_custom_endpoint(
"compatible-bucket",
"custom-region-1",
"https://sessions.example.com",
S3ExpressSessionGrant::new(S3ExpressSessionMode::ReadWrite),
)?;pub fn with_grant(
self,
grant: impl Into<S3ExpressSessionGrantSelection>,
) -> S3ExpressSessionGranter
pub fn with_grant( self, grant: impl Into<S3ExpressSessionGrantSelection>, ) -> S3ExpressSessionGranter
Replace the bound mode selection while retaining the stable bucket configuration.
Trait Implementations§
§impl Clone for S3ExpressSessionGranter
impl Clone for S3ExpressSessionGranter
§fn clone(&self) -> S3ExpressSessionGranter
fn clone(&self) -> S3ExpressSessionGranter
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for S3ExpressSessionGranter
impl Debug for S3ExpressSessionGranter
§impl GrantCredential for S3ExpressSessionGranter
impl GrantCredential for S3ExpressSessionGranter
§type Credential = Credential
type Credential = Credential
§fn required_valid_until(
&self,
_credential: &<S3ExpressSessionGranter as GrantCredential>::Credential,
_expires_in: Option<Duration>,
) -> Timestamp
fn required_valid_until( &self, _credential: &<S3ExpressSessionGranter as GrantCredential>::Credential, _expires_in: Option<Duration>, ) -> Timestamp
§async fn grant_credential(
&self,
ctx: &Context,
credential: &<S3ExpressSessionGranter as GrantCredential>::Credential,
expires_in: Option<Duration>,
) -> Result<<S3ExpressSessionGranter as GrantCredential>::Credential, Error>
async fn grant_credential( &self, ctx: &Context, credential: &<S3ExpressSessionGranter as GrantCredential>::Credential, expires_in: Option<Duration>, ) -> Result<<S3ExpressSessionGranter as GrantCredential>::Credential, Error>
Auto Trait Implementations§
impl Freeze for S3ExpressSessionGranter
impl RefUnwindSafe for S3ExpressSessionGranter
impl Send for S3ExpressSessionGranter
impl Sync for S3ExpressSessionGranter
impl Unpin for S3ExpressSessionGranter
impl UnsafeUnpin for S3ExpressSessionGranter
impl UnwindSafe for S3ExpressSessionGranter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> GrantCredentialDyn for Twhere
T: GrantCredential + ?Sized,
impl<T> GrantCredentialDyn for Twhere
T: GrantCredential + ?Sized,
§type Credential = <T as GrantCredential>::Credential
type Credential = <T as GrantCredential>::Credential
§fn required_valid_until_dyn(
&self,
credential: &<T as GrantCredentialDyn>::Credential,
expires_in: Option<Duration>,
) -> Timestamp
fn required_valid_until_dyn( &self, credential: &<T as GrantCredentialDyn>::Credential, expires_in: Option<Duration>, ) -> Timestamp
GrantCredential::required_valid_until.§fn grant_credential_dyn<'a>(
&'a self,
ctx: &'a Context,
credential: &'a <T as GrantCredentialDyn>::Credential,
expires_in: Option<Duration>,
) -> Pin<Box<dyn Future<Output = Result<<T as GrantCredentialDyn>::Credential, Error>> + Send + 'a>>
fn grant_credential_dyn<'a>( &'a self, ctx: &'a Context, credential: &'a <T as GrantCredentialDyn>::Credential, expires_in: Option<Duration>, ) -> Pin<Box<dyn Future<Output = Result<<T as GrantCredentialDyn>::Credential, Error>> + Send + 'a>>
GrantCredential::grant_credential.§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].impl<T> MaybeSend for Twhere
T: Send,
impl<T> MaybeSend for Twhere
T: Send,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<E> ResultError for E
impl<T> ResultType for T
§impl<T> Scope for T
impl<T> Scope for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.