Это может быть достигнуто с помощью комбинации роли экземпляра EC2 и сценария, который выполняет вход в докер, за которым следует docker pull
для вашего отправленного изображения.
Предварительные условия: Экземпляр EC2 с установленными интерфейсом командной строки AWS и Docker.
Во-первых, вам нужно добавить встроенную политику AmazonEC2ContainerRegistryReadOnly
IAM к роли IAM вашего экземпляра EC2 (это дает доступ на чтение к всем отправленным изображениям). Если вы хотите, чтобы все было более ограничительно, вместо этого вы можете использовать следующую политику:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GrantSingleImageReadOnlyAccess",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:DescribeImages",
"ecr:BatchGetImage"
],
"Resource": "<aws-account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>"
},
{
"Sid": "GrantECRAuthAccess",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
}
]
}
Далее вам нужно будет создать скрипт для входа в систему и получения изображений. Типичный скрипт будет выглядеть примерно так:
$(aws ecr get-login --no-include-email --region <region>);
docker pull <aws-account-id>.dkr.ecr.<region>.amazonaws.com/<image-name>:<optional-tag>;
Обратите внимание, что этот скрипт должен запускаться от имени пользователя root для правильного доступа к демону Docker.
Другим способом решения всего этого является поиск вариантов автоматизации для задач ECS.