web-dev-qa-db-fra.com

Erreur Boto3: botocore.exceptions.NoCredentialsError: impossible de localiser les informations d'identification

Lorsque je lance simplement le code suivant, j'obtiens toujours cette erreur.

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)

J'ai sauvegardé mon fichier d'identification dans 

C:\Users\myname\.aws\credentials, à partir duquel Boto doit lire mes informations d'identification.

Est-ce que mon réglage est faux?

Voici la sortie de 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
55
d-_-b

essayez de spécifier les clés manuellement

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

Assurez-vous de ne pas inclure votre ACCESS_ID et votre ACCESS_KEY dans le code directement pour des raisons de sécurité . Envisagez d'utiliser des configs d'environnement et de les injecter dans le code comme suggéré par @Tiger_Mike.

Pour les environnements Prod, envisagez d'utiliser des clés d'accès rotatives: https://docs.aws.Amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey

55
SHASHANK MADHAV

J'ai eu le même problème et j'ai découvert que le format de mon fichier ~/.aws/credentials était incorrect.

Cela a fonctionné avec un fichier contenant:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

Notez que le nom du profil doit être "[default]". Certains documents officiels font référence à un profil nommé "[credentials]", qui ne fonctionnait pas pour moi.

33

Si vous recherchez une solution alternative, essayez d'ajouter vos informations d'identification à l'aide de AmazonCLI

à partir du type de terminal: -

aws configure

puis remplissez vos clés et votre région.

20
Amri

Assurez-vous que votre fichier ~/.aws/credentials sous Unix ressemble à ceci:

[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

Votre script Python devrait ressembler à ceci et ça va marcher:

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

Source: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration

5
TheWalkingData

Je travaille pour une grande entreprise et j'ai rencontré la même erreur, mais j'avais besoin d'un travail différent. Mon problème était lié aux paramètres de proxy. Mon proxy étant configuré, je devais donc définir mon no_proxy sur liste blanche AWS avant de pouvoir tout faire fonctionner. Vous pouvez également le définir dans votre script bash si vous ne voulez pas confondre votre code Python avec les paramètres os.

Python:

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

Frapper:

no_proxy = "s3.amazonaws.com"
2
JJFord3

Ces instructions concernent les machines Windows avec un seul profil utilisateur pour AWS. Assurez-vous que votre fichier ~/.aws/credentials ressemble à ceci 

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

Je devais définir la variable AWS_DEFAULT_PROFILEenvironment à profile_name trouvée dans vos informations d'identification.
Ensuite, mon python a pu se connecter. par exemple de ici

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')

# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)
2
Hrushikesh Dhumal

Si vous êtes sûr de configurer votre aws correctement, assurez-vous que l'utilisateur du projet peut lire à partir de ./aws ou simplement exécuter votre projet en tant que racine.

0
Mohamed Hamed

Le boto3 recherche les informations d'identification dans le dossier comme

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

Vous devez enregistrer deux fichiers dans ce dossier credentials et config.

Vous voudrez peut-être vérifier l'ordre général dans lequel boto3 recherche les informations d'identification dans ce lien . Recherchez sous le sous-titre Configuration des informations d'identification.

0
Nde Samuel Mbah

Si vous avez plusieurs profils aws dans ~/.aws/credentials comme ...

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

Suivez deux étapes:

  1. Choisissez celui que vous voulez utiliser par défaut en utilisant la commande export AWS_DEFAULT_PROFILE=Profile 1 dans le terminal.

  2. Assurez-vous d’exécuter la commande ci-dessus dans le même terminal que celui où vous utilisez boto3 ou ouvrez un éditeur. [Comprenez le scénario suivant]

Scénario:

  • Si vous avez deux terminaux ouverts appelés t1 et t2.
  • Et vous exécutez la commande d'exportation dans t1 et ouvrez JupyterLab ou tout autre élément de t2, vous obtiendrez NoCredentialsError: Impossible de localiser les informations d'identification error.

Solution:

  • Exécutez la commande d'exportation dans t1, puis ouvrez JupyterLab ou tout autre appareil du même terminal t1.
0
Sanket Patel

J'ai également eu le même problème, il peut être résolu en créant un fichier de configuration et des informations d'identification dans le répertoire de base. Vous trouverez ci-dessous les étapes que j'ai suivies pour résoudre ce problème.

Créez un fichier de configuration:

touch ~/.aws/config

Et dans ce fichier je suis entré dans la région

[default]
region = us-west-2

Ensuite, créez le fichier d'informations d'identification:

touch ~/.aws/credentials

Puis entrez vos identifiants

[Profile1]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX 
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

Après avoir défini tout cela, puis mon fichier python pour se connecter au compartiment. Exécuter ce fichier listera tout le contenu.

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)

Vous pouvez également consulter les liens ci-dessous:

0
Nija I Pillai