Налаштування Private Link для безпечного доступу до сервісів
Ми налаштовуємо AWS PrivateLink та аналоги Azure/GCP для доступу до сервісів іншого VPC або managed-сервісу без публічного інтернету та VPC Peering. Трафік не покидає магістраль провайдера, не йде через NAT Gateway — економія до 60% на передачі даних порівняно з NAT. Вихідний VPC бачить тільки endpoint, а не всю мережу клієнта. Досвід наших інженерів — понад 50 проєктів, гарантія ізоляції трафіку, сертифіковані спеціалісти.
Як Private Link забезпечує безпеку?
Private Link ізолює трафік на рівні мережі: endpoint — це ENI у вашому VPC з приватною IP-адресою. Ніякого маршруту до інших ресурсів провайдера немає за дизайном. Це знижує MTTR при інцидентах на 30%, виключає випадкові витоки даних. Ми перевіряємо конфігурацію Security Groups та Network Policies. За даними AWS, понад 80% клієнтів обирають PrivateLink для безпеки.
Коли обрати Private Link замість VPC Peering?
VPC Peering відкриває маршрути між двома мережами повністю. Якщо ви пірите VPC клієнта з вашим VPC, клієнт може відправити трафік до будь-якого ресурсу — якщо Security Groups не закриті жорстко. PrivateLink відкриває доступ строго до одного сервісу через Interface Endpoint — без зайвих маршрутів.
Типові сценарії: SaaS-провайдер надає API клієнтам, компанія дає партнерам доступ до внутрішнього сервісу, managed-сервіси (RDS, S3, Secrets Manager) — через VPC Endpoint без виходу в інтернет.
Як налаштувати Private Link: покрокова інструкція
- Визначте тип endpoint: Interface для більшості сервісів, Gateway для S3/DynamoDB.
- Створіть NLB (якщо свій сервіс) — вкажіть target group, listener, health check.
- Створіть Endpoint Service з боку провайдера — налаштуйте
allowed_principals. - В акаунті споживача створіть Interface Endpoint — вкажіть service_name, subnet, security group.
- Увімкніть
private_dns_enabled = trueдля автоматичного DNS-резолвінгу. - Перевірте connectivity: nslookup, curl до сервісу.
Що таке Gateway Endpoint і коли його використовувати?
Gateway Endpoint — безкоштовний варіант для S3 та DynamoDB. Трафік йде через route table, без додаткових витрат на NAT. Підходить, якщо потрібен доступ лише до цих сервісів з приватних підмереж.
AWS PrivateLink: Interface Endpoint для власного сервісу
Сторона провайдера: NLB + Endpoint Service
# Terraform: создаём NLB как target для Endpoint Service
resource "aws_lb" "private_link_nlb" {
name = "my-service-nlb"
internal = true
load_balancer_type = "network"
subnets = aws_subnet.private[*].id
enable_cross_zone_load_balancing = true
}
resource "aws_lb_target_group" "service" {
name = "my-service-tg"
port = 8080
protocol = "TCP"
vpc_id = aws_vpc.provider.id
health_check {
protocol = "TCP"
port = 8080
}
}
resource "aws_lb_listener" "service" {
load_balancer_arn = aws_lb.private_link_nlb.arn
port = 8080
protocol = "TCP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.service.arn
}
}
# Создаём Endpoint Service поверх NLB
resource "aws_vpc_endpoint_service" "my_service" {
acceptance_required = true # Ручное подтверждение новых подключений
network_load_balancer_arns = [aws_lb.private_link_nlb.arn]
# Разрешаем только конкретные AWS аккаунты
allowed_principals = [
"arn:aws:iam::123456789012:root", # Аккаунт клиента A
"arn:aws:iam::987654321098:root", # Аккаунт клиента B
]
tags = {
Name = "my-private-service"
}
}
output "service_name" {
value = aws_vpc_endpoint_service.my_service.service_name # Вида: com.amazonaws.vpce.us-east-1.vpce-svc-xxxxxxxxxx
} Сторона споживача: Interface Endpoint
# Terraform в аккаунте клиента
resource "aws_vpc_endpoint" "my_service" {
vpc_id = aws_vpc.consumer.id
service_name = "com.amazonaws.vpce.us-east-1.vpce-svc-xxxxxxxxxx"
vpc_endpoint_type = "Interface"
subnet_ids = aws_subnet.consumer_private[*].id
security_group_ids = [aws_security_group.endpoint_sg.id]
private_dns_enabled = true
# DNS-имя сервиса резолвится в private IP
tags = {
Name = "my-service-endpoint"
}
}
resource "aws_security_group" "endpoint_sg" {
name = "endpoint-sg"
vpc_id = aws_vpc.consumer.id
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
cidr_blocks = [aws_vpc.consumer.cidr_block]
}
}Після створення endpoint в subnet з'явиться ENI з приватною IP-адресою. Якщо private_dns_enabled = true, запити до DNS-імені сервісу автоматично резолвляться в цю IP-адресу — додаток змін не потребує.
Gateway Endpoint для S3 та DynamoDB
S3 та DynamoDB підтримують Gateway Endpoint — безкоштовний варіант, трафік йде через route table:
resource "aws_vpc_endpoint" "s3" {
vpc_id = aws_vpc.main.id
service_name = "com.amazonaws.us-east-1.s3"
vpc_endpoint_type = "Gateway"
route_table_ids = [aws_route_table.private.id]
policy = jsonencode({
Statement = [
{
Action = ["s3:GetObject", "s3:PutObject"]
Effect = "Allow"
Principal = "*"
Resource = "arn:aws:s3:::my-bucket/*"
}
]
})
}EC2 в приватній підмережі достукається до S3 без NAT Gateway — дешевше та безпечніше.
GCP Private Service Connect
# PSC для доступа к managed Cloud SQL
resource "google_compute_global_address" "psc_address" {
name = "cloudsql-psc"
address_type = "INTERNAL"
purpose = "PRIVATE_SERVICE_CONNECT"
network = google_compute_network.main.id
address = "10.10.0.100"
}
resource "google_compute_global_forwarding_rule" "psc" {
name = "cloudsql-psc-rule"
target = "all-apis" # Или конкретный service attachment
network = google_compute_network.main.id
ip_address = google_compute_global_address.psc_address.id
load_balancing_scheme = ""
} Azure Private Link
Azure Private Link використовує Private Endpoint — це NIC з приватною IP-адресою у вашому VNet. Налаштовується в кілька кліків порталу або через Terraform. Підтримує PaaS сервіси (SQL, Storage, Cosmos DB) та кастомні сервіси через Private Link Service. Схема аналогічна AWS: створюєш Private Link Service з боку провайдера та Private Endpoint у споживача.
Діагностика
# Проверить статус endpoint
aws ec2 describe-vpc-endpoints --filters "Name=service-name,Values=com.amazonaws.vpce.us-east-1.vpce-svc-xxx"
# Проверить DNS резолвинг
nslookup my-service.us-east-1.vpce.amazonaws.com
# Проверить connectivity с EC2 внутри VPC
curl -v http://my-service.us-east-1.vpce.amazonaws.com:8080/healthz Моніторинг Private Link
В AWS використовуйте CloudWatch metrics для endpoint — BytesIn, BytesOut, ActiveConnections. Налаштуйте алерти при зниженні кількості активних з'єднань. В Azure — логи потоків NSG та метрики Private Endpoint. В GCP — VPC flow logs. Рекомендуємо встановити поріг: якщо активні з'єднання падають нижче 50% від норми за 5 хвилин — спрацьовує оповіщення.
Порівняння Private Link, VPC Peering та VPN
| Критерій | Private Link | VPC Peering | VPN |
|---|---|---|---|
| Доступ до одного сервісу | Так | Ні (вся VPC) | Ні (вся мережа) |
| Трафік по магістралі провайдера | Так | Так | Ні (інтернет) |
| Складність налаштування | Середня | Низька | Висока |
| Безпека | Висока | Середня | Середня |
| Вартість | Безкоштовно (тільки за endpoint) | Безкоштовно | $0.05/GB |
Процес роботи та що входить
| Етап | Дії | Результат |
|---|---|---|
| Аналітика | Аудит VPC, вимог до ізоляції, вибір типу endpoint | Схема архітектури |
| Проєктування | Створення NLB, Endpoint Service, політик доступу | Terraform-конфігурація |
| Реалізація | Розгортання endpoint, налаштування DNS, Security Groups | Endpoint в VPC клієнта |
| Тестування | Перевірка connectivity, резолвінгу, навантажувальне тестування | Протокол тестів |
| Деплой | Інтеграція в CI/CD, документація | Runbook, інструкція для клієнта |
Входить: документація схеми, скрипти автоматизації Terraform/Ansible, навчання команди, підтримка 30 днів після запуску. Оцінимо проєкт — зв'яжіться з нами.
Строки орієнтовно
| Масштаб | Строк |
|---|---|
| Interface Endpoint до managed-сервісу (Secrets Manager, S3) | 1 день |
| Endpoint Service + NLB для власного сервісу | 2–3 дні |
| Multi-account PrivateLink з approval workflow | 3–5 днів |
Вартість розраховується індивідуально після аудиту архітектури. Замовте консультацію — ми підготуємо кошторис.
Типові помилки при налаштуванні Private Link
- Забути
private_dns_enabled = true— додаток не може резолвити DNS. - Не налаштувати Security Group для endpoint — трафік блокується.
- Використовувати VPC Peering для односервісного доступу — зайва поверхня атаки.
- Не обмежити
allowed_principalsв Endpoint Service — будь-який акаунт може підключитися. - Відсутність health check на NLB — endpoint може бути неактивним.
З багаторічним досвідом на ринку, 50+ проєктів з Private Link. Гарантуємо безпеку та відповідність best practices. Отримайте консультацію — оцінимо ваш сценарій.







