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_PROFILE
omgevingsvariabele instellen op profile_name
die 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/credentials
zoals …
[Profile 1]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
[Profile 2]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
Volg twee stappen:
-
Maak er een die u wilt gebruiken als standaard met
export AWS_DEFAULT_PROFILE=Profile 1
-opdracht in terminal. -
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
t1
ent2
. - en u voert de uitvoeropdracht uit in
t1
en u opent JUPYTERLAB of een andere vant2
, u krijgt NocredialSError: Kan geen inloggegevens controleren FOUT.
oplossing:
- Voer het opdracht exporteren in
t1
uit en open vervolgens JUPYTERLAB of een ander uit dezelfde terminalt1
.
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 credentials
en 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 minio
Client (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)