Конечная точка S3 VPC IAM прерывает доступ к ECR

#amazon-web-services #amazon-s3

Вопрос:

Я использую конечную точку S3 VPC (тип: шлюз). Я хотел ограничить доступ к ресурсам S3 из моей частной подсети только теми ресурсами, которые принадлежат моей учетной записи. Я использовал ниже IAM:

 {
    "Version": "2012-10-17",
    "Statement": [       
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalAccount": ["myAccountId"]
                }
            }
        }
    ]
}
 

это отлично работает для S3, однако это нарушает доступ к ECR с самого узла, поэтому он больше не может извлекать изображения docker.

Вот что происходит, когда я использую docker pull :

 error pulling image configuration: error parsing HTTP 403 response body: invalid character '<' looking for beginning of value: "<Error>...Access Denied...</Error>"
 

Это сообщение от узла Kubernetes, который пытается извлечь изображение:

 Failed to pull image "<accountId>.dkr.ecr.eu-west-1.amazonaws.com/<repoName>:<tag>": failed to copy: httpReaderSeeker: failed open: unexpected status code https://<accountId>.dkr.ecr.eu-west-1.amazonaws.com/v2/<repoName/blobs/sha256:<hash>: 403 Forbidden
 

Если я удалю условие основной учетной записи:

 {
    "Version": "2012-10-17",
    "Statement": [       
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "*"       
        }
    ]
}
 

все работает нормально.

Мне кажется, что конечная точка ECR создает предварительно подписанный URL-адрес для S3, который затем блокируется моей вышеуказанной политикой.

Есть ли какой-либо способ разрешить предварительно подписанный URL-адрес ECR, ограничивая при этом доступ только к ресурсам AWS, принадлежащим моей учетной записи?

Комментарии:

1. Возможно, создайте независимый процесс, который периодически извлекает изображения из ECR и делает их доступными для вашего приложения через корзину S3 с поддержкой конечных точек VPC.

Ответ №1:

После отображения журналов демона Docker я заметил, что он пытается извлечь ресурс из: prod-eu-west1-starport-layer-bucket.s3.eu-west-1.amazonaws.com .

Затем я нашел специальную документацию AWS, в которой описаны минимальные требуемые разрешения: https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-setting-up-s3-gateway

Затем я добавил этот блок в свою конечную точку S3 VPC IAM:

 {
  "Effect": "Allow",
  "Principal": "*",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::prod-eu-west-1-starport-layer-bucket/*"
}
 

и все стало работать нормально.