2013-11-21 7 views
4

Прямо сейчас я использую javascript SDK для доступа к моему ведро s3, и он отлично работает, но я жестко закодировал все мои учетные данные в javascript напрямую, но в SDK они говорят, что вы можете сохраните их в объекте AWS.config, и я не знаю, как это сделать. Кроме того, онлайн-ресурсы не являются информативными, поэтому кто-то, пожалуйста, сообщите мне, как это сделать или любой другой лучший способ сделать это, вместо жесткого кодирования учетных данных?Доступ к AWS S3 с использованием AWS SDK для JavaScript

<script type="text/javascript"> 
     AWS.config.accessKeyId = 'dddddddddd'; 
     AWS.config.secretAccessKey = 'rrrrrrrrrrrrrrrreeeeeeeeeeeeeeeeeeeee'; 
     AWS.config.region = 'us-east-1'; 

     // create the AWS.Request object 
     var bucket = new AWS.S3({ params: { Bucket: 'some.bucket' } }); 
     bucket.listObjects(function (err, data) { 
      if (err) { 
       document.getElementById('status').innerHTML = 
        'Could not load objects from S3'; 
      } else { 
       document.getElementById('status').innerHTML = 
        'Loaded ' + data.Contents.length + ' items from S3'; 
       for (var i = 0; i < data.Contents.length; i++) { 
        document.getElementById('objects').innerHTML += 
         '<li>' + data.Contents[i].Key + '</li>'; 
       } 
      } 
     }); 
    </script> 
+0

Для тех, кто все еще посещает это, 'accessKeyId' и' secreteAccessKey' устарели. Я решил использовать этот метод: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-json-file.html –

ответ

0

Я считаю, что это не поддерживается в браузере. SDK AWS Javascript полностью поддерживается на узле.js.

Прочитайте это: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS.html

Это отчасти имеет смысл, так как никто не хотел подвергать личную информацию аутентификации/авторизации в общественных местах.

Если вы хотите получить представление о том, что вы могли бы передать учетные данные с помощью JSONP с другого сервера (http://en.wikipedia.org/wiki/JSONP) и ограничить доступ к определенным клиентам с помощью брандмауэра, но он может стать бесполезным.


На другой ноте, почему бы не выставить ведро S3 публично доступ для чтения, поскольку Javascript в браузере является общедоступным в любом случае?

+0

Не содержит AWS много общедоступной информации об аутентификации/авторизации? (см. примеры Cognito SDK). Мое понимание, исправьте меня, если я ошибаюсь, заключается в том, что авторизация может выполняться на основе идентификации, а ключи сеанса генерируются для логинов, которые привязаны к роли IAM, и что система «достаточно безопасна», поскольку эти ключи передан через HTTPS, заблокирован для домена и истек. А также .. прекрасная прямая секретность может быть включена. Таким образом, «идентификационные ключи доступа» могут поступать из входа в учетную запись Identity Pool и не должны быть фактическими «admin-access-keys» в ведро. Имеют смысл? – f1lt3r

0

Существует способ получить загрузку JS в браузере, не раскрывая ваши личные учетные данные. Однако для этого требуется некоторая логика на стороне сервера.

См ответить здесь: S3 upload directly in JavaScript

1

Я думаю, что лучший способ, чтобы сохранить его в ~/.aws/учетные данные. Вы можете сделать это путем создания файла или с помощью AWS настройки с командной строкой, отвечать на вопросы, и он будет генерировать этот файл:

[default] 
aws_access_key_id = THEACCESSKEYHERE 
aws_secret_access_key = THESECRETACCESSKEYHERE 

и ~/.aws/конфигурацию:

[default] 
output = json (or whatever you prefer here) 
region = us-east-1 (or whatever region you are using) 

Это работает без необходимости вручную добавлять его для каждой команды или вызова требуемого AWS.

+0

Что вы вкладываете в javascript, чтобы загрузить его из файла .aws/credentials? – Dtor

+0

@Dtor 'console.log (process.env.aws_secret_access_key)' – f1lt3r

Смежные вопросы