2017-05-11 3 views
2

Je suis actuellement en train d'avoir accès à Amazon S3 dans une machine virtuelle et télécharger des fichiers comme ceci:erreur Boto3: l'accès AWS Id clé que vous avez fournies n'existe pas dans nos dossiers

s3 = boto3.resource('s3', 
     aws_access_key_id="xxxxxxxxxxx", 
     aws_secret_access_key="xxxxxxxxxxxxxxxxx") 
s3client = boto3.client('s3') 

bucket = s3.Bucket('bucketone') 

for obj in bucket.objects.all(): 
    s3client.download_file(bucket_name, obj.key, filename) 

Mais je suis obtenir l'erreur:

botocore.exceptions.ClientError: An error occurred (InvalidAccessKeyId) when calling the ListObjects operation: The AWS Access Key Id you provided does not exist in our records.

Que pourrais-je faire mal? J'ai vérifié mes aws_access_key_id et aws_secret_access_key plusieurs fois, mais obtenant toujours la même erreur. Le même code localement, mais pas sur une machine virtuelle, fonctionne également sur un autre ordinateur. Il y a une raison pour laquelle je suis en train de coder en dur dans les touches, comme je le dois.

+0

S'il vous plaît vérifier si cette aide: http://stackoverflow.com/questions/39051477/the-aws-access-key-id-does-not-exist-in-our-records/41850256#41850256 –

+1

Avez-vous essayez de vous connecter avec aws cli? après avoir exécuté aws configure, lancez aws s3 ls et vérifiez si cela fonctionne. Essayez également de passer un paramètre region_name à 'boto3.resource'. – iMil

+0

Votre ID de clé d'accès commence-t-il par 'AKIA ...' ou est-ce 'ASIA ...'? –

Répondre

1

Vous devez définir l'accès pour la session boto3. Vous ne voulez pas vraiment mettre vos clés dans votre code. Ce que je recommanderais de faire d'abord est d'exécuter 'aws configure' et de définir vos aws_access_key_id et aws_secret_access_key dans votre fichier .credentials. Ensuite, dans votre code, procédez comme suit:

session = boto3.Session(profile_name='name_of_your_profile') 

Si vous avez juste le profil par défaut, vous ne pourriez pas besoin de le faire ou pour faire bonne mesure, il suffit de mettre:

session = boto3.Session(profile_name='default') 

Une fois que vous avez dans votre code, vous pouvez établir une connexion à s3 avec:

s3 = session.resource('s3') 
bucket = s3.Bucket('bucketone') 
for obj in bucket.objects.all(): 
    print(obj.key) 

Il ya aussi un problème avec votre code. Vous créez un client s3. Le client S3 n'a pas de méthode ou de propriété Bucket. Pour faire la même chose avec le client s3 vous feriez:

s3client = session.client('s3') 
response = s3client.get_object(Bucket='bucketone', key='your key') 

Vous pouvez ensuite itérer la réponse qui est retournée pour voir la liste des objets dans le seau.

Cela devrait prendre soin de votre erreur.

0

Si vous utilisez EC2/Lambda/etc. vous obtiendrez temporary security credentials ce qui signifie que vous devrez utiliser la variable d'environnement AWS_SESSION_TOKEN et la transmettre à boto3.

L'omettre lancera l'erreur InvalidAccessKeyId.