diff --git a/src/client.rs b/src/client.rs
index c67ef55..3b1cdde 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -8,40 +8,7 @@
     Request, Response,
 };
 
-#[derive(Debug, PartialEq)]
-pub struct Credentials {
-    access_key: String,
-    access_secret: String,
-    session_token: Option<String>,
-}
-
-pub trait CredentialProvider {
-    fn get_credentials(&self) -> Credentials;
-}
-
-pub struct StaticCredentialProvider {
-    access_key: String,
-    access_secret: String,
-}
-
-impl StaticCredentialProvider {
-    pub fn new(access_key: &str, access_secret: &str) -> Self {
-        Self {
-            access_key: access_key.to_owned(),
-            access_secret: access_secret.to_owned(),
-        }
-    }
-}
-
-impl CredentialProvider for StaticCredentialProvider {
-    fn get_credentials(&self) -> Credentials {
-        Credentials {
-            access_key: self.access_key.clone(),
-            access_secret: self.access_secret.clone(),
-            session_token: None,
-        }
-    }
-}
+use crate::credentials::CredentialProvider;
 
 #[derive(Default)]
 struct ClientConfig {
@@ -159,20 +126,6 @@
         assert_eq!(route_response.status.unwrap().code, Code::Ok as i32);
     }
 
-    #[test]
-    fn test_static_credentials_provider() {
-        let provider = StaticCredentialProvider::new("ak", "as");
-        let credentials = provider.get_credentials();
-        assert_eq!(
-            credentials,
-            Credentials {
-                access_key: String::from("ak"),
-                access_secret: String::from("as"),
-                session_token: None,
-            }
-        );
-    }
-
     #[tokio::test]
     async fn test_periodic_task() {
         let client_manager = ClientManager::default();
diff --git a/src/credentials.rs b/src/credentials.rs
new file mode 100644
index 0000000..43d44a9
--- /dev/null
+++ b/src/credentials.rs
@@ -0,0 +1,87 @@
+#[derive(Debug, PartialEq)]
+pub struct Credentials {
+    access_key: String,
+    access_secret: String,
+    session_token: Option<String>,
+}
+
+pub trait CredentialProvider {
+    fn get_credentials(&self) -> Credentials;
+}
+
+pub struct StaticCredentialProvider {
+    access_key: String,
+    access_secret: String,
+}
+
+impl StaticCredentialProvider {
+    pub fn new(access_key: &str, access_secret: &str) -> Self {
+        Self {
+            access_key: access_key.to_owned(),
+            access_secret: access_secret.to_owned(),
+        }
+    }
+}
+
+impl CredentialProvider for StaticCredentialProvider {
+    fn get_credentials(&self) -> Credentials {
+        Credentials {
+            access_key: self.access_key.clone(),
+            access_secret: self.access_secret.clone(),
+            session_token: None,
+        }
+    }
+}
+
+#[derive(Debug, Default)]
+pub struct EnvironmentVariableCredentialProvider {
+    access_key: String,
+    access_secret: String,
+}
+
+impl EnvironmentVariableCredentialProvider {
+    pub fn new() -> Result<Self, std::env::VarError> {
+        let access_key = std::env::var("ACCESS_KEY")?;
+        let access_secret = std::env::var("ACCESS_SECRET")?;
+        Ok(Self {
+            access_key,
+            access_secret,
+        })
+    }
+}
+
+impl CredentialProvider for EnvironmentVariableCredentialProvider {
+    fn get_credentials(&self) -> Credentials {
+        Credentials {
+            access_key: self.access_key.clone(),
+            access_secret: self.access_secret.clone(),
+            session_token: None,
+        }
+    }
+}
+
+#[cfg(test)]
+mod test {
+    use super::*;
+
+    #[test]
+    fn test_static_credentials_provider() {
+        let provider = StaticCredentialProvider::new("ak", "as");
+        let credentials = provider.get_credentials();
+        assert_eq!(
+            credentials,
+            Credentials {
+                access_key: String::from("ak"),
+                access_secret: String::from("as"),
+                session_token: None,
+            }
+        );
+    }
+
+    #[test]
+    fn test_environment_variable_credential_provider() {
+        let env_credentials_provider = EnvironmentVariableCredentialProvider::new();
+        assert_eq!(true, env_credentials_provider.is_err());
+
+    }
+}
diff --git a/src/lib.rs b/src/lib.rs
index 57769fd..7ffd5e9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,3 +1,4 @@
 pub mod client;
+pub mod credentials;
 pub mod pb;
 pub mod server;
