使用AWS根用户推送Docker镜像至ECR时GetAuthorizationToken报错
解决AWS ECR推送镜像时的AccessDeniedException错误
问题描述
尝试将Docker镜像推送至AWS ECR,使用不推荐的根用户在本地创建了访问密钥/密钥对,执行ECR提供的登录命令:
sudo aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin xxxxxx.xxxxxx.ecr.us-east-1.amazonaws.com持续收到错误:
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:sts::5555555555555:assumed-role/AmazonEC2RunCommandRoleForManagedInstances/mi-08d61ab572732fec4 is not authorized to perform: ecr:GetAuthorizationToken on resource: * because no identity-based policy allows the ecr:GetAuthorizationToken action已关闭2FA,但问题仍未解决。
解决方案
- 确认当前使用的AWS身份:错误信息显示当前生效的是
AmazonEC2RunCommandRoleForManagedInstances角色,并非你创建的根用户访问密钥。执行aws configure list查看当前配置的Access Key;如果用了sudo,可能加载的是root用户的AWS配置(/root/.aws/credentials),而非个人用户配置(~/.aws/credentials)。 - 为对应身份添加ECR权限:
- 若坚持使用根用户:给根用户附加
AmazonEC2ContainerRegistryFullAccess托管策略,或自定义包含以下权限的策略:ecr:GetAuthorizationToken、ecr:BatchCheckLayerAvailability、ecr:GetDownloadUrlForLayer、ecr:BatchGetImage、ecr:InitiateLayerUpload、ecr:UploadLayerPart、ecr:CompleteLayerUpload、ecr:PutImage。 - 推荐方案:放弃使用根用户,创建IAM用户并附加上述ECR相关权限策略,用该IAM用户的访问密钥配置AWS CLI。
- 若坚持使用根用户:给根用户附加
- 修正登录命令执行方式:
- 若无需
sudo即可操作Docker,直接去掉sudo执行命令。 - 若必须用
sudo,确保加载正确的AWS凭证,可执行:sudo AWS_SHARED_CREDENTIALS_FILE=~/.aws/credentials aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin xxxxxx.xxxxxx.ecr.us-east-1.amazonaws.com
- 若无需
内容的提问来源于stack exchange,提问作者Minions
相关产品推荐
相关产品推荐

