gpt4 book ai didi

amazon-web-services - 如何使用IAM角色权限让Docker Swarm管理器从AWS ECR中提取图像?

转载 作者:行者123 更新时间:2023-12-02 19:49:20 30 4
gpt4 key购买 nike

我无法从运行Docker Swarm的AWS ECR中提取图像。几年来一切正常,但是我的swarm manager节点已更改为新的EC2实例。现在我的服务无法部署:

~ $ docker stack deploy -c dkr_compose_geo_site:3.2.0 --with-registry-auth geo_stack

管理器节点日志显示“没有基本身份验证凭据”:
May 19 21:21:12 ip-172-31-3-108 root: time="2020-05-19T21:21:12.857007050Z" level=error msg="pulling image failed" error="Get https://445523.dkr.ecr.us-west-2.amazonaws.com/v2/geo_site/manifests/sha256:da5820742cd0ecd52e3a2c61179a039ce80996564604b70465e3966087380a09: no basic auth credentials" module=node/agent/taskmanager node.id=eix8c6orbunemismg03ib1rih service.id=smilb788pets7y5rgbu3aze9l task.id=zd3ozdpr9exphwlz318pa9lpe 
May 19 21:21:12 ip-172-31-3-108 root: time="2020-05-19T21:21:12.857701347Z" level=error msg="fatal task error" error="No such image: 445523.dkr.ecr.us-west-2.amazonaws.com/geo_site@sha256:da5820742cd0ecd52e3a2c61179a039ce80996564604b70465e3966087380a09" module=node/agent/taskmanager node.id=eix8c6orbunemismg03ib1rih service.id=smilb788pets7y5rgbu3aze9l task.id=zd3ozdpr9exphwlz318pa9lpe

该管理器节点正在具有IAM角色的EC2实例上运行; IAM角色的ECR策略似乎授予权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:DescribeImages",
"ecr:BatchGetImage"
],
"Resource": "*",
"Effect": "Allow"
}
]
}

通过阅读AWS / Docker文档,我认为在管理器节点上运行的docker命令应采用实例IAM角色,并使用关联的策略权限访问ECR存储库。似乎总是这样,但是现在看来,旧的管理器节点上可能已经隐藏了一些配置文件。我在一个新实例上,它不起作用。我不在这些管理器节点上运行AWS-CLI,因此没有 aws ecr get-login可以手动登录。如何获得这个新的Manager节点以通过ECR进行身份验证?

谢谢!

最佳答案

我的解决方案基于Luigi Lopez和amazon-ecr-credential-helper的评论:

正如Luigi在其评论中指出的那样,AWS IAM角色允许身份验证,但docker cli必须仍向ECR提供凭据。

这是Docker Swarm的实现,其节点运行Alpine OS。有一个可用于Alpine的aws-cli软件包,但是安装过程引起了很多麻烦,最终二进制文件还是崩溃了。

在任何情况下,Amazon ECR Credential Helper都是一个更好的长期解决方案,因为您不需要每隔12小时获取新 token 或设置代理服务器等。它使用建议的IAM角色身份验证,并且不存储任何凭证机器或泄漏到日志文件中。

因此,在Alpine下,我按照上面链接中的说明从源进行构建。
我安装了go,git和make,然后按照说明构建了凭据帮助器。我按照所述设置了PATH,创建了一个配置文件,然后我的部署开始了。不需要docker login

关于amazon-web-services - 如何使用IAM角色权限让Docker Swarm管理器从AWS ECR中提取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61902349/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com