我有一个shell脚本应该从S3下载一些文件并安装一个ebs驱动器。但是,我总是以“无法找到凭据”结束。
我已使用aws configure
命令指定了我的凭据,并且命令在shell脚本之外工作。请有人告诉我(最好是详细的)如何让它发挥作用?
这是我的剧本
#!/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):
感谢您的帮助!
答案 0 :(得分:18)
sudo
会将$HOME
目录(因此~
)更改为/ root,并从环境中删除大多数bash变量,例如AWS_CONFIG_FILE。确保以root用户或用户身份使用aws执行所有操作,不要混用。
请确保您执行了sudo aws configure
。并尝试
sudo bash -c 'AWS_CONFIG_FILE=/root/.aws/config aws s3 sync s3://backup-test-s3 /s3-backup/test'
您可能更喜欢从脚本中删除所有sudo,并且只是自己编写脚本。
答案 1 :(得分:4)
这并不一定与原始问题相关,但我在搜索相关问题时遇到过这个问题,所以我会写一下,以防它可以帮助其他人。我为特定用户设置了aws
,并使用sudo -H -u thatuser aws ...
进行了测试,但它不适用于安装在Ubuntu 14.04上的awscli 1.2.9:
% 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
我不得不使用pip install awscli
升级它,它引入了更新版本的awscli(1.11.93),boto和其他无数东西(awscli docutils botocore rsa s3transfer jmespath python-dateutil pyasn1期货),但它导致事情开始正常运作:
% 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
答案 2 :(得分:3)
虽然您的凭据和配置文件可能正确位于〜/ .aws中,但您的用户帐户可能没有获取它。
运行此命令以查看您的凭据是否已设置:aws configure list
要设置凭据,请运行以下命令:aws configure
,然后输入〜/ .aws / credentials文件中指定的凭据。
答案 3 :(得分:2)
unable to locate credentials
错误通常在使用不同的 aws 配置文件时发生,并且当前终端无法识别当前配置文件的凭据。
请注意,您不需要每次都通过 aws configure
填写所有凭据 - 您只需要引用一次配置的相关配置文件即可。
来自 AWS 文档中的 Named profiles section:
<块引用>AWS CLI 支持使用多个命名配置文件中的任何一个
存储在配置和凭据文件中。你可以配置
使用带有 --profile
选项的 aws configure 附加配置文件,
或者通过向配置和凭据文件添加条目。
以下示例显示了具有两个配置文件的凭据文件。这
当您运行没有配置文件的 CLI 命令时,将使用第一个 [默认]。
当您使用
--profile user1
运行 CLI 命令时使用第二个
参数。
~/.aws/credentials
(Linux 和 Mac)或 %USERPROFILE%\.aws\credentials
(Windows):
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
因此,在通过 aws configure
或直接在 ~/.aws/credentials
文件中设置特定命名配置文件(上例中的 user1)后,您可以选择特定配置文件:< /p>
aws ec2 describe-instances --profile user1
或者导出到终端:
$ export AWS_PROFILE=user1
答案 4 :(得分:1)
根据问题的标题回答,以防有人偶然发现。
在AWS CLI报告unable to locate credentials
时,我遇到了同样的问题。
我从[default]
文件中删除了credentials
组凭据,因为我不使用它们,也不认为它们是不需要的。看来他们是。
然后我按如下所示重新整理了文件,它就起作用了...
[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
答案 5 :(得分:0)
生锈的脚本投石者的愚蠢而谨慎的尾巴:
我在脚本中将变量HOME定义为脚本应用于构建平台的位置。
此变量将覆盖定义外壳程序用户env
的{{1}}变量。因此,AWS命令找不到$HOME
,因为~/.aws/credentials
引用了错误的位置。
我不愿意承认这一点,但我希望它可以帮助您节省一些时间。
答案 6 :(得分:0)
如果您正在使用具有角色的.aws/config
文件,请确保配置文件的格式正确。就我而言,我忘记将role_arn =
放在arn前面。默认配置文件位于.aws/credentials
文件中,并包含iam身份的访问密钥ID和秘密访问密钥。
配置文件包含角色详细信息:
[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
您可以通过致电
快速测试访问权限aws sts get-caller-identity --profile myrole
如果像我一样启用了MFA,则需要在提示时输入它。
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"
}
答案 7 :(得分:0)
今天在 EC2 上运行aws cli时遇到此错误。我的情况是,在运行aws configure list
时我可以获得凭据信息。但是,我在公司环境中运行,执行aws kms decrypt
之类的事情需要PROXY
。一旦设置代理,aws凭证信息就会消失。
export HTTP_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
export HTTPS_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
原来,我还必须设置NO_PROXY
并将ec2保留的默认本地IP保留在列表169.254.169.254
中。
export NO_PROXY=169.254.169.25
答案 8 :(得分:0)
我碰巧试图从cron根目录运行aws-cli命令。
由于凭据存储在$ HOME / .aws / credentials中,并且我通过 sudo 初始化了aws-cli,因此$ HOME仍然是/ home / user /。从cron运行时,$ HOME为/ root /,因此cron无法找到该文件。
解决方法是更改特定cron作业的$ HOME。示例:
00 12 * * * HOME=/home/user aws s3 sync s3://...
(替代方法包括从/ home / user /到/ root /移动,复制或链接.aws目录)
答案 9 :(得分:0)
尝试使用sudo aws ec2 command
之类的aws命令添加sudo,是的,因为meuh提到awscli需要使用sudo配置