Ruby 覆盖AWS-SDK中的默认凭据

Ruby 覆盖AWS-SDK中的默认凭据,ruby,amazon-web-services,sinatra,aws-sdk,amazon-iam,Ruby,Amazon Web Services,Sinatra,Aws Sdk,Amazon Iam,我们有一个始终使用Amazon S3的web应用程序,为了便于维护,我们设置了一个具有适当bucket权限的独立IAM用户。我们在Ruby/Sinatra应用程序的初始化器部分预先设置了该用户的凭据,如下所示: # MyS3UserIAM Aws.config.update({ :region => 'us-east-1', :credentials => Aws::Credentials.new(ENV['AWS_S3_KEY'],ENV['AWS_

我们有一个始终使用Amazon S3的web应用程序,为了便于维护,我们设置了一个具有适当bucket权限的独立IAM用户。我们在Ruby/Sinatra应用程序的初始化器部分预先设置了该用户的凭据,如下所示:

# MyS3UserIAM
Aws.config.update({
        :region => 'us-east-1',
        :credentials => Aws::Credentials.new(ENV['AWS_S3_KEY'],ENV['AWS_S3_SECRET'])
})
这非常有效,因为我们可以在代码中实例化S3对象,而无需每次重新指定凭据

问题是,我们现在在站点的一个小节中添加了一个小例程,它只需要使用Amazon DynamoDB进行两次调用。我们已经设置了一个单独的IAM,该IAM具有对DynamoDB表的权限,我们正在例程中创建对象:

# MyDynamoUserIAM
mydynamodb = Aws::DynamoDB::Client.new(
  access_key_id: ENV['AWS_DYNAMO_KEY'],
  secret_access_key: ENV['AWS_DYNAMO_SECRET']
)
问题是,当我们尝试使用mydynamodb进行任何查询时,都会遇到访问失败,即my3UserIAM对我们的DynamoDB表没有权限

(事实上,该错误令人困惑,因为错误消息在错误字符串中给出了我们的MyDynamoUserIAMARN,但显示了my3useriam作为IAM名称!)


我本以为在
Aws::Object
实例化过程中指定凭据会覆盖
Aws.config
设置,但似乎没有。有没有办法解决这个问题?

在构建Aws客户端时指定显式凭据将覆盖Aws.config设置。有些事情出了问题

我怀疑AWS_DYNAMO_KEY/AWS_DYNAMO_SECRET env变量在您的环境中解析为nil。如果在构造客户机时传入access\u key\u id:nil,SDK会将其视为未提供参数,并返回凭证提供程序链以查找凭证。仔细检查您得到的值是否与您期望的值相符

您与该IAM用户关联的IAM策略也可能存在问题。如果环境变量具有正确的值,请发布您的修订IAM策略,以便我们可以查看它