BOTO3 FOUT: BotoCore.Exceptions.NocredentialSError: Kan geen inloggegevens vinden

Wanneer ik eenvoudig de volgende code uitvoer, krijgt ik altijd deze fout.

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)

Ik heb mijn referentiebestand opgeslagen in

C:\Users\myname\.aws\credentials, van waarmee Boto mijn inloggegevens zou moeten lezen.

Is mijn instelling verkeerd?

Hier is de uitvoer van 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

Antwoord 1, Autoriteit 100%

Probeer toetsen handmatig op te geven

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

Zorg ervoor dat u uw Access_ID en Access_Key niet rechtstreeks in de code opneemt voor beveiligingsproblemen.
Overweeg om de omgeving te gebruiken en ze in de code te injecteren zoals gesuggereerd door @Tiger_Mike.

Voor prod-omgevingen Overweeg het gebruik van roterende toegangsleutels:
https://docs.aws.amazon.com/IAM /latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey


Antwoord 2, autoriteit 62%

Ik had hetzelfde probleem en ontdekte dat het formaat van mijn ~/.aws/credentials-bestand verkeerd was.

Het werkte met een bestand met:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

Houd er rekening mee dat er een profielnaam “[default]” moet zijn. Sommige officiële documentatie verwijst naar een profiel met de naam “[credentials]“, dat niet werkte voor mij.


Antwoord 3, autoriteit 29%

Als u op zoek bent naar een alternatieve manier, probeer dan uw inloggegevens toe te voegen met
AmazonCLI

van het terminaltype:-

aws configure

vul vervolgens uw sleutels en regio in.


Antwoord 4, autoriteit 20%

Zorg ervoor dat uw ~/.aws/credentials-bestand in Unix er als volgt uitziet:

[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

Uw Python-script zou er zo uit moeten zien, en het zal werken:

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'])

Bron: https://boto3.readthedocs.io/ en / nieuwste / gids / configuratie.html # interactieve configuratie .


Antwoord 5, Autoriteit 9%

Ik had ook hetzelfde probleem, het kan worden opgelost door een config-en-referentiebestand in de thuisgids te maken. Hieronder tonen de stappen die ik deed om dit probleem op te lossen.

Maak een config-bestand:

touch ~/.aws/config

En in dat bestand ging ik de regio in

[default]
region = us-west-2

Maak vervolgens het referentiebestand:

touch ~/.aws/credentials

Voer vervolgens uw inloggegevens

in

[Profile1]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX 
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Nadat u dit al deze hebt ingesteld, vervolgens mijn Python-bestand om emmer aan te sluiten. Voer dit bestand uit, vermeldt alle inhoud.

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)

U kunt ook verwijzen naar links:


Antwoord 6, Autoriteit 9%

Maak een S3-clientobject met uw inloggegevens

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)

Het is altijd goed om inloggegevens van de os-omgeving te krijgen

Om omgevingsvariabelen in te stellen, voert u de volgende opdrachten uit in terminal

indien linux of mac

$ export AWS_ACCESS_KEY="aws_access_key"
$ export AWS_SECRET_KEY="aws_secret_key"

als vensters

c:System\> set AWS_ACCESS_KEY="aws_access_key"
c:System\> set AWS_SECRET_KEY="aws_secret_key"

Antwoord 7, autoriteit 6%

van het terminaltype:-

aws configure

vul vervolgens uw sleutels en regio in.

gebruik hierna een willekeurige omgeving. Afhankelijk van uw account kunt u meerdere sleutels hebben. Kan meerdere omgevingen of sleutels beheren

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

Antwoord 8, autoriteit 5%

Deze instructies zijn voor Windows-machines met een enkel gebruikersprofiel voor AWS. Zorg ervoor dat uw ~/.aws/credentials-bestand er zo uitziet

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

Ik moest de AWS_DEFAULT_PROFILEomgevingsvariabele instellen op profile_namedie in je inloggegevens staat.
Toen kon mijn python verbinding maken. bijv. van hier

import boto3
# Let's use Amazon S3
s3 = boto3.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

Antwoord 9, Autoriteit 5%

Exporteren van de referentie ook werk, in Linux:

export AWS_SECRET_ACCESS_KEY="XXXXXXXXXXXX"
export AWS_ACCESS_KEY_ID="XXXXXXXXXXX"

Antwoord 10, Autoriteit 3%

Als u meerdere AWS-profielen in ~/.aws/credentialszoals …

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

Volg twee stappen:

  1. Maak er een die u wilt gebruiken als standaard met export AWS_DEFAULT_PROFILE=Profile 1-opdracht in terminal.

  2. Zorg ervoor dat u bovenstaande opdracht in dezelfde terminal uitvoert van waar u BOTO3 gebruikt of u een editor opent. [Begrijp het volgende scenario]

scenario:

  • Als u twee terminal-openen hebt genaamd t1en t2.
  • en u voert de uitvoeropdracht uit in t1en u opent JUPYTERLAB of een andere van t2, u krijgt NocredialSError: Kan geen inloggegevens controleren FOUT.

oplossing:

  • Voer het opdracht exporteren in t1uit en open vervolgens JUPYTERLAB of een ander uit dezelfde terminal t1.

Antwoord 11, Autoriteit 3%

Ik werk voor een groot bedrijf en ontmoette dezelfde fout, maar had een ander werk nodig. Mijn probleem was gerelateerd aan proxy-instellingen. Ik had mijn proxy opgezet, dus ik moest mijn no_proxy instellen om withist! AWS voordat ik in staat was om alles te werken. U kunt het ook in uw BASH-script instellen als u uw Python-code niet wilt modderen met OS-instellingen.

Python:

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

Bash:

export no_proxy = "s3.amazonaws.com"

Bewerken: het bovenstaande gaat uit van een S3-regio in het oosten van de VS. Voor andere regio’s: gebruik s3.[region].amazonaws.com waar regio zoiets is als us-east-1 of us-west-2


Antwoord 12

De boto3 zoekt naar de inloggegevens in de map zoals

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

Je moet twee bestanden opslaan in deze map credentialsen config.

Misschien wil je de algemene volgorde bekijken waarin boto3 naar inloggegevens zoekt in deze link. Kijk onder de subkop Inloggegevens configureren.


Antwoord 13

Als je zeker weet dat je je aws correct hebt geconfigureerd, zorg er dan voor dat de gebruiker van het project kan lezen uit ./awsof voer je project gewoon als root uit


Antwoord 14

Ik had net dit probleem. Dit is wat voor mij werkte:

pip install botocore==1.13.20

Bron: https://github.com/boto/botocore/issues/1892


Antwoord 15

In het geval van MLflow zal een aanroep naar mlflow.log_artifact()deze fout veroorzaken als u niet naar AWS3/MinIO data lake kunt schrijven.

De reden is het niet instellen van inloggegevens in uw python-env (zoals deze twee env-vars):

os.environ['DATA_AWS_ACCESS_KEY_ID'] = 'login'
os.environ['DATA_AWS_SECRET_ACCESS_KEY'] = 'password'

Opmerking U kunt ook rechtstreeks toegang krijgen tot MLFLOW-artefacten, met behulp van minioClient (die een afzonderlijke verbinding met het gegevensmeer vereist, afgezien van mlflow‘S-verbinding). Deze klant kan zo worden gestart:

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)

Other episodes