Pourquoi pas Amazon S3 authentification gestionnaires de prêt?
J'ai mon $AWS_ACCESS_KEY_ID et $AWS_SECRET_ACCESS_KEY les variables d'environnement définies correctement, et j'exécute ce code:
import boto
conn = boto.connect_s3()
et obtiens cette erreur:
boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']
Ce qui se passe? Je ne sais pas par où démarrer le débogage.
Il semble boto n'est pas de prendre les valeurs de mes variables d'environnement. Si je passe dans l'identification de la clé et la clé secrète comme arguments à la connexion constructeur, cela fonctionne bien.
Vous devez vous connecter pour publier un commentaire.
Boto sera prendre vos informations d'identification dans les variables d'environnement.
J'ai testé cela avec V2.0b3 et il fonctionne très bien. Il donne la priorité aux informations d'identification spécifiées explicitement dans le constructeur, mais il sera ramasser des informations d'identification dans les variables d'environnement trop.
La façon la plus simple de le faire est de mettre vos informations d'identification dans un fichier texte, et de préciser l'emplacement du fichier dans l'environnement.
Par exemple (sur Windows: j'attends qu'il va travailler sur Linux, mais je n'ai pas personnellement essayé)
Créer un fichier appelé "mycred.txt" et le mettre dans C:\temp
Ce fichier contient deux lignes:
Définir la variable d'environnement AWS_CREDENTIAL_FILE à point C:\temp\mycred.txt
Maintenant votre fragment de code ci-dessus:
fonctionnera très bien.
boto
boto.cloudhackers.com/en/latest/boto_config_tut.htmlJe suis un débutant de python et boto, mais a été en mesure de reproduire ton erreur (ou au moins la dernière ligne de votre erreur.)
Vous êtes le plus susceptible à défaut d'exporter vos variables dans bash. si vous définissez ensuite, ils sont uniquement valables dans le shell courant, de les exporter et de python hérite de la valeur. Donc:
ne fonctionnera pas à moins que vous aussi ajouter:
Ou vous pouvez tout faire sur la même ligne:
De même pour l'autre valeur. Vous pouvez également mettre ceci dans votre .bashrc (en supposant que bash est le shell et en supposant que vous vous souvenez à l'exportation)
Suivi nealmcb de réponse sur les rôles IAM. Alors que le déploiement de DME clusters à l'aide d'un rôle IAM, j'ai eu un problème similaire où parfois (pas tout le temps) cette erreur viendrait tandis que la connexion boto s3.
Le Service de Métadonnées peut timeout tandis que la récupération des informations d'identification. Ainsi, comme les docs suggèrent, j'ai ajouté un Boto section dans le fichier de configuration et augmenté le nombre de tentatives pour récupérer les informations d'identification. Notez que la valeur par défaut est 1 tentative.
http://boto.readthedocs.org/en/latest/boto_config_tut.html?highlight=retries#boto
Faites défiler jusqu'à:
You can control the timeouts and number of retries used when retrieving information from the Metadata Service (this is used for retrieving credentials for IAM roles on EC2 instances)
Je viens de tomber sur ce problème de l'utilisation de Linux et SES, et j'espère que ça peut aider d'autres personnes avec un problème similaire. J'avais installé awscli et configuré mes clés à faire:
Ce est utilisé pour l'installation de vos informations d'identification dans ~/.aws/config tout comme @huythang dit. Mais boto regarde vos informations d'identification dans ~/.aws/informations d'identification afin de les copier sur
En supposant une politique appropriée est la configuration de votre utilisateur avec les informations d'identification - vous ne devriez pas besoin de définir les variables d'environnement.
~/.aws/config
.J'ai trouvé ma réponse ici.
Sur Unix: l'installation de la aws config:
Et de définir des variables d'environnement
Voir les derniers boto s3 introduction:
Dans mon cas, le problème était que, dans IAM "par défaut, les utilisateurs ne disposent d'aucune autorisation". Il m'a fallu toute la journée pour suivre les règles, depuis que j'ai été utilisé à l'origine AWS modèle d'authentification (pré-iam), dans laquelle ce qu'on appelle les "racines" des informations d'identification ont été le seul moyen.
Il y a beaucoup de AWS documents sur la création d'utilisateurs, mais seulement quelques-uns des endroits où ils remarque que vous avez à leur donner des autorisations pour eux de faire quoi que ce soit. On est Travailler avec Amazon S3 - Amazon Simple Storage Service, mais même cela n'a pas vraiment vous dire d'aller à l'onglet Stratégies, suggère un bon départ de la politique, et d'expliquer comment l'appliquer.
L'assistant-de-trie simplement vous encourage à "Get a commencé avec les utilisateurs IAM" et de ne pas préciser qu'il y a encore beaucoup à faire. Même si vous fouiner un peu, vous venez de voir, par exemple, "Géré Politiques Il n'y a pas géré les politiques attachés à cet utilisateur". ce qui ne veut pas dire que vous avez besoin d'une politique visant à faire quoi que ce soit.
D'établir une racine-comme l'utilisateur, voir:
La création d'un Groupe d'Administrateurs à l'Aide de la Console AWS Identity and Access Management
Je ne vois pas une politique spécifique qui, tout simplement, simplement permet un accès en lecture seule à tous de S3 (mes propres seaux et publics détenus par des tiers).
Vous pouvez maintenant définir ces arguments dans la fonction de connexion d'appel.
Juste pensé que je voudrais ajouter que, au cas où quelqu'un d'autre recherchés comme je l'ai fait.
J'avais déjà utilisé
s3-parallel-put
avec succès, mais il inexplicablement arrêté de travailler, ce qui donne l'erreur ci-dessus. Ce malgré le fait d'avoir exporté le AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.La solution a été de spécifier les informations d'identification dans le boto fichier de config:
Entrez les informations d'identification de la sorte:
Sur Mac, exporter les clés doivent ressembler à ceci:
key=value
. Donc, l'exportation, disons,AWS_ACCESS_KEY_ID
de l'environnement var devrait ressembler à ceci:AWS_ACCESS_KEY_ID=yourkey
. Si vous avez des citations autour de vos valeurs, comme mentionné dans les réponses ci-dessus, boto lève l'erreur ci-dessus.J'ai eu ce problème avec un ballon application sur ec2. Je ne voulais pas mettre des informations d'identification dans l'application, mais a réussi autorisation via les rôles IAM. De cette façon, peut éviter de coder en dur les clés dans le code. Puis-je définir une politique dans la console AWS (je n'ai même pas le code, j'ai juste utilisé le générateur de politique)
Mon code est exactement comme OP. Les autres solutions sont bonnes, mais il y a un chemin à grand autorisation sans codage en dur des clés d'accès.
boto.connect_s3()
#pas de touches nécessairesJe vois que vous appelez
AWS_ACCESS_KEY_ID
&AWS_SECRET_ACCESS_KEY
.Quand il semble qu'ils devraient être défini comme
AWSAccessKeyId
&AWSSecretKey
.