доступ к изображениям ecr из контейнера jenkins docker ecs - PullRequest
0 голосов
/ 01 января 2019

Здравствуйте, специалисты Jenkins / Docker -

Работающий материал:

Используя предложенный подход здесь , я смог запустить образ докера Jenkins в AWSECS кластер.Используя -v томов для монтирования для сокета докера (/var/run/docker.sock) и докера (/usr/bin/docker), я также могу получить доступ к процессу докера из контейнера Jenkins.

Материал, который не является:

Последняя проблема, с которой я сталкиваюсь, это получение / отправка изображений в реестр AWS ECR и из него.Когда я пытаюсь выполнить команды «тянуть / толкнуть» Docker, я получаю - no basic auth credentials.

Я наткнулся на эту ссылку , объясняющую мою проблему .Но я не могу использовать предложенные здесь решения, поскольку на хост-компьютере нет ~/.docker/config.json, чтобы поделиться с док-контейнером Jenkins.

Есть предложения?

1 Ответ

0 голосов
/ 01 января 2019

Пользователям Amazon ECR требуются разрешения для вызова ecr: GetAuthorizationToken, прежде чем они смогут аутентифицироваться в реестре и выдвигать или извлекать любые изображения из любого хранилища Amazon ECR.Amazon ECR предоставляет несколько управляемых политик для управления доступом пользователей на разных уровнях;для получения дополнительной информации см. ecr_managed_policies

AmazonEC2ContainerRegistryPowerUser

Эта управляемая политика обеспечивает доступ опытного пользователя к Amazon ECR, что позволяет выполнять чтение и запись.доступ к репозиториям, но не позволяет пользователям удалять репозитории или изменять применяемые к ним документы политики.

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "ecr:GetAuthorizationToken",
            "ecr:BatchCheckLayerAvailability",
            "ecr:GetDownloadUrlForLayer",
            "ecr:GetRepositoryPolicy",
            "ecr:DescribeRepositories",
            "ecr:ListImages",
            "ecr:DescribeImages",
            "ecr:BatchGetImage",
            "ecr:InitiateLayerUpload",
            "ecr:UploadLayerPart",
            "ecr:CompleteLayerUpload",
            "ecr:PutImage"
        ],
        "Resource": "*"
    }]
}

Таким образом, вместо использования ~ / .docker / config.json для этого назначьте вышеуказанную роль политикик вашей задаче ECS , и ваша служба док-контейнеров сможет вытолкнуть извлекаемое изображение из ECR.

Роли IAM для задач

С помощью ролей IAM для задач Amazon ECS вы можете указать роль IAM, которая может использоваться контейнерами в задаче.Приложения должны подписывать свои запросы API AWS с помощью учетных данных AWS, и эта функция предоставляет стратегию управления учетными данными для использования вашими приложениями, подобно тому, как профили экземпляров Amazon EC2 предоставляют учетные данные для экземпляров EC2.Вместо создания и распространения учетных данных AWS среди контейнеров или использования роли экземпляра EC2 вы можете связать роль IAM с определением задачи ECS или операцией API RunTask.Приложения в контейнерах задачи могут затем использовать AWS SDK или CLI для отправки запросов API авторизованным сервисам AWS.

Преимущества использования ролей IAM для задач

Изоляция учетных данных : контейнер может получать учетные данные только для роли IAM, определенной в определении задачи, которой он принадлежит;контейнер никогда не имеет доступа к учетным данным, предназначенным для другого контейнера, принадлежащего другой задаче.

Авторизация : неавторизованные контейнеры не могут получить доступ к учетным данным роли IAM, определенным для других задач.

Auditability : Доступ и регистрация событий доступны через CloudTrail для обеспечения ретроспективного аудита.Учетные данные задачи имеют контекст taskArn, который присоединен к сеансу, поэтому журналы CloudTrail показывают, какая задача использует какую роль.

Но вам нужно выполнить эту команду, как указано выше, чтобы получить токен аутентификации.

eval $(aws ecr get-login --no-include-email)

Вы получите ответ, подобный

Вход в систему выполнен успешно

Теперь вы нажимаете на push-изображение, как только получаете токен аутентификации из ECR.

docker push xxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/nodejs:test

Автоматическая регистрация ECR

...