在 aws-cli 上进行身份验证时出现无法识别的客户端异常错误



当我拉取一个干净的Alphine Linux Docker映像时,在其上安装aws-cli并尝试使用aws ecr get-authorization-token --region eu-central-1进行身份验证,我不断收到以下错误:

调用 获取授权令牌操作:包含在请求无效

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

这些是我运行以设置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 CLI 在运行 AWS CLI 命令时首先优先考虑aws_session_token而不是aws access key idaws secret access key(如果~/.aws/credentials文件中存在aws_session_token(。

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

[ecr-user]
aws_access_key_id = XXX
aws_secret_access_key = XXX

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

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

我有相同的错误消息,但是我使用的是基于会话的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中。

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

我的问题是由以下事实引起的:我之前在 AWS IAM 管理控制台中停用了我的访问密钥,这是我正在做的练习的一部分。 重新激活它后,问题就解决了。

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

几个小时

后,这是我的结论:

如果要使用AWS_PROFILE请确保 AWS env var 的其余部分未设置(不仅为空...必须未设置(。

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}

在以下操作后解决了问题:

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

它对我不起作用。出于纯粹的绝望,我复制了以export开头的行,并将它们张贴在终端中并按回车键。

此后,我写了aws configure,并从 https://MYCOMPANY.awsapps.com/start#/>>帐户中填写了详细信息>>单击了"命令行或编程访问"。

默认区域名称:eu-north-1
默认输出格式:text

然后登录成功。不要问我为什么。

打开文件~/.aws/credentials(或在Windows上c:Users{user}.awscredentials(

它可能如下所示:

[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,但这不会删除会话令牌。

尝试运行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 区域中启用它来解决 ->启用(并耐心等待几分钟(。

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

让我难倒了一段时间。各种口味的例外。为了最终得到修复,我擦除了我的 aws 主目录,然后从头开始重新输入我的Access Key IDSecret Access Key

rm -rf ~/.aws
aws configure

我在 Ubuntu 22.04, aws cli 2.11.21 上

相关内容

  • 没有找到相关文章

最新更新