Ошибка 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
откуда Бото должен прочитать мои полномочия.
Мои настройки неверны?
Вот вывод из 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
17 ответов
Попробуйте указать ключи вручную
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.
У меня была такая же проблема, и я узнал, что формат моего ~/.aws/credentials
файл был неверным.
Он работал с файлом, содержащим:
[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY
Обратите внимание, что имя профиля должно быть "[default]
Msgstr ". Некоторые официальные документы ссылаются на профиль с именем"[credentials]
", который не работал для меня.
Если вы ищете альтернативный способ, попробуйте добавить свои учетные данные с помощью AmazonCLI
из терминала типа:-
aws configure
затем заполните свои ключи и регион.
Убедитесь, что ваш файл ~/.aws/credentials в Unix выглядит следующим образом:
[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
output = json
[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
output = json
Ваш скрипт на 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.
У меня тоже была такая же проблема, ее можно решить, создав файл конфигурации и учетных данных в домашнем каталоге. Ниже показаны шаги, которые я сделал для решения этой проблемы.
Создайте файл конфигурации:
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)
Вы также можете обратиться к ссылкам ниже:
Создайте клиентский объект S3 с вашими учетными данными
AWS_S3_CREDS = {
"aws_access_key_id":"your access key", # os.getenv("AWS_ACCESS_KEY")
"aws_secret_access_key":"your aws secret key" # os.getenv("AWS_SECRET_KEY")
}
s3_client = boto3.client('s3',**AWS_S3_CREDS)
Всегда полезно получать учетные данные из среды ОС
От типа терминала:-
aws configure
затем введите свои ключи и регион.
после этого сделайте следующий шаг, используйте любую среду. У вас может быть несколько ключей в зависимости от вашей учетной записи. Может управлять несколькими средами или ключами
import boto3
aws_session = boto3.Session(profile_name="prod")
# Create an S3 client
s3 = aws_session.client('s3')
Экспорт учетных данных также работает, в Linux:
export AWS_SECRET_ACCESS_KEY="XXXXXXXXXXXX"
export AWS_ACCESS_KEY_ID="XXXXXXXXXXX"
Эти инструкции предназначены для Windows-машины с одним пользовательским профилем для AWS. Убедитесь, что ваш ~/.aws/credentials
файл выглядит так
[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
Я должен был установить AWS_DEFAULT_PROFILE
переменная среды для profile_name
найдено в ваших учетных данных.
Тогда мой питон смог подключиться. например отсюда
import boto3
# Let's use Amazon S3
s3 = boto3.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
print(bucket.name)
Я работаю в большой корпорации и столкнулся с той же самой ошибкой, но мне нужно было обойти эту проблему. Моя проблема была связана с настройками прокси. Я настроил свой прокси-сервер, поэтому мне нужно было настроить no_proxy на белый список AWS, прежде чем я смог заставить все работать. Вы также можете установить его в своем скрипте bash, если не хотите путать ваш код Python с настройками os.
Python:
import os
os.environ["NO_PROXY"] = "s3.amazonaws.com"
Bash:
NO_PROXY = "s3.amazonaws.com"
Если у вас несколько профилей 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
.
В случае MLflow вызов
mlflow.log_artifact()
вызовет эту ошибку, если вы не можете записать в озеро данных AWS3 / MinIO.
Причина не в настройке учетных данных в вашем окружении python (как в этих двух переменных env):
os.environ['DATA_AWS_ACCESS_KEY_ID'] = 'login'
os.environ['DATA_AWS_SECRET_ACCESS_KEY'] = 'password'
Обратите внимание, что вы также можете напрямую обращаться к артефактам MLflow, используя
minio
клиент (который требует отдельного подключения к озеру данных, кроме
mlflow
связь). Этот клиент можно запустить так:
minio_client_mlflow = minio.Minio(os.environ['MLFLOW_S3_ENDPOINT_URL'].split('://')[1],
access_key=os.environ['AWS_ACCESS_KEY_ID'],
secret_key=os.environ['AWS_SECRET_ACCESS_KEY'],
secure=False)
Я решил проблему так:
aws configure
После этого я вручную ввел:
AWS Access Key ID [None]: xxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxx
Default region name [None]: us-east-1
Default output format [None]: just hit enter
После этого у меня сработало
Если вы уверены, что правильно настроили свои aws, просто убедитесь, что пользователь проекта может читать с ./aws или просто запустите ваш проект как root
Просто у меня была эта проблема. Вот что сработало для меня:
pip install botocore==1.13.20
В случае использования AWS
В моем случае мне пришлось добавить следующую политику в роль IAM, чтобы разрешить чтение тегов ec2 экземплярами EC2. Это устранило быUnable to locate credentials
ошибка :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:DescribeTags",
"Resource": "*"
}
]
}
Boto3 ищет учетные данные в папке, как
C:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\botocore\.aws
Вы должны сохранить два файла в этой папке credentials
а также config
,
Вы можете проверить общий порядок, в котором boto3 ищет учетные данные по этой ссылке. Смотрите под заголовком Configuring Credentials.