вытащить контейнер из частного реестра в отдельный аккаунт в AWS ECS - PullRequest
0 голосов
/ 16 января 2020

Как я могу заставить мой кластер ECS Fargate извлекать контейнер из частного Docker реестра, который находится в другой AWS учетной записи? Если личный реестр 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, в котором говорится об аутентификации и частных реестрах, но не похоже упомянуть мой случай использования ECR в другом AWS аккаунте. Похоже, я могу добавить доступ к определенному списку AWS учетных записей в разрешениях ECR, но, возможно, есть другие подходы? Пароли, сгенерированные для ECR, похоже, сохраняются в течение 12 часов, поэтому они не будут работать.

1 Ответ

0 голосов
/ 05 мая 2020

В учетной записи, в которой запущена служба 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" ] } ] }

...