У нас есть веб-приложение, которое использует Amazon S3 повсюду, и для облегчения обслуживания мы настроили отдельного пользователя IAM с соответствующими разрешениями на ведро и т. Д. Мы предварительно установили учетные данные для этого пользователь в разделе инициализации нашего приложения рубин/Sinatra, так как при:Переопределение учетных данных по умолчанию в AWS-SDK
# MyS3UserIAM
Aws.config.update({
:region => 'us-east-1',
:credentials => Aws::Credentials.new(ENV['AWS_S3_KEY'],ENV['AWS_S3_SECRET'])
})
Это прекрасно работает, потому что мы можем создать экземпляр S3 все объекты в нашем коде без необходимости повторно указать учетные данные каждый раз.
Проблема заключается в том, что теперь мы добавили небольшую подпрограмму в подраздел нашего сайта, который должен использовать Amazon DynamoDB всего за два вызова. Мы создали отдельный IAM с правами доступа к таблицам DynamoDB, и мы создаем объект как, таким образом, в рамках подпрограммы:
# MyDynamoUserIAM
mydynamodb = Aws::DynamoDB::Client.new(
access_key_id: ENV['AWS_DYNAMO_KEY'],
secret_access_key: ENV['AWS_DYNAMO_SECRET']
)
Проблема заключается в том, что, когда мы пытаемся сделать любой запрос, используя mydynamodb, мы получаем отказ доступа, заявляя, что MyS3UserIAM не имеет разрешений на наши таблицы DynamoDB.
(На самом деле, ошибка сбивает с толку, потому что сообщение об ошибке дает нашим MyDynamoUserIAM ARN в строке ошибки, но отображает MyS3UserIAM как имя IAM!)
я бы подумал, что указав учетные данные во время создания Aws::Object
будут отменять настройки Aws.config
, но, похоже, это не так. Есть ли способ обойти это?