2017-02-04 5 views
0

Недавно я изменил мои AWS учетные данные в моем .env файлеAWS-SDK, используя старый ACCESS_KEY_ID

AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX 
AWS_SECRET_ACCESS_KEY= 

Однако на каждом s3.getSignedUrl запрос, SDK использует предыдущие (корень) полномочия.

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(); 
    }); 

Это журналы

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

YYYYYYYYYYYYYYY является предыдущие, корневые учетные данные

Возможно ли, что в SDK кэшей эти данные?

Если да, то как это сделать недействительным?

Или я пропустил что-то в коде?

+1

В этом файле .env вы ссылаетесь? – jarmod

+1

Формат ~/.aws/credentials, если это то, что вы используете, - aws_access_key_id и aws_secret_access_key (нижний регистр). – jarmod

+0

@jarmod Я буквально только что увидел это, напечатав 'console.log (s3.getSignedUrl ('putObject', s3Params)). Наивно думал, что SDK использует файл .env. Ответ на мой вопрос в ближайшее время – softcode

ответ

1

AWS Documentation

Освобождающиеся и освежающие Полномочия

Иногда учетные данные могут истечь в середине продолжительного приложения. В этом случае SDK автоматически попытается выполнить , чтобы обновить учетные данные из хранилища, если класс Credentials реализует метод refresh().

Если вы используете хранилище учетных данных, вам нужно будет создать подкласс класса Credentials и переопределить метод refresh() . Этот метод позволяет получить учетные данные от хранилища резервных копий, будь то файловая система, база данных или какая-либо сеть . Метод должен сбросить атрибуты учетных данных объекта .

+0

Я не вижу, как это отвечает на мой вопрос, так как я явно менял учетные данные самостоятельно. Я не спрашиваю, истек ли срок их действия. Что мне не хватает в вашем ответе? – softcode

+0

Вы уверены, что учетные данные не загружены из какого-либо файла и загружаются только из env.? В какой ОС вы работаете? Какую версию SDK вы используете? Как вы инициализируете учетные данные? Вы пытались удалить env. полностью и посмотреть, что произойдет? Вы пытались перезапустить свой сервер? Обновите свой вопрос с подробной информацией, чтобы мы могли легче решить вашу проблему. –

+0

Хорошо, только что определил, что проблема будет написана, спасибо за поднятие правильных вопросов. – softcode

1

При поиске учетных данных SDK для JavaScript и узлов используют AWS.CredentialProviderChain.

default credentials providers являются:

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(); 
}] 

Таким образом, это выглядит в следующих местах:

  • полномочий среды
  • ~/.aws/credentials файл
  • AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
  • метаданных экземпляра
Смежные вопросы