Подтвердить что ты не робот

Ошибка 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
4b9b3361

Ответ 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 = ******************************************

Выполните два шага:

  1. Сделайте тот, который вы хотите использовать по умолчанию, используя export AWS_DEFAULT_PROFILE=Profile 1 в терминале.

  2. Убедитесь, что вы выполнили указанную выше команду в том же терминале, откуда вы используете 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')