вытащить контейнер из частного реестра в отдельную учетную запись в AWS ECS

Как я могу заставить кластер 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 часов, так что это не сработает.


person tschumann    schedule 16.01.2020    source источник
comment
Для его работы необходимо предоставить политику: docs.aws.amazon.com/AmazonECR/latest/userguide/. Также дополнительная информация: aws.amazon.com/premiumsupport/knowledge -center /   -  person dannymintz8    schedule 16.01.2020
comment
Да, насколько я мог видеть, добавление учетных записей в разрешения ECR казалось лучшим способом сделать это (и, возможно, единственным способом?).   -  person tschumann    schedule 17.01.2020


Ответы (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" ] } ] }

person Hans ter Wal    schedule 05.05.2020