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