0

私は、Boto3がアクセスファイルと秘密鍵をハードコードするのではなく、設定ファイルから取得するようにします。私のLinuxサーバーでは、次の環境変数AWS_SHARED_CREDENTIALS_FILEを値/app/.aws/credentialsに設定しました。 /app/.aws/では、私は次の内容を含む名前の資格情報を使用してファイルを置く:Boto3は設定ファイルのキーを使用しません

[default] 
aws_access_key_id = abcd 
aws_secret_access_key = abcd 

はもちろん、私の代わりにABCDの実際のキーを使用していました。

のPython:

import boto3 
conn = boto3.client('s3', 
        region_name="eu-west-1", 
        endpoint_url="endpoint", 
        aws_access_key_id=aws_access_key_id, 
        aws_secret_access_key=aws_secret_access_key, 
        config=Config(signature_version="s3", s3={'addressing_style': 'path'})) 

しかしそれはname'aws_access_key_id' is not defined言います。どうすれば修正できますか?おかげ

編集:あなたは資格情報はAWSの資格情報がすでに作成してフォルダを持っている場合

>>> os.environ['AWS_SHARED_CREDENTIALS_FILE'] 
'/app/.aws/credentials' 
+0

を上長命の資格情報を保管しないでくださいサーバーを避けることができます。一時的な資格情報(http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html)を使用してアクセス許可を与えるには、IAMロールを使用します。 – jarmod

+0

アドバイスをいただきありがとうございますが、私はAmazonによってホストされていないS3サービスを使用しています。 – user3080315

答えて

2

、これはあなたのクライアントのインスタンスを作成するときにそれらを指定する必要はありませんを意味します。以下は動作するはずです:

import boto3 

conn = boto3.client('s3', 
       region_name="eu-west-1", 
       endpoint_url="endpoint", 
       config=Config(signature_version="s3", s3={'addressing_style': 'path'})) 
1

あなたはEC2インスタンス上でアプリケーションを実行している場合、また、あなたのインスタンスにS3の役割を割り当てて、その役割を担うのboto持つことができます。インスタンスにキーを格納する必要がなくなります。セクションで

ルックは、ドキュメントの "ロール・プロバイダを想定":同様IAMロールに

http://boto3.readthedocs.io/en/latest/guide/configuration.html

リンク:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html

関連する問題