当我拉取一个干净的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 id
和aws 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}
在以下操作后解决了问题:
- 转到 AWS IAM 管理控制台
- 在"访问密钥(访问密钥 ID 和秘密访问密钥("部分中生成凭据
- 运行命令 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_id
和aws_secret_access_key
并删除aws_session_token
。您还可以通过 aws configure
命令更新aws_access_key_id
和aws_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 ID
和Secret Access Key
。
rm -rf ~/.aws
aws configure
我在 Ubuntu 22.04, aws cli 2.11.21 上