2017-02-04 2 views
0

ich meine aws Anmeldeinformationen in meiner .env Datei vor kurzem geändertaws-sdk alt ACCESS_KEY_ID mit

AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX 
AWS_SECRET_ACCESS_KEY= 

jedoch auf jeder s3.getSignedUrl Anfrage verwendet das SDK die vorherigen (root) Anmeldeinformationen.

s3.getSignedUrl('putObject', s3Params, (err, data) => { 
    if (err) { 
     return res.end(); 
    } 
    console.log(data)  <--------------- 
    const returnData = { 
     signedRequest: data, 
     awsImageUrl: `https://${S3_BUCKET}.s3.amazonaws.com/${imageName}` 
    }; 
    res.json(returnData); 
    res.end(); 
    }); 

Diese protokolliert

https://my-bucket.s3.amazonaws.com/my-pic.png?AWSAccessKeyId=YYYYYYYYYYYYYYYContent-Type=image%2Fpng&Expires=SOMEDATE&Signature=SOMESIGNATURE&x-amz-acl=public-read 

YYYYYYYYYYYYYYY die vorherige ist, root-Anmeldeinformationen

Ist es möglich, dass die SDK-Caches diese Daten?

Wenn ja, wie mache ich es ungültig?

Oder habe ich etwas im Code übersehen?

+1

Worauf bezieht sich diese .env-Datei? – jarmod

+1

Das Format für ~/.aws/credentials, wenn Sie das verwenden, ist aws_access_key_id und aws_secret_access_key (Kleinbuchstaben). – jarmod

+0

@jarmod Ich habe das buchstäblich gesehen, indem ich 'console.log (s3.getSignedUrl ('putObject', s3Params))' 'ausgedruckt habe. Naiv gedacht SDK verwendet .env-Datei. Ich werde meine Frage kurz beantworten – softcode

Antwort

1

AWS Documentation

Verfallen und Refreshing Credentials

Gelegentlich Anmeldeinformationen können in der Mitte eines langen Lauf Anwendung ablaufen. In diesem Fall versucht das SDK automatisch, die Anmeldeinformationen vom Speicherort zu aktualisieren, wenn die Klasse Credentials die refresh() -Methode implementiert.

Wenn Sie einen Speicherort für Anmeldeinformationen implementieren, müssen Sie eine Unterklasse der Klasse Credentials erstellen und die Methode refresh() überschreiben. Diese Methode ermöglicht das Abrufen von Anmeldeinformationen von dem Sicherungsspeicher, sei es ein Dateisystem, eine Datenbank oder ein Netzwerk Speicher. Die Methode sollte die Anmeldeinformationen für das Objekt zurücksetzen.

+0

Ich sehe nicht, wie das ist meine Frage beantwortet, da ich ausdrücklich die Zugangsdaten selbst getauscht haben. Ich frage nicht, ob sie abgelaufen sind. Was fehlt mir in deiner Antwort? – softcode

+0

Sind Sie sicher, dass die Anmeldeinformationen nicht aus einer Datei geladen werden und nur aus dem env geladen werden? Auf welchem ​​Betriebssystem laufen Sie? Welche Version des SDK verwenden Sie? Wie initialisierst du die Zugangsdaten? Haben Sie versucht, das env zu löschen? komplett und sehen was passiert? Hast du versucht, deinen Server neu zu starten? Aktualisieren Sie Ihre Frage mit Details, damit wir Ihnen bei der Lösung Ihres Problems helfen können. –

+0

Ok nur identifiziert das Problem wird aufzuschreiben, ich danke Ihnen für das Anheben, die richtigen Fragen – softcode

1

Bei der Suche nach Anmeldeinformationen verwenden JavaScript und Node SDKs die AWS.CredentialProviderChain.

Die default credentials providers sind:

AWS.CredentialProviderChain.defaultProviders = [function() { 
    return new AWS.EnvironmentCredentials('AWS'); 
}, function() { 
    return new AWS.EnvironmentCredentials('AMAZON'); 
}, function() { 
    return new AWS.SharedIniFileCredentials(); 
}, function() { 
    if (AWS.ECSCredentials.prototype.getECSRelativeUri() !== undefined) { 
    return new AWS.ECSCredentials(); 
    } 
    return new AWS.EC2MetadataCredentials(); 
}] 

So ist es in den folgenden Orten aussieht:

  • Umwelt Anmeldeinformationen
  • ~/.aws/credentials Datei
  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
  • Instanz Metadaten