web-dev-qa-db-ger.com

Bash mit AWS CLI - Anmeldeinformationen nicht gefunden

Ich habe ein Shell-Skript, das einige Dateien von S3 herunterladen und ein EBS-Laufwerk mounten soll. Ich ende jedoch immer mit "Anmeldeinformationen nicht gefunden".

Ich habe meine Anmeldeinformationen mit dem Befehl aws configure angegeben, und die Befehle funktionieren außerhalb des Shell-Skripts. Könnte mir bitte jemand (am besten im Detail) sagen, wie das funktioniert?

Das ist mein Skript

#!/bin/bash

AWS_CONFIG_FILE="~/.aws/config"

echo $1

Sudo mkfs -t ext4 $1
Sudo mkdir /s3-backup-test
Sudo chmod -R ugo+rw /s3-backup-test
Sudo mount $1 /s3-backup-test

Sudo aws s3 sync s3://backup-test-s3 /s3-backup/test

du -h /s3-backup-test
ipt (short version):

Danke für jede Hilfe!

9
Smajl

Sudo ändert das $HOME-Verzeichnis (und damit ~) in/root und entfernt die meisten Bash-Variablen wie AWS_CONFIG_FILE aus der Umgebung. Stellen Sie sicher, dass Sie alles mit aws als root machen oder als Benutzer nicht mischen.

Stellen Sie sicher, dass Sie beispielsweise Sudo aws configure ausgeführt haben. Und versuche

Sudo bash -c 'AWS_CONFIG_FILE=/root/.aws/config aws s3 sync s3://backup-test-s3 /s3-backup/test'

Sie können es vorziehen, den gesamten Sudo aus dem Skript zu entfernen, und nur das Skript selbst.

17
meuh

Dies hängt nicht unbedingt mit der ursprünglichen Frage zusammen, aber ich bin auf dieses Problem gestoßen, als ich ein verwandtes Problem gegoogelt habe. Ich werde es also aufschreiben, falls es anderen helfen könnte. Ich habe aws für einen bestimmten Benutzer eingerichtet und mit Sudo -H -u thatuser aws ... getestet, aber mit awscli 1.2.9 auf Ubuntu 14.04 funktionierte es nicht:

  % Sudo -H -u thatuser aws configure list
        Name                    Value             Type    Location
        ----                    -----             ----    --------
     profile                <not set>             None    None
  access_key                <not set>             None    None
  secret_key                <not set>             None    None
      region                us-east-1      config_file    ~/.aws/config

Ich musste ein Upgrade mit pip install awscli durchführen, das neuere Versionen von awscli (1.11.93), boto und einer Vielzahl anderer Dinge (awscli docutils botocore rsa s3transfer jmespath python-dateutil pyasn1 futures) einbrachte richtig arbeiten:

  % Sudo -H -u thatuser aws configure list
        Name                    Value             Type    Location
        ----                    -----             ----    --------
     profile                <not set>             None    None
  access_key     ****************WXYZ shared-credentials-file
  secret_key     ****************wxyz shared-credentials-file
      region                us-east-1      config-file    ~/.aws/config
4
Josip Rodin

Während sich Ihre Anmeldeinformationen und Konfigurationsdateien möglicherweise ordnungsgemäß in ~/.aws befinden, wird sie möglicherweise nicht von Ihrem Benutzerkonto abgerufen.

Führen Sie diesen Befehl aus, um festzustellen, ob Ihre Anmeldeinformationen festgelegt wurden: aws configure list

Führen Sie den folgenden Befehl aus, um die Anmeldeinformationen festzulegen: aws configure, und geben Sie die Anmeldeinformationen ein, die in Ihrer Datei ~/.aws/credentials angegeben sind.

3
Himanshu Gupta

Antworten, falls jemand aufgrund des Titels der Frage darüber stolpert.

Ich hatte das gleiche Problem, als durch AWS CLI unable to locate credentials gemeldet wurde.

Ich hatte die [default]-Gruppe von Anmeldeinformationen aus meiner credentials-Datei entfernt, da ich sie nicht verwendete und nicht dachte, dass sie benötigt werden. Es scheint, dass sie es sind.

Ich habe meine Datei dann wie folgt umgestaltet und es hat funktioniert ...

[default]
aws_access_key_id=****
aws_secret_access_key=****
region=eu-west-2

[deployment-profile]
aws_access_key_id=****
aws_secret_access_key=****
region=eu-west-2
1
Remotec

War dieser Fehler heute beim Ausführen von aws cli auf EC2 . Meine Situation ist, dass ich beim Ausführen von aws configure list Informationen zu Anmeldeinformationen erhalten könnte. Ich arbeite jedoch in einer Unternehmensumgebung, für die das Ausführen von Dingen wie aws kms decryptPROXY erforderlich ist. Sobald ich Proxy eingestellt habe, werden die Informationen zu den Anmeldeinformationen von aws gelöscht. 

export HTTP_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
export HTTPS_PROXY=aws-proxy-qa.cloud.myCompany.com:8099

Es stellte sich heraus, dass ich auch NO_PROXY einstellen muss und die reservierte lokale Standard-IP der ec2 in der Liste 169.254.169.254 enthalten muss.

export NO_PROXY=169.254.169.25
0
Leon li

Wenn Sie eine .aws/config-Datei mit Rollen verwenden, vergewissern Sie sich, dass Ihre Konfigurationsdatei korrekt formatiert ist. In meinem Fall hatte ich vergessen, den role_arn = vor die Tür zu legen. Das Standardprofil befindet sich in der Datei .aws/credentials und enthält die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel der iam-Identität.

Die Konfigurationsdatei enthält die Rollendetails:

[profile myrole]
role_arn = arn:aws:iam::123456789012:role/My-Role
source_profile = default
mfa_serial = arn:aws:iam::987654321098:mfa/my-iam-identity
region=ap-southeast-2

Sie können den Zugriff schnell testen, indem Sie anrufen 

aws sts get-caller-identity --profile myrole

Wenn Sie MFA wie ich aktiviert haben, müssen Sie es eingeben, wenn Sie dazu aufgefordert werden.

Enter MFA code for arn:aws:iam::987654321098:mfa/my-iam-identity:
{
    "UserId": "ARABCDEFGHIJKLMNOPQRST:botocore-session-15441234567",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/My-Role/botocore-session-15441234567"
}
0

Ein dummer und vorsichtiger Schwanz einer rostigen Skript-Sängerin:

Ich hatte die Variable HOME in meinem Skript als einen Ort definiert, an dem das Skript die Plattform erstellen sollte. 

Diese Variable überschrieb die Variable env, die die Shell-Benutzer $HOME definiert. Der AWS-Befehl konnte ~/.aws/credentials nicht finden, da ~ auf die falsche Stelle verweist.

Ich gebe es nicht gern zu, aber ich hoffe, es hilft jemandem etwas Zeit zu sparen.

0
Boyd Hemphill

Ich habe versucht, einen aws-cli-Befehl von Roots Cron auszuführen.

Da Anmeldeinformationen in $ HOME/.aws/credentials gespeichert sind und ich aws-cli durch Sudo initialisiert habe, ist $ HOME immer noch/home/user /. Wenn $ HOME von cron ausgeführt wird, ist es/root/und daher kann cron die Datei nicht finden.

Der Fix bestand darin, $ HOME für den spezifischen Cron-Job zu ändern. Beispiel:

00 12 * * * HOME=/home/user aws s3 sync s3://...

(Alternativen umfassen das Verschieben, Kopieren oder Verknüpfen des .aws-Verzeichnisses von/home/user/nach/root /)

0
thelogix