[英]UnrecognizedClientException error when authenticating on aws-cli
当我拉出一个干净的 Alphine Linux Docker 镜像,在其上安装aws-cli
并尝试使用aws ecr get-authorization-token --region eu-central-1
对自己进行身份验证时,我不断收到以下错误:
调用 GetAuthorizationToken 操作时发生错误 ( UnrecognizedClientException ):请求中包含的安全令牌无效。
我已经检查过似乎没问题的时区,并且该命令在我的本地计算机上正常运行。
这些是我运行以设置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
有什么明显的我想念的吗?
毕竟这是一个访问问题! 事实证明,如果您创建一个具有完全管理员访问权限的新 IAM 用户,则默认情况下它无法访问您使用其他帐户创建的 ECR 注册表。 使用来自该其他账户的 IAM 凭证解决了该问题。
在获得aws-cli
的权限之前,您无权访问这些资源,为此您可以使用以下步骤。
登录您的 AWS 账户,点击您的账户名称,选择我的安全凭证,点击访问密钥并下载凭证
以管理员身份打开PowerShell
并按照命令进行操作。
$ aws configure
$ AWS Access Key ID [****************E5TA]=xxxxxxxxxx
$ AWS Secret Access Key [****************7gNT]=xxxxxxxxxxxxxx
在我的情况下,我的~/.aws/credentials
文件有一个旧的aws_session_token
未由aws configure
CLI 命令更新。 使用vi ~/.aws/credentials
打开文件并删除aws_session_token
条目后,我不再遇到UnrecognizedClientException
。 我猜测,如果~/.aws/credentials
文件中存在aws_session_token
,则在运行 AWS CLI 命令时,AWS CLI 首先将aws_session_token
优先于aws access key id
和aws secret access key
。
我的问题是由于我之前在 AWS IAM 管理控制台中停用了我的访问密钥,这是我正在做的练习的一部分。 一旦我重新激活它,问题就解决了。
(确保您也位于正确的 AWS 区域。)
创建一个具有AmazonEC2ContainerRegistryFullAccess
权限的新账户。 将此帐户添加到.credentials
文件中,如下所示:
[ecr-user]
aws_access_key_id = XXX
aws_secret_access_key = XXX
然后接下来使用以下命令:
aws ecr get-login-password --profile ecr-user
解决以下问题后:
几个小时后,这是我的结论:
如果您想使用
AWS_PROFILE
确保其余的 AWS env vars 未设置(仅不为空......必须为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}
它不适合我。 出于绝望,我复制了以export
开头的行并将它们发布到终端并按下回车键。
此后,我编写了aws configure
并从https://MYCOMPANY.awsapps.com/start#/ >> 帐户 >> 单击“命令行或编程访问”中填写了详细信息。
默认区域名称: eu-north-1
默认输出格式: text
然后登录成功。 不要问我为什么。
我有同样的错误信息,但是我使用的是基于会话的 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 中。
打开文件~/.aws/credentials
(或 Windows 上的c:\Users\{user}\.aws\credentials
)
它可能如下所示:
[default]
aws_access_key_id = XXXXX
aws_secret_access_key = XXXXX
aws_session_token = XXXXX
使用新值更新aws_access_key_id
和aws_secret_access_key
并删除aws_session_token
。 您还可以通过aws configure
命令更新aws_access_key_id
和aws_secret_access_key
,但这不会删除会话令牌。
对我有用的是:在 pipe 的第一部分添加参数--profile < your-profile-name > ,然后在每个 ECR 命令中您需要提供该参数。
尝试运行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
就我而言,我想使用的区域未启用。 通过在账户 > AWS 区域 -> 启用(并耐心等待几分钟)启用它来解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.