带有AWS CLI的Bash-找不到凭据
我有一个shell脚本,它应该从S3下载一些文件并安装一个ebs驱动器。但是,我总是以“找不到凭据”结束 我已经使用带有AWS CLI的Bash-找不到凭据,bash,amazon-web-services,aws-cli,Bash,Amazon Web Services,Aws Cli,我有一个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+
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):
谢谢你的帮助
sudo
将$HOME
目录(因此~
)更改为/root,并从环境中删除大多数bash变量,如AWS\u CONFIG\u文件。请确保您使用aws作为根用户或用户,不要混用
例如,确保您进行了sudo aws配置
。试一试
sudo bash -c 'AWS_CONFIG_FILE=/root/.aws/config aws s3 sync s3://backup-test-s3 /s3-backup/test'
您可能更愿意删除脚本中的所有sudo,只需sudo脚本本身。这不一定与原始问题相关,但我在谷歌搜索相关问题时发现了这一点,因此我将把它写下来,以防对其他人有所帮助。我在特定用户上设置了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
虽然您的凭据和配置文件可能正确地位于~/.aws中,但您的用户帐户可能无法获取它 运行此命令以查看您的凭据是否已设置:
aws configure list
要设置凭据,请运行以下命令:
aws configure
,然后输入在~/.aws/credentials文件中指定的凭据。如果有人根据问题标题无意中发现此问题,请回答
我遇到了同样的问题,AWS CLI报告无法定位凭据
我已经从我的凭证
文件中删除了[default]
凭证集,因为我没有使用它们,也不认为需要它们。看来是的
然后我对我的文件进行了如下改革,它成功了
[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
一个生锈的投稿人愚蠢而谨慎的尾巴:
我已经在脚本中定义了HOME变量,作为脚本构建平台时应该使用的位置
此变量重写了定义shell用户的env
var$HOME
。因此,AWS命令无法找到~/.AWS/credentials
,因为~
引用了错误的位置
我不想承认这一点,但我希望它能帮你节省一些时间。如果你使用的是角色.aws/config
文件,请确保你的配置文件格式正确。就我而言,我忘了把角色\u 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"
}
今天在EC2上运行aws cli时遇到此错误。我的情况是,在运行aws配置列表时,我可以获取凭据信息。但是,我在一个公司环境中运行,执行类似于aws kms decrypt
的操作需要代理
。一旦我设置了代理,aws凭证信息就会消失
export HTTP_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
export HTTPS_PROXY=aws-proxy-qa.cloud.myCompany.com:8099
事实证明,我还必须设置NO_PROXY
,并在列表中设置ec2元数据地址169.254.169.254
。此外,由于您应该通过s3端点,因此通常也应该在no_代理中包含.amazonaws.com
export NO_PROXY=169.254.169.254,.amazonaws.com
我在尝试从根cron运行awscli命令时遇到了这个问题
由于凭据存储在$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/to/root/移动、复制或符号链接.aws目录)尝试使用aws命令添加sudo,如sudo aws ec2命令
和是,如前所述,awscli需要使用sudo进行配置在使用不同的aws配置文件时,通常会发生找不到凭据
错误,并且当前终端无法识别当前配置文件的凭据
请注意,您不需要每次都通过aws configure
填写所有凭据-您只需要参考一次配置的相关配置文件。
从AWS文档中的:
AWS CLI支持使用以下任意多个命名配置文件:
存储在配置和凭据文件中。您可以配置
使用aws配置的附加配置文件带有--profile
选项,
或者通过向配置文件和凭据文件添加条目
以下示例显示了具有两个配置文件的凭据文件。这个
当您在没有配置文件的情况下运行CLI命令时,将使用第一个[默认值]。
第二个选项在使用--profile user1运行CLI命令时使用
参数
~/.aws/credentials
(Linux和Mac)或%USERPROFILE%\.aws\credentials
(Windows):
因此,在通过aws configure
或直接在~/.aws/credentials
文件中设置特定的命名配置文件(user1)后,您可以选择特定的配置文件:
aws ec2 describe-instances --profile user1
或将其导出到终端:
$ export AWS_PROFILE=user1
谢谢,你完全正确。。。这是问题的根源(使用sudo运行脚本,但将凭据指定为普通用户)。感谢VS代码远程容器中出现此问题:aws configure
以root用户身份运行,但执行aws codeartifact登录的npm脚本无法访问~/.aws/credentials
fil
aws ec2 describe-instances --profile user1
$ export AWS_PROFILE=user1