当我拉取干净的 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
我是否遗漏了一些明显的东西?
在获得
aws-cli
的许可之前,您无权访问这些资源,为此您可以使用以下步骤。
登录您的 AWS 账户,单击您的账户名称,选择我的安全凭证,单击访问密钥并下载凭证
以管理员身份打开您的
PowerShell
并按照命令操作。
$ aws configure
$ AWS Access Key ID [****************E5TA]=xxxxxxxxxx
$ AWS Secret Access Key [****************7gNT]=xxxxxxxxxxxxxx
这毕竟是一个访问问题!事实证明,如果您创建一个具有完全管理员访问权限的新 IAM 用户,默认情况下它无法访问您使用其他帐户创建的 ECR 注册表。使用其他账户的 IAM 凭证解决了该问题。
就我而言,我的
~/.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
。
对我有用的是: 在管道的第一部分添加参数 --profile < your-profile-name > 之后,在每个 ECR 命令中,您需要提供该参数。
创建一个具有
AmazonEC2ContainerRegistryFullAccess
权限的新帐户。
将此帐户添加到 .credentials
文件中,如下所示:
[ecr-user]
aws_access_key_id = XXX
aws_secret_access_key = XXX
然后接下来使用以下命令:
aws ecr get-login-password --profile ecr-user
我的问题是由于我之前在进行练习时在 AWS IAM 管理控制台中停用了访问密钥而引起的。当我重新激活它后,问题就解决了。
(确保您也位于正确的 AWS 区域。)
我有相同的错误消息,但我使用的是基于会话的 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 中。
尝试运行
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
更新,必须添加--profile,我解决了这个问题。
这让我困惑了一段时间。各种异常的味道。为了最终得到修复,我擦除了我的 aws 主目录,并从头开始重新输入我的
Access Key ID
和 Secret Access Key
。
rm -rf ~/.aws
aws configure
我使用的是 Ubuntu 22.04,aws cli 2.11.21
几个小时后,这是我的结论:
如果您想使用
,请确保其余 AWS 环境变量未设置(不仅仅是 empty...必须是 UNSET)。AWS_PROFILE
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}
按照以下步骤解决了问题: