0

如何让我的 ECS Fargate 集群从另一个 AWS 账户中的私有 Docker 注册表中提取容器?如果私有 Docker 注册表在同一个帐户中,我不需要身份验证,但我得到CannotPullContainerError: Error response from daemon: pull access denied for <account id>.dkr.ecr.ap-southeast-2.amazonaws.com/project/container, repository does not exist or may require 'docker login'

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html谈到了身份验证和私有注册表,但似乎没有提到我在另一个 AWS 账户中使用 ECR 的用例。看起来我可以在 ECR 权限中添加对定义的 AWS 账户列表的访问权限,但可能还有其他方法吗?为 ECR 生成的密码似乎只能持续 12 小时,因此无法使用。

4

1 回答 1

1

在运行您的 Fargate 服务的帐户中,您的任务定义中指定的任务执行角色应该具有拉取图像的权限。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "ecr:BatchCheckLayerAvailability",
            "ecr:GetDownloadUrlForLayer",
            "ecr:BatchGetImage"
        ],
        "Resource": "arn:aws:ecr:eu-west-1:<account id>:repository/project",
        "Effect": "Allow"
    },
    {
        "Action": "ecr:GetAuthorizationToken",
        "Resource": "*",
        "Effect": "Allow"
    }

]}

在包含 ECR 的帐户中,您应该在 ecr 策略中指定允许包含任务执行角色的帐户访问存储库。在下面的 ecr 策略中添加了整个帐户,这可能有点安全,但您可以收紧。

{ "Version": "2008-10-17", "Statement": [ { "Sid": "PullImage", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<accountid>:root" }, "Action": [ "ecr:BatchGetImage", "ecr:DescribeImages", "ecr:DescribeRepositories", "ecr:GetDownloadUrlForLayer", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:GetRepositoryPolicy", "ecr:ListImages" ] } ] }

于 2020-05-05T20:29:26.220 回答