2016-11-15 18 views
1

私たちはAmazon S3を全面的に使用し、メンテナンスを容易にするために、適切なバケット権限などを持つ別個のIAMユーザを設定します。これのように私たちのRuby /シナトラアプリの初期化セクションでユーザー:AWS-SDKのデフォルトの資格情報を無効にする

# MyS3UserIAM 
Aws.config.update({ 
     :region => 'us-east-1', 
     :credentials => Aws::Credentials.new(ENV['AWS_S3_KEY'],ENV['AWS_S3_SECRET']) 
}) 

我々はS3の資格情報を再指定するたびにすることなく、すべての我々のコードを通じてオブジェクトをインスタンス化することができますので、これは、素晴らしい作品。

問題が発生しました。ここでは、わずか2回のコールでAmazon DynamoDBを使用する必要があるサイトのサブセクションに小さなルーチンを追加しました。私たちは、DynamoDBのテーブルへのアクセス権を持つ別のIAMを設定して、私たちは日常の中にためなどのオブジェクトを作成している:

# 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を与えるが、IAM名としてMyS3UserIAMを表示するので実際には、エラーは、紛らわしいです!)

私が指定していると考えているだろうAws::Objectインスタンシエーション中の資格情報はAws.config設定を上書きしますが、そうではないと思われます。これを回避する方法はありますか?

答えて

1

Awsクライアントの構築時に明示的な資格情報を指定すると、Aws.configの設定が上書きされます。何かが間違っている。

環境内でAWS_DYNAMO_KEY/AWS_DYNAMO_SECRETのenv変数がnilに解決されている可能性があります。クライアントを構築するときにaccess_key_id:nilを渡すと、SDKはパラメータを指定しなかったかのようにSDKを処理し、資格情報を見つけるために資格プロバイダのチェーンにフォールバックします。あなたが期待しているものと合っていることを再度確認してください。

IAMユーザーに関連付けられているIAMポリシーに問題がある可能性もあります。環境変数に適切な値が設定されている場合は、編集されたIAMポリシーを投稿してレビューできるようにしてください。

関連する問題