在 aws-cli 上进行身份验证时出现 UnrecognizedClientException 错误

问题描述 投票:0回答:12

当我拉取干净的 Alphine Linux Docker 映像时,在其上安装

aws-cli
并尝试使用
aws ecr get-authorization-token --region eu-central-1
验证自己的身份,我不断收到以下错误:

调用时发生错误(UnrecognizedClientException) GetAuthorizationToken 操作:包含在中的安全令牌 请求无效

我已经检查了时区,这似乎没问题,并且该命令在我的本地计算机上正常运行。

这些是我运行来设置的命令

aws-cli

apk add --update python python-dev py-pip
pip install awscli --upgrade
export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我是否遗漏了一些明显的东西?

amazon-web-services command-line-interface aws-cli alpine-linux
12个回答
32
投票

在获得

aws-cli
的许可之前,您无权访问这些资源,为此您可以使用以下步骤。

登录您的 AWS 账户,单击您的账户名称,选择我的安全凭证,单击访问密钥并下载凭证

以管理员身份打开您的

PowerShell
并按照命令操作。

$ aws configure
$ AWS Access Key ID [****************E5TA]=xxxxxxxxxx
$ AWS Secret Access Key [****************7gNT]=xxxxxxxxxxxxxx

24
投票

这毕竟是一个访问问题!事实证明,如果您创建一个具有完全管理员访问权限的新 IAM 用户,默认情况下它无法访问您使用其他帐户创建的 ECR 注册表。使用其他账户的 IAM 凭证解决了该问题。


12
投票

就我而言,我的

~/.aws/credentials
文件有一个旧的
aws_session_token
,未通过
aws configure
CLI 命令更新。当我使用
vi ~/.aws/credentials
打开文件并删除
aws_session_token
条目后,我就不再遇到
UnrecognizedClientException
。我猜测,如果
aws_session_token
文件中存在
aws access key id
,则在运行 AWS CLI 命令时,AWS CLI 首先会优先考虑
aws secret access key
,而不是
aws_session_token
~/.aws/credentials


6
投票

对我有用的是: 在管道的第一部分添加参数 --profile < your-profile-name > 之后,在每个 ECR 命令中,您需要提供该参数。


3
投票

创建一个具有

AmazonEC2ContainerRegistryFullAccess
权限的新帐户。 将此帐户添加到
.credentials
文件中,如下所示:

[ecr-user]
aws_access_key_id = XXX
aws_secret_access_key = XXX

然后接下来使用以下命令:

aws ecr get-login-password --profile ecr-user

2
投票

我的问题是由于我之前在进行练习时在 AWS IAM 管理控制台中停用了访问密钥而引起的。当我重新激活它后,问题就解决了。

(确保您也位于正确的 AWS 区域。)


2
投票

我有相同的错误消息,但我使用的是基于会话的 AWS 访问。解决方案是添加 AWS 提供的所有密钥,包括会话令牌。

aws_access_key_id="your-key-id"
aws_secret_access_key="your-secret-access-key"
aws_session_token="your-session-token"

将其添加到您正在使用的配置文件的 ~/.aws/credentials 中。


1
投票

尝试运行

echo $varname
来查看环境变量是否设置正确:

echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY
echo $AWS_DEFAULT_REGION

如果设置不正确,请运行

unset varname
:

unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_DEFAULT_REGION

1
投票

更新,必须添加--profile,我解决了这个问题。


1
投票

这让我困惑了一段时间。各种异常的味道。为了最终得到修复,我擦除了我的 aws 主目录,并从头开始重新输入我的

Access Key ID
Secret Access Key

rm -rf ~/.aws
aws configure

我使用的是 Ubuntu 22.04,aws cli 2.11.21


0
投票

几个小时后,这是我的结论:

如果您想使用

AWS_PROFILE
,请确保其余 AWS 环境变量未设置(不仅仅是 empty...必须是 UNSET)。

profile=$AWS_PROFILE
unset $(printenv |grep AWS_ | cut -f1 -d"=");
export AWS_PROFILE=${profile};

然后:

  # with aws cli >= 1.x
  $(aws ecr get-login --no-include-email --region ${aws_region})

  # with aws cli >= 2.x
  registry=${aws_account_id}.dkr.ecr.${aws_region}.amazonaws.com
  aws ecr get-login-password --region ${aws_region} | docker login --username AWS --password-stdin ${registry}

0
投票

按照以下步骤解决了问题:

  1. 转到 AWS IAM 管理控制台
  2. 在“访问密钥(访问密钥 ID 和秘密访问密钥)”部分中生成凭证
  3. 运行命令 aws configure 并在 Cdrive-User-directory.aw 中设置相同的下载凭证
© www.soinside.com 2019 - 2024. All rights reserved.