Доступ к изображениям ecr из контейнера jenkins docker ecs
Привет эксперты Jenkins / Docker -
Материал, который работает:
Используя предложенный здесь подход, я смог запустить образ докера Jenkins в кластере AWS ECS. С помощью -v
объемные крепления для док-станции (/var/run/docker.sock
) и докер (/usr/bin/docker
) Я также могу получить доступ к процессу докера из контейнера Jenkins.
Вещи, которые не являются:
Последняя проблема, с которой я сталкиваюсь, это получение / отправка изображений в реестр AWS ECR и из него. Когда я пытаюсь выполнить команды Docker Pull / Push, я получаю - no basic auth credentials
,
Я наткнулся на эту ссылку, объясняя мою проблему. Но я не могу использовать предложенные здесь решения, так как нет ~/.docker/config.json
в хост-машине, чтобы поделиться с контейнером док-станции Jenkins.
Какие-либо предложения?
1 ответ
Пользователям 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, определенным для других задач.
Возможность аудита: доступ и регистрация событий доступны через CloudTrail для обеспечения ретроспективного аудита. Учетные данные задачи имеют контекст taskArn, который присоединен к сеансу, поэтому журналы CloudTrail показывают, какая задача использует какую роль.
Но вы должны выполнить эту команду, как указано выше, чтобы получить токен авторизации.
eval $(aws ecr get-login --no-include-email)
Вы получите ответ как
Войти успешно
Теперь вы нажимаете на изображение, когда получаете токен аутентификации из ECR.
docker push xxxxxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/nodejs:test