0

Je souhaite que Boto3 obtienne l'accès et la clé secrète d'un fichier de configuration au lieu de les coder en dur. Sur mon serveur Linux, j'ai défini la variable d'environnement suivante AWS_SHARED_CREDENTIALS_FILE avec la valeur /app/.aws/credentials. En /app/.aws/ je mets un fichier avec les informations d'identification de nom avec le contenu suivant:Boto3 n'utilise pas les clés du fichier de configuration

[default] 
aws_access_key_id = abcd 
aws_secret_access_key = abcd 

Bien sûr, j'utilisé les touches réelles au lieu de ABCD.

Python:

import boto3 
conn = boto3.client('s3', 
        region_name="eu-west-1", 
        endpoint_url="endpoint", 
        aws_access_key_id=aws_access_key_id, 
        aws_secret_access_key=aws_secret_access_key, 
        config=Config(signature_version="s3", s3={'addressing_style': 'path'})) 

Cependant, il dit name'aws_access_key_id' is not defined. Comment puis-je le réparer? Merci

Edit:

>>> os.environ['AWS_SHARED_CREDENTIALS_FILE'] 
'/app/.aws/credentials' 
+0

Ne pas stocker les informations d'identification à long terme sur serveurs si vous pouvez l'éviter. Utilisez un rôle IAM pour accorder des autorisations via des informations d'identification temporaires (http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html). – jarmod

+0

Merci pour le conseil mais j'utilise un service S3 qui n'est pas hébergé par Amazon. – user3080315

Répondre

2

Si vous avez des informations d'identification dossier avec des informations d'identification des SSFE déjà créés, cela signifie que vous n'avez pas besoin de les spécifier lors de l'instanciation votre client. Ce qui suit devrait fonctionner:

import boto3 

conn = boto3.client('s3', 
       region_name="eu-west-1", 
       endpoint_url="endpoint", 
       config=Config(signature_version="s3", s3={'addressing_style': 'path'})) 
1

Si vous exécutez votre application sur une instance EC2, vous pouvez également attribuer un rôle S3 à votre instance et ont Boto assumer ce rôle. Vous empêche d'avoir à stocker des clés dans votre instance.

Regardez la section "Supposons que fournisseur de rôle" dans la documentation:

http://boto3.readthedocs.io/en/latest/guide/configuration.html

Lien vers les rôles IAM ainsi:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html