Module aws_types::credentials [−][src]
Expand description
AWS SDK Credentials
Implementing your own credentials provider
While for many use cases, using a built in credentials provider is sufficient, you may want to implement your own credential provider.
With static credentials
Credentials
implement
`ProvideCredentials directly, so no custom provider
implementation is required:
use aws_types::Credentials;
let my_creds = Credentials::from_keys("akid", "secret_key", None);
let conf = dynamodb::Config::builder().credentials_provider(my_creds);
With dynamically loaded credentials
If you are loading credentials dynamically, you can provide your own implementation of
ProvideCredentials
. Generally, this is best done by
defining an inherent async fn
on your structure, then calling that method directly from
the trait implementation.
use aws_types::credentials::{CredentialsError, Credentials, ProvideCredentials, future, self};
#[derive(Debug)]
struct SubprocessCredentialProvider;
async fn invoke_command(command: &str) -> String {
// implementation elided...
}
/// Parse access key and secret from the first two lines of a string
fn parse_credentials(creds: &str) -> credentials::Result {
let mut lines = creds.lines();
let akid = lines.next().ok_or(CredentialsError::provider_error("invalid credentials"))?;
let secret = lines.next().ok_or(CredentialsError::provider_error("invalid credentials"))?;
Ok(Credentials::new(akid, secret, None, None, "CustomCommand"))
}
impl SubprocessCredentialProvider {
async fn load_credentials(&self) -> credentials::Result {
let creds = invoke_command("load-credentials.py").await;
parse_credentials(&creds)
}
}
impl ProvideCredentials for SubprocessCredentialProvider {
fn provide_credentials<'a>(&'a self) -> future::ProvideCredentials<'a> where Self: 'a {
future::ProvideCredentials::new(self.load_credentials())
}
}
Modules
Structs
AWS SDK Credentials
Credentials Provider wrapper that may be shared
Enums
Traits
Asynchronous Credentials Provider