This is an automated email from the ASF dual-hosted git repository.

tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/master by this push:
     new f5c165acc Reload token from AWS_WEB_IDENTITY_TOKEN_FILE (#3274)
f5c165acc is described below

commit f5c165acc0e6cc4b34e0eaea006aab7e5bd28d66
Author: Raphael Taylor-Davies <[email protected]>
AuthorDate: Mon Dec 5 22:52:20 2022 +0000

    Reload token from AWS_WEB_IDENTITY_TOKEN_FILE (#3274)
    
    * Reload token from AWS_WEB_IDENTITY_TOKEN_FILE
    
    * Clippy
    
    * Update object_store/src/aws/credential.rs
    
    Co-authored-by: Andrew Lamb <[email protected]>
    
    Co-authored-by: Andrew Lamb <[email protected]>
---
 object_store/src/aws/credential.rs | 11 +++++++----
 object_store/src/aws/mod.rs        | 11 +++--------
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/object_store/src/aws/credential.rs 
b/object_store/src/aws/credential.rs
index 900af2406..199899d6f 100644
--- a/object_store/src/aws/credential.rs
+++ b/object_store/src/aws/credential.rs
@@ -341,7 +341,7 @@ impl CredentialProvider for InstanceCredentialProvider {
 #[derive(Debug)]
 pub struct WebIdentityProvider {
     pub cache: TokenCache<Arc<AwsCredential>>,
-    pub token: String,
+    pub token_path: String,
     pub role_arn: String,
     pub session_name: String,
     pub endpoint: String,
@@ -355,7 +355,7 @@ impl CredentialProvider for WebIdentityProvider {
             web_identity(
                 &self.client,
                 &self.retry_config,
-                &self.token,
+                &self.token_path,
                 &self.role_arn,
                 &self.session_name,
                 &self.endpoint,
@@ -477,11 +477,14 @@ impl From<AssumeRoleCredentials> for AwsCredential {
 async fn web_identity(
     client: &Client,
     retry_config: &RetryConfig,
-    token: &str,
+    token_path: &str,
     role_arn: &str,
     session_name: &str,
     endpoint: &str,
 ) -> Result<TemporaryToken<Arc<AwsCredential>>, StdError> {
+    let token = std::fs::read_to_string(token_path)
+        .map_err(|e| format!("Failed to read token file '{}': {}", token_path, 
e))?;
+
     let bytes = client
         .request(Method::POST, endpoint)
         .query(&[
@@ -490,7 +493,7 @@ async fn web_identity(
             ("RoleArn", role_arn),
             ("RoleSessionName", session_name),
             ("Version", "2011-06-15"),
-            ("WebIdentityToken", token),
+            ("WebIdentityToken", &token),
         ])
         .send_retry(retry_config)
         .await?
diff --git a/object_store/src/aws/mod.rs b/object_store/src/aws/mod.rs
index c92b8c29a..aa419d605 100644
--- a/object_store/src/aws/mod.rs
+++ b/object_store/src/aws/mod.rs
@@ -116,9 +116,6 @@ enum Error {
 
     #[snafu(display("Received header containing non-ASCII data"))]
     BadHeader { source: reqwest::header::ToStrError },
-
-    #[snafu(display("Error reading token file: {}", source))]
-    ReadTokenFile { source: std::io::Error },
 }
 
 impl From<Error> for super::Error {
@@ -588,13 +585,11 @@ impl AmazonS3Builder {
             (Some(_), None, _) => return 
Err(Error::MissingSecretAccessKey.into()),
             // TODO: Replace with `AmazonS3Builder::credentials_from_env`
             _ => match (
-                std::env::var_os("AWS_WEB_IDENTITY_TOKEN_FILE"),
+                std::env::var("AWS_WEB_IDENTITY_TOKEN_FILE"),
                 std::env::var("AWS_ROLE_ARN"),
             ) {
-                (Some(token_file), Ok(role_arn)) => {
+                (Ok(token_path), Ok(role_arn)) => {
                     info!("Using WebIdentity credential provider");
-                    let token = std::fs::read_to_string(token_file)
-                        .context(ReadTokenFileSnafu)?;
 
                     let session_name = std::env::var("AWS_ROLE_SESSION_NAME")
                         .unwrap_or_else(|_| "WebIdentitySession".to_string());
@@ -610,7 +605,7 @@ impl AmazonS3Builder {
 
                     Box::new(WebIdentityProvider {
                         cache: Default::default(),
-                        token,
+                        token_path,
                         session_name,
                         role_arn,
                         endpoint,

Reply via email to