1 votes

Crontab + AWS : "Impossible de localiser les informations d'identification"

J'ai un Linode (Ubuntu 16.04) à partir duquel j'essaie de copier des fichiers vers un seau AWS S3 via une tâche cron appelant un script, mais le journal sort : upload failed: ../path/file.ext to s3://bucket/prefix/file.ext Unable to locate credentials

Le script tar s un répertoire, puis télécharge ce tar vers mon seau s3

  • Le script fonctionne du début à la fin si je l'appelle directement via sudo
  • En tant que tâche cron de la racine, la tar fonctionne, mais le aws le téléchargement ne le fait pas (avec l'erreur notée ci-dessus)
  • En tant que tâche cron [utilisateur], la fonction tar échoue (intentionnellement lié aux permissions), mais l'option aws Le téléchargement réussit.
  • Lorsque j'ai installé AWS CLI, j'ai oublié la formulation exacte, mais j'ai choisi de l'installer pour tous les utilisateurs.

Les choses que j'ai essayées

  1. Le fait que mon script appelle aws directement à /usr/local/bin/aws
  2. Ajout de /usr/local/bin/aws au PATH dans la crontab, et aussi dans mon script.
  3. Ajout de AWS_CONFIG_FILE="/home/[user]/.aws/config" dans la crontab, et aussi dans mon script.
  4. Ré-exécution de aws configure en tant que racine
  5. Suivant ce conseil et de comparer les environnements cron et interactifs. Mon site env.cron PATH comprend tout ce qui est énuméré dans mon env.interactif PATH plus quelques autres, voire des doublons - est-ce mauvais ?

Il y a beaucoup d'autres déclarations dans mon env.interactif (1810 lignes) par rapport à mon env.cron (36 lignes). Cela doit être quelque chose dans mes différences d'environnement, non ? J'ai cherché dans mon env.interactif pour toute instance de aws mais il n'y en a pas, même si cet env. fonctionne très bien. Des conseils sur d'autres éléments spécifiques à rechercher là-dedans ?

Toutes les idées et l'aide sont appréciées ! Merci !

2voto

Josip Rodin Points 1510

Si vous souhaitez exécuter une commande spécifique à l'aide d'une commande de type user avec sudo, et que la configuration soit lue à partir de son répertoire d'origine plutôt que du vôtre, alors vous l'avez exécuté avec sudo -H -u user ... pour que sudo mette à jour la variable HOME à l'utilisateur appelé automatiquement.

Dans ce cas, cela impliquera une valeur valide pour AWS_CONFIG_FILE et AWS_CREDENTIALS sera automatiquement généré.

0voto

apex Points 111

J'ai copié le .aws du répertoire de /home/[user/ a /root/ et cela a semblé résoudre le problème.

Y a-t-il des problèmes de sécurité ou autres concernant la duplication des fichiers de configuration dans le dossier racine ?

0 votes

Concernant #4 de Les choses que j'ai essayées - J'avais essayé sudo aws configure mais je n'avais pas exécuté la commande en tant que root. J'ai découvert la commande aws configure list pour montrer la configuration actuelle, et l'exécution en tant que [user] ou sudo montre les valeurs appropriées. Mais le passage à l'utilisateur root a montré qu'il n'était pas configuré. Apparemment, aws configure doit être exécuté tel que chaque utilisateur l'a prévu, puis réexécuté si les informations d'identification doivent être mises à jour ?

0voto

Kasun Piyasena Points 1

Ici, le problème est que pour télécharger des fichiers sur s3, nous devons configurer les informations d'identification pour le bash script. J'ai été confronté au même problème.

J'ai exécuté mon code en tant que bash et ça a marché. Mais lorsque j'ai ajouté le bash script pour l'exécuter en tant que cron, le problème exact est apparu avec les informations d'identification.

J'ai donc résolu le problème en donnant les informations d'identification sur mon bash script car lors de l'exécution d'un cron il ne peut pas prendre les informations d'identification du configurer aws . L'ajout des informations d'identification dans ce code ne résoudra donc pas votre problème. Le code suivant est un exemple de la façon dont j'ai procédé. Il a fonctionné pour moi.

export AWS_CONFIG_FILE="/root/.aws/config" #change it as per user
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Référez-vous à ce enlace pour plus d'informations.

Mais l'ajout d'informations d'identification aws sur script n'est pas recommandé. Vous pouvez donc utiliser l'utilisateur que vous utilisez pour configurer les informations d'identification AWS. Connectez-vous avec cet utilisateur en tant que

sudo su - {user}

Ensuite, utilisez aws configure et configurez vos informations d'identification AWS en ajoutant l'id de la clé d'accès, le secret, la région, etc. Lorsque vous essayez de configurer en tant que root, seul le root peut utiliser ces informations d'identification. Vous avez donc besoin de root pour exécuter la copie s3.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X