2016-07-18 42 views
1

awsのいくつかのサービスを使用するPythonアプリケーションがあります。私は1つのアクセスキーと各サービスの秘密を持っています。ほとんどのサービスでは、私はbotoを使用しており、環境内でAWS_ACCESS_KEY_IDまたはAWS_SECRET_ACCESS_KEYは必要ありません。 dynamoDBの場合は、pynamoDBを使用しています。これらの変数を設定せずに資格情報を設定する方法はわかりません。PynamoDBで環境変数の代わりにコードでアクセス資格情報を使用する方法

資格情報の衝突などのエラーを避けるため、設定ファイルで資格情報を標準化したいと考えています。

これは可能ですか?もしそうなら、それはどうやって行なわれますか? the PynamoDB documentationから

答えて

2

PynamoDBは、DynamoDBのAPIとの対話するためにbotocoreを使用しています。したがって、botocoreでサポートされている 構成方法はPynamoDBで動作します。 ローカル開発の場合は、 AWS_ACCESS_KEY_IDやAWS_SECRET_ACCESS_KEYなどの環境変数を使用することをお勧めします。 AWSが推奨するようにIAMユーザーを使用することはもちろん可能です。さらに、 EC2ロールも機能し、 EC2で実行するときに推奨されます。

相互作用しているサービスがすべて同じAWSアカウント内にある場合は、必要なすべてのアクセス権が添付された単一のIAMアカウントを作成することをお勧めします。コードはEC2またはLambdaで実行されています。

+0

まずはお返事ありがとうございます。私はPynamoDBのドキュメントでそれを見ました。ボトコアの文書では、低レベルのセッションまたはクライアントを作成する方法を説明しています。しかし、私はそのクライアントまたはセッションをpynamoDBの高レベル部分にどのように接続するのか分かりません。また、すべてのサービスの資格情報は、私の場合(私の会社ポリシー)のオプションではありません。 – joaonrb

0

私はこれをオンラインで検索していましたが、これは古いですが、私は解決策を分かち合い、役立つ人になるかもしれません。

Dynamo DBモデルを定義するときは、IAMロール名を含むコードを1行追加するだけで済みます。以下はサンプルモデルです。

次のようなモデルを変更すると、コンテナにファイル~/.aws/credentialsは必要ありません。

注::DynamoDBReadを添付するか、IAMロールにポリシーを書き込むようにしてください。インスタンスIAMロールにはAmazonDynamoDBFullAccessポリシーが添付されています。

from pynamodb.models import Model 
from pynamodb.attributes import (
     UnicodeAttribute, NumberAttribute, UnicodeSetAttribute, UTCDateTimeAttribute 
    ) 
import urllib2 
class TestClass(Model): 
    email = UnicodeAttribute(hash_key=True) 
    UUID = UnicodeAttribute(range_key=True) 


    class Meta: 
     region = 'eu-west-2' 
     # Refer: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html 
     instanceProfileName = urllib2.urlopen(
      'http://169.254.169.254/latest/meta-data/iam/security-credentials/').read() 

     table_name = 'dynamodb-tablename' 
関連する問題