繁体   English   中英

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

[英]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 idaws 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

解决以下问题后:

  1. 转到AWS IAM 管理控制台
  2. 在“访问密钥(访问密钥 ID 和秘密访问密钥)”部分中生成凭据
  3. 运行命令aws configure并在 Cdrive-User-directory.aws\credentials 中设置相同的下载凭据

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

如果您想使用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_idaws_secret_access_key并删除aws_session_token 您还可以通过aws configure命令更新aws_access_key_idaws_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM