web-dev-qa-db-ja.com

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

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

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
72
d-_-b

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

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

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

Prod環境では、回転アクセスキーの使用を検討してください。 https://docs.aws.Amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey

66
SHASHANK MADHAV

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

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

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

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

39

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

端末タイプから:-

aws configure

次に、キーとリージョンを入力します。

21
Amri

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

9
TheWalkingData

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

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

AWS_DEFAULT_PROFILEenvironment変数を、資格情報にあるprofile_nameに設定する必要がありました。
その後、pythonが接続できました。例: here

import boto3

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

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

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

Python:

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

バッシュ:

no_proxy = "s3.amazonaws.com"
2
JJFord3

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

0
Mohamed Hamed

Boto3は、次のようなフォルダーで資格情報を探しています

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

このフォルダーcredentialsおよびconfigに2つのファイルを保存する必要があります。

Boto3が this link で資格情報を検索する一般的な順序を確認できます。 Configure Credentialsサブ見出しの下を見てください。

0
Samuel Nde

複数の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を使用する端末と同じ端末で上記のコマンドを必ず実行するか、エディターを開きます。[次のシナリオを理解する]

シナリオ:

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

解決策:

  • t1でエクスポートコマンドを実行してから、同じ端末t1からJupyterLabまたはその他を開きます。
0
Sanket Patel

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

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

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)

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

0
Nija I Pillai