我正在尝试将docker映像推送到AWS ECR。我正在使用我的root用户(我知道这是不推荐的)。
我在本地机器上创建了一个访问密钥/秘密。然后我用这个命令来推送它(从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。我关闭了它,但没有任何变化。
错误提示:名称为AmazonEC2RunCommandRoleForManagedInstances
的AWS角色没有ecr:GetAuthorizationToken
权限。您的用户权限不起作用—您提到禁用2fa,您可以再次启用它—您所在的机器通过IAM角色自动向AWS cli提供AWS凭据。您有多个选项:
- 附加一个内联或客户管理的IAM策略,授予
AmazonEC2RunCommandRoleForManagedInstances
角色显式ecr:GetAuthorizationToken
权限;你必须自己创建这个策略 - 附加一个AWS管理的策略,即
AmazonEC2ContainerRegistryPowerUser
将工作。注意:使用AmazonEC2ContainerRegistryPowerUser
IAM角色的所有其他机器将获得相同的权限。您可以通过为mi-08d61ab572732fec4
创建自定义角色并授予该新角色新权限来缓解此问题 - 如果您想使用自己的凭据,那么在您的机器的shell中设置
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
环境变量,参见以下说明
这三个选项中的一个应该可以,因为它们涉及的管理工作很少,尽管还有其他选项。
我的问题是由于SUDO命令。我刚刚更改了docker文件的权限,如:
sudo chmod 666 /var/run/docker.sock
一切都开始工作了。