【问题标题】:Unable to pull image from amazon ECS private repository on container instances running in ECS cluster无法从 ECS 集群中运行的容器实例上的 Amazon ECS 私有存储库中提取映像
【发布时间】:2021-01-18 12:23:41
【问题描述】:

我在 AWS ECS 上创建了一个非默认集群,我能够从 docker 公共存储库中提取 docker 映像并运行它以进行测试。

然后我创建了一个 ECS 私有存储库,并构建了一个映像并将其推送到此存储库,它成功了。但是当我尝试使用 docker pull 手动拉它时,它会抱怨以下错误:

来自守护程序的错误响应:获取 https://532193077341.dkr.ecr.ap-south-1.amazonaws.com/v2/12r/manifests/latest: 没有基本的身份验证凭据

这似乎是 IAM 角色和权限的问题,但我不确定要更改哪个角色/策略。

【问题讨论】:

  • 如何将镜像推送到 ECS 私有仓库?是 ECR 吗?
  • @Apolozeus 是的,我可以将图像推送到 ECS 私有仓库。
  • 你能检查一下你是否有ecr:GetDownloadUrlForLayer, ecr:BatchGetImage and ecr:BatchCheckLayerAvailability的权限吗?

标签: amazon-web-services docker amazon-ecs


【解决方案1】:

在您的 ECS 容器(任务)定义中

如果您使用的是私有 ECR 存储库:

检查私有存储库身份验证选项,因为 ECR 不使用用户名密码身份验证,它将使用 IAM 角色/用户权限。然后,只需确保 ECS IAM 角色(默认称为 ecsTaskExecutionRole)有权从 ECR 中提取图像,如果它自己不添加这些行:

"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",

如果您使用的是非 ECR 私有存储库:

检查 私有存储库身份验证选项并使用Secrets Manager提供您的用户名-密码

【讨论】:

    【解决方案2】:

    您需要首先针对 ECR 进行身份验证。本地 AWS 凭证本身不足以让您从私有 ECR 存储库中提取。事先尝试这样的事情:

    $(aws ecr get-login --registry-ids <YOUR-ID> --region <YOUR-REGION>)
    

    它将针对 ECR 为您执行 docker login,允许您提取私有映像(假设您的本地 AWS 凭证具有所需的权限)。

    有关详细信息,请参阅the Amazon ECR Documentation 中的“第 1 步:向您的默认注册表验证 Docker”。

    【讨论】:

    • 我期待在我的 ec2instance 上我不必登录,并且我应该能够在我的 ec2Instance 上提取图像而无需登录。作为创​​建我的 aws_launch_configuration 的一部分,我指定instance_profile 将角色与 profile_policy 联系起来。配置文件策略有:“ecr:GetAuthorizationToken”、“ecr:BatchGetImage”......所以我假设在一个实例上我应该能够手动提取图像而无需手动实际登录到 ecs 注册表。
    • 当然,上述工作只是因为我承担了适当的角色,例如作为启动配置的一部分启动的角色策略不需要手动登录。我不确定 ecs-agent 在实例上运行任务定义时实际上是如何从 repo 中提取图像的。
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2023-03-30
    • 2022-01-11
    • 2018-10-10
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    相关资源
    最近更新 更多