Ошибка 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
Ответы
Ответ 1
попробуйте указать ключи вручную
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
Ответ 2
У меня была такая же проблема и выяснилось, что формат моего файла ~/.aws/credentials
был неправильным.
Он работал с файлом, содержащим:
[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY
Обратите внимание, что имя профиля должно быть "[default]
". В некоторых официальных документах делается ссылка на профиль с именем "[credentials]
", который не работает для меня.
Ответ 3
Если вы ищете альтернативный способ, попробуйте добавить свои учетные данные, используя
AmazonCLI
от типа терминала: -
aws configure
затем заполните ваши ключи и область.
Ответ 4
Убедитесь, что ваш файл ~/.aws/credentials в Unix выглядит следующим образом:
[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.
Ответ 5
Эти инструкции относятся к машине Windows с одним профилем пользователя для AWS. Убедитесь, что ваш файл ~/.aws/credentials
выглядит следующим образом
[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
Мне пришлось установить переменную среды AWS_DEFAULT_PROFILE
на profile_name
, найденную в ваших учетных данных.
Тогда мой питон смог подключиться. например, из здесь
import boto3
# Let use Amazon S3
s3 = boto3.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
print(bucket.name)
Ответ 6
Я работаю в большой корпорации и столкнулся с той же самой ошибкой, но мне нужно было поработать. Моя проблема была связана с настройками прокси. Я настроил свой прокси, поэтому мне нужно было настроить no_proxy на белый список AWS, прежде чем я смог заставить все работать. Вы также можете установить его в своем скрипте bash, если не хотите путать ваш код Python с настройками os.
Python:
import os
os.environ["NO_PROXY"] = "s3.amazonaws.com"
Bash:
no_proxy = "s3.amazonaws.com"
Ответ 7
У меня тоже была такая же проблема, ее можно решить, создав файл конфигурации и учетные данные в домашнем каталоге. Ниже показаны шаги, которые я предпринял для решения этой проблемы.
Создайте файл конфигурации:
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)
Вы также можете обратиться по ссылкам ниже:
Ответ 8
Boto3 ищет учетные данные в папке, как
C:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\botocore\.aws
Вы должны сохранить два файла в этой папке credentials
и config
.
Вы можете проверить общий порядок, в котором boto3 ищет учетные данные по этой ссылке. Смотрите под заголовком Configuring Credentials.
Ответ 9
Если вы уверены, что правильно настроили свои aws, просто убедитесь, что пользователь проекта может читать с ./aws или просто запустите ваш проект как root
Ответ 10
Если у вас есть несколько профилей aws в ~/.aws/credentials
например...
[Profile 1]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
[Profile 2]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
Выполните два шага:
-
Сделайте тот, который вы хотите использовать по умолчанию, используя export AWS_DEFAULT_PROFILE=Profile 1
в терминале.
-
Убедитесь, что вы выполнили указанную выше команду в том же терминале, откуда вы используете boto3 или открываете редактор. [Понять следующий сценарий]
Сценарий:
- Если у вас есть два открытых терминала, которые называются
t1
и t2
. - И если вы запустите команду экспорта в
t1
и откроете JupyterLab или любой другой из t2
, вы получите NoCredentialsError: Невозможно обнаружить ошибку учетных данных.
Решение:
- Запустите команду экспорта в
t1
а затем откройте JupyterLab или любой другой из того же терминала t1
.
Ответ 11
из типа терминала: -
aws configure
затем введите свои ключи и регион.
после этого сделайте следующий шаг, используйте любую среду. Вы можете иметь несколько ключей в зависимости от вашей учетной записи. Может управлять несколькими средами или ключами
import boto3
aws_session = boto3.Session(profile_name="prod")
# Create an S3 client
s3 = aws_session.client('s3')