Boto3エラー:botocore.exceptions.NoCredentialsError:資格情報が見つかりません


112

次のコードを実行すると、常にこのエラーが発生します。

s3 = boto3.resource('s3')
    bucket_name = "python-sdk-sample-%s" % uuid.uuid4()
    print("Creating new bucket with name:", bucket_name)
    s3.create_bucket(Bucket=bucket_name)

資格情報ファイルを保存しました

C:\Users\myname\.aws\credentials、そこからBotoが私の資格情報を読み取る必要があります。

私の設定は間違っていますか?

これはからの出力ですboto3.set_stream_logger('botocore', level='DEBUG')

2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env
2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role

1
boto3.set_stream_logger('botocore', level='DEBUG')コードの前に追加して、デバッグ出力を投稿できますか?資格情報を探している場所が表示されます。
jamesls

Botoがクレデンシャル設定ファイルの非常に少ない場所を探すようですが、どういうわけか私のホームディレクトリを調べません...
d -_- b

2
環境変数HOMEを指すようにC:\Users\myname設定AWS_SHARED_CREDENTIALS_FILEするか、認証情報ファイルを直接指すように設定してみてください。
garnaat 2015年

説明したように環境変数HOMEを設定しましたが、次のエラーが発生します。 botocore.exceptions.NoRegionError: You must specify a region. *私の設定ファイル↓は私の資格証明と同じフォルダにあります。 [default] ap-northeast-1
d -_- b

1
garnaatのコメントを使用して問題を修正することができました。
LaundroMat 2017

回答:


94

手動でキーを指定してみてください

    s3 = boto3.resource('s3',
         aws_access_key_id=ACCESS_ID,
         aws_secret_access_key= ACCESS_KEY)

セキュリティ上の理由から、コードにACCESS_IDとACCESS_KEYを直接含めないでください。@Tiger_Mikeによって提案されているように、環境設定の使用とコードへの注入を検討してください。

本番環境では、ローテーションアクセスキーの使用を検討してください。https//docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey


この方法は、Djangoで直接処理する場合に役立ちます。ありがとうございました。
Joepreludian 2017年

1
バージョン管理になる可能性のあるコードに秘密を入れているため、これはさらに危険です。
nu everest 2018

4
@nueverestこれは正しいですが、宣言を設定ファイルに移動してから、環境変数を介して注入することで、これを回避できます。
Tiger_Mike 2018年

これは機能しますが、ベストプラクティスに従っていません。
ベンジャーマン2018年

1
ありがとう。これは、開発セットアップの一時的な修正として使用できます。これらの変数を.env(コミットされていない)ファイルからロードするのが理想的であり、~/.aws/フォルダーから選択するよりも優れています。
SuperNova 2018

56

同じ問題があり、~/.aws/credentialsファイルの形式が間違っていることがわかりました。

以下を含むファイルで動作しました:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

プロファイル名は " [default]"でなければならないことに注意してください。一部の公式ドキュメントは[credentials]、「」という名前のプロファイルを参照していますが、これは私には機能しませんでした。


1
Windowsでも機能します(C:\ Users \ User \ .aws \ credentials)
Mr_and_Mrs_D

4
セッション= boto3.Session(profile_name = <your_profile>)を使用してboto3で使用するプロファイルを指定できます
Mattia Paterna

aws configureaws-cliがインストールされている場合も使用できます
radtek

2
私はansibleを介してそれを実行していたので、コマンドを実行しているときに別のユーザーになるかどうかを確認する必要があります。たとえば、 'sudo'を使用していないことを確認してください。そうしないと、ルートaws資格情報にアクセスしようとし、存在しない場合は失敗します。
radtek、2018年

28

別の方法を探している場合は、AmazonCLIを使用して認証情報を追加してみてください

端末タイプから:-

aws configure

次に、キーと地域を入力します。


17

Unixの〜/ .aws / credentialsファイルが次のようになっていることを確認してください:

[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

Pythonスクリプトは次のようになり、機能します。

from __future__ import print_function
import boto3
import os

os.environ['AWS_PROFILE'] = "MyProfile1"
os.environ['AWS_DEFAULT_REGION'] = "us-east-1"

ec2 = boto3.client('ec2')

# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
print('Regions:', response['Regions'])

ソース:https : //boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration


1
output = json通常に置かれる~/.aws/config[profile MyProfile1]セクション。credentials代わりにファイルで指定した場合、機能しない可能性があります。
cjs 2018年

@Curt J. Sampson確認せずに、あなたが正しいと確信しています。訂正ありがとうございます。
TheWalkingData 2019

AWS_PROFILE = myprofleをエクスポートしましたが、うまくいきませんでしたが、うまくいきました。それが起こっている理由についての説明。
Adarsh Trivedi

5

これらの手順は、AWSのシングルユーザープロファイルを持つWindowsマシン用です。~/.aws/credentialsファイルが次のようになって いることを確認してください

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

資格情報にあるAWS_DEFAULT_PROFILE環境変数を設定する必要がありprofile_nameました。
その後、私のpythonが接続できました。例えばここから

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')

# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

1
Win10のマシンセクションで環境変数を設定した場合は、おそらく再起動も必要になります。
Trevor

1
@ Trevor、Jupyter Notebookを搭載したWindows 7マシンでこれをテストしました。Jupyterサーバーを再起動する必要があり、それは私のために機能しましたが、再起動することは良い考えだと思います。
Hrushikesh Dhumal

5

私も同じ問題を抱えていましたが、ホームディレクトリに構成ファイルと資格情報ファイルを作成することで解決できます。以下に、この問題を解決するために行った手順を示します。

構成ファイルを作成します。

touch ~/.aws/config

そしてそのファイルで私は地域に入りました

[default]
region = us-west-2

次に、認証情報ファイルを作成します。

touch ~/.aws/credentials

次に、資格情報を入力します

[Profile1]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX 
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

これらすべてを設定した後、私のpythonファイルでバケットに接続します。このファイルを実行すると、すべての内容がリストされます。

import boto3
import os

os.environ['AWS_PROFILE'] = "Profile1"
os.environ['AWS_DEFAULT_REGION'] = "us-west-2"

s3 = boto3.client('s3', region_name='us-west-2')
print("[INFO:] Connecting to cloud")

# Retrieves all regions/endpoints that work with S3

response = s3.list_buckets()
print('Regions:', response)

以下のリンクも参照できます。


4

端末タイプから:-

aws configure

次に、キーと地域を入力します。

この後、次のステップは任意の環境を使用します。アカウントによっては、複数のキーを持つことができます。複数の環境またはキーを管理できます

import boto3
aws_session = boto3.Session(profile_name="prod")
# Create an S3 client
s3 = aws_session.client('s3')

2

私は大企業で働いていて、同じエラーが発生しましたが、別の回避策が必要でした。私の問題はプロキシ設定に関連していました。私はプロキシを設定していたので、すべてを機能させる前にno_proxyをAWSをホワイトリストに登録する必要がありました。os設定でPythonコードを汚したくない場合は、bashスクリプトで設定することもできます。

Python:

import os
os.environ["NO_PROXY"] = "s3.amazonaws.com"

バッシュ:

export no_proxy = "s3.amazonaws.com"

編集:上記は、米国東部S3地域を想定しています。他のリージョンの場合:s3。[region] .amazonaws.comを使用します。リージョンはus-east-1またはus-west-2のようなものです


2
私にも同様の問題がありno_proxyまし169.254.169.254たが、AWSクライアントがインスタンスプロファイルを見つけるためにメタデータサービスにアクセスできるようにするために、言わざるを得ませんでした。
ラルフボルトン

0

boto3は次のようなフォルダで認証情報を探しています

C:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\botocore\.aws

このフォルダに2つのファイルを保存しcredentialsconfigます。

boto3がこのリンクで資格情報を検索する一般的な順序を確認することをお勧めします。[ 資格情報構成]サブ見出しの下を確認します。


0

awsを正しく設定している場合は、プロジェクトのユーザーが./awsから読み取ることができることを確認するか、プロジェクトをルートとして実行してください


0

のように複数のawsプロファイルがある~/.aws/credentials場合...

[Profile 1]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
[Profile 2]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************

次の2つの手順に従います。

  1. export AWS_DEFAULT_PROFILE=Profile 1ターミナルでコマンドを使用して、デフォルトとして使用するものを作成します。

  2. 上記のコマンドは、boto3を使用するか、エディターを開いた端末と同じ端末で実行してください。[次のシナリオを理解してください]

シナリオ:

  • 2つのターミナルが開いている場合はt1、およびと呼ばれt2ます。
  • でエクスポートコマンドを実行し、t1JupyterLabまたはその他からを開くt2と、NoCredentialsError:資格情報エラーが見つかりません

解決:

  • でエクスポートコマンドを実行してt1から、同じターミナルからJupyterLabまたはその他を開きt1ます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.