#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/*"
}
и все стало работать нормально.