Amazon ANS-C01: Автоматизация, IaC и эксплуатация сети — Руководство по подготовке
Часть AWS Advanced Networking Specialty ANS-C01 — Руководство по подготовке. Практикуйтесь с проверенными ответами в центре экзаменов Amazon, или пройдите тесты на время на ExamRoll.io.
Основная концепция
Инфраструктура как код (Infrastructure as Code) для сетей в AWS превращает сетевую топологию, политики безопасности и маршрутизацию в декларативные шаблоны и детерминированные операции жизненного цикла. Шаблоны CloudFormation (AWS::EC2::VPC, AWS::EC2::Subnet, AWS::EC2::RouteTable, AWS::EC2::TransitGateway, AWS::EC2::TransitGatewayAttachment, AWS::ElasticLoadBalancingV2::LoadBalancer, AWS::EC2::VPCEndpoint, AWS::EC2::NetworkAcl, AWS::EC2::SecurityGroup) описывают желаемое состояние, в то время как API CloudFormation — операции CreateStack, UpdateStack, DeleteStack, DescribeStacks и ChangeSet — атомарно применяют изменения. Используйте вложенные стеки и модульные шаблоны для изоляции сетевых доменов (общие сервисы, VPC приложений для каждого аккаунта, зоны входящего/исходящего трафика) и StackSets для распространения согласованных сетевых стеков в рамках AWS Organizations. Обнаружение отклонений (DetectStackDrift) и наборы изменений (change sets) служат защитными механизмами, позволяя автоматизации обнаруживать изменения, внесённые в обход установленных процедур, и требовать их проверки человеком.
Автоматизация также должна охватывать те части сети, которые CloudFormation не может описать нативно или которые требуют обработчиков жизненного цикла (lifecycle hooks): совместное использование ресурсов между аккаунтами, интеграцию с локальной инфраструктурой и настройку хостов во время выполнения. Пользовательские ресурсы CloudFormation (на базе Lambda) или модули CloudFormation могут вызывать API, такие как CreateResourceShare (AWS RAM), для совместного использования Transit Gateway или подсети, или вызывать Systems Manager (SSM) SendCommand для внедрения сертификатов или политик маршрутизации в инстансы. Для Kubernetes в EKS, AWS Load Balancer Controller устанавливается через Helm и управляется с помощью аннотаций Service; CloudFormation может создавать роль IAM, OIDC-провайдера и объекты HelmRelease через AWS::EKS::Cluster и пользовательские ресурсы, но сопоставление IP-адресов подов с целевыми группами NLB во время выполнения обрабатывается контроллером.
Ключевые сервисы и конфигурация
Существуют ключевые сервисы и API AWS, которые вы будете постоянно использовать при автоматизации сетевых операций: CloudFormation (CreateStack, UpdateStack, DetectStackDrift), AWS Resource Access Manager (CreateResourceShare, AssociateResourceShare), AWS Transit Gateway (CreateTransitGateway, CreateTransitGatewayAttachment, CreateTransitGatewayRoute), Elastic Load Balancing V2 (CreateLoadBalancer, CreateTargetGroup, ModifyTargetGroupAttributes), AWS Lambda (CreateFunction, AddPermission, Invoke), Systems Manager (PutParameter, SendCommand, CreateDocument) и AWS Config (PutEvaluations, StartConfigurationRecorder). Эти сервисы формируют типичный стек автоматизации для создания безопасных и аудируемых сетей.
При проектировании шаблонов и автоматизации обращайте внимание на конкретные атрибуты ресурсов и аннотации контроллеров. Для балансировщиков нагрузки выбирайте правильный тип и атрибуты: NLB с TCP-слушателями сохраняет исходный IP-адрес и поддерживает Proxy Protocol v2 через CreateLoadBalancer/ModifyTargetGroupAttributes и установку “proxy_protocol_v2.enabled” для целевых групп; ALB (Application Load Balancer) терминирует TLS, вставляет заголовки X-Forwarded-For для IP-адресов клиентов и поддерживает gRPC/HTTP2 при настройке с HTTPS-слушателями. Для EKS вы используете аннотации, такие как service.beta.kubernetes.io/aws-load-balancer-type: “nlb” или аннотации Ingress/Service контроллера AWS Load Balancer Controller, чтобы управлять сквозной передачей (passthrough) или терминированием TLS и устанавливать тип цели (target type) в ip для прямого таргетинга подов. Для совместного использования ресурсов и сетей в нескольких аккаунтах вы будете использовать AWS RAM для предоставления доступа к Transit Gateway и CloudFormation StackSets в сочетании с ролями делегированного администратора для создания подключений (attachments) и предоставления доступа в аккаунтах-потребителях.
Паттерны проектирования и компромиссы
Два распространенных, но противоположных паттерна — это «звезда» (hub-and-spoke) с Transit Gateway и общий VPC (shared-VPC) через AWS RAM. «Звезда» с Transit Gateway централизует маршрутизацию, инспекцию трафика и связь между VPC; она хорошо масштабируется, поскольку подключения (attachments) и таблицы маршрутизации позволяют сегментировать сеть, и вы можете поделиться TGW с помощью RAM, чтобы разные аккаунты могли создавать подключения без полной передачи владения. Компромисс заключается в ограничениях на распространение маршрутов и количество таблиц маршрутизации: таблицы маршрутизации Transit Gateway и лимиты на подключения требуют планирования и могут создавать единые точки, где должна применяться политика (используйте несколько таблиц маршрутизации и AWS Network Firewall для изоляции трафика). Общий VPC (VPC, разделяемый через AWS RAM) размещает подсети в аккаунте-хосте и позволяет аккаунтам-потребителям запускать ресурсы в этих подсетях, что упрощает централизованный контроль безопасности для сетевого взаимодействия, но снижает автономию на уровне аккаунта и усложняет изоляцию сетей для отдельных бизнес-юнитов, поскольку требует тщательного управления владением группами безопасности и границами IAM.
Для входящего трафика (ingress) и терминирования TLS необходимо найти баланс между потребностью в сквозном шифровании, масштабируемостью и сохранением IP-адреса клиента. Если вам требуется терминирование TLS на балансировщике нагрузки (для WAF, централизации сертификатов и HTTP-маршрутизации), ALB — это правильный инструмент; он добавляет заголовок X-Forwarded-For, чтобы логи приложений могли фиксировать IP-адреса клиентов, а также поддерживает маршрутизацию на основе пути и хоста к нескольким целевым группам. Если вам требуется настоящее сквозное шифрование TLS или mTLS, при котором балансировщик не должен расшифровывать трафик, используйте NLB в режиме TCP для сквозной передачи TLS на бэкенд-узлы (под или инстанс) и настройте target type в ip и externalTrafficPolicy: Local в Kubernetes для сохранения исходного IP-адреса. Для тысяч одновременных двунаправленных gRPC-соединений с mTLS, NLB, перенаправляющий «сырой» TLS на порты подов, в сочетании с подами, терминирующими mTLS, обеспечивает масштабируемость и настоящее сквозное шифрование, при этом используя аннотации AWS Load Balancer Controller для создания соответствующих слушателей и целевых групп NLB.
Распространенные ошибки и критерии выбора
Частая ошибка — путать место терминирования TLS с требованиями к IP-адресу клиента: ALB предоставляет заголовок X-Forwarded-For, когда терминирует TLS, но не сохраняет исходный IP-адрес для целевого ресурса, как это делает NLB. Если вам нужны и функции ALB (маршрутизация по хосту/пути, WAF), и исходный IP-адрес источника на бэкенде, рассмотрите возможность использования ALB для терминирования HTTP и перенаправления на обратные прокси или sidecar-контейнеры, которые восстанавливают IP-адреса источников из X-Forwarded-For, или используйте архитектуру, в которой NLB пробрасывает TLS-трафик к сервисам, выполняющим mTLS, и перекладывает HTTP-маршрутизацию на внутрикластерные прокси. Другая распространенная ошибка — неверная настройка межаккаунтных разрешений: при совместном использовании Transit Gateway или другого сетевого ресурса с помощью RAM убедитесь, что вы используете явное предоставление ресурса (resource share) и правильную IAM-роль и принципала RAM; в противном случае вы получите непрозрачные ошибки «permission denied».
Что касается автоматизации соответствия требованиям, не храните приватные ключи или материалы центра сертификации (ЦС) в незашифрованном виде в виде простого текста. Используйте SecureString в SSM Parameter Store с ключом KMS, у которого минимальная политика ключа, разрешающая доступ только необходимым ролям и принципалам. Используйте управляемые правила AWS Config (например, vpc-flow-logs-enabled, restricted-common-ports, security-group-rule-check), а там, где управляемые правила не покрывают ваши критерии, реализуйте правила Config на основе Lambda, которые вызывают PutEvaluations. Исправление должно быть автоматизировано с помощью документов SSM Automation или Systems Manager Run Command, которые может вызывать действие исправления Config, но всегда предусматривайте путь оповещения и утверждения для высокорискованных изменений.
Практическая задача: Сценарий использования
Компания: ApexTelemetrics — задача: предоставить глобально доступный gRPC-сервис на базе EKS, который требует настоящей сквозной взаимной аутентификации TLS (клиент и сервер аутентифицируются с помощью mTLS), поддерживает тысячи одновременных долгоживущих соединений по TCP 443, должен автоматически масштабировать поды, а также обеспечивать автоматизированное и аудируемое распространение и ротацию сертификатов.
Подход:
- Подготовка сети и балансировщика нагрузки с помощью CloudFormation: создайте NLB через
undefined
, настроенный с TCP-прослушивателем на порту 443 и целевыми группами с
undefined
, установленным в «ip», и проверками работоспособности по TCP. Используйте CloudFormation
undefined
и модульные вложенные стеки для VPC, подсетей и NLB. Используйте аннотации AWS Load Balancer Controller в сервисе EKS (
undefined
,
undefined
), чтобы каждый сервис создавал целевую группу NLB, направленную непосредственно на поды. 2) Обеспечение сквозной передачи TLS и терминирования mTLS на подах: настройте сервис EKS для перенаправления TCP 443 напрямую на порты подов; реализуйте sidecar-контейнер или прокси Envoy внутри каждого пода, который выполняет терминирование mTLS с клиентом и обеспечивает взаимную аутентификацию. Установите
undefined
в сервисе, чтобы при необходимости сохранялся IP-адрес источника, и используйте автомасштабирование на уровне подов (Horizontal Pod Autoscaler) вместе с Cluster Autoscaler для совместного масштабирования узлов и подов. 3) Автоматизация жизненного цикла и распространения сертификатов: храните приватные ключи ЦС и серверных сертификатов в SSM Parameter Store в виде SecureString, зашифрованных ключом KMS. Создайте пользовательский ресурс (custom resource) в CloudFormation на основе AWS Lambda для создания параметров SSM во время создания стека (
undefined
с соответствующей IAM-ролью, затем пользовательский ресурс CloudFormation для вызова
undefined
). Используйте SSM Run Command или неизменяемый DaemonSet, который извлекает секреты из SSM через IAM-роль, привязанную к поду (через IRSA), для внедрения сертификатов в sidecar-контейнер. Для ротации запланируйте функции Lambda (
undefined
- правило EventBridge) для генерации новых сертификатов, вызова
undefined
и используйте SSM или Kubernetes Jobs для выполнения плавающих перезапусков (rolling restarts). 4) Соответствие требованиям и аудит: включите правила AWS Config (управляемые правила, такие как vpc-flow-logs-enabled, и пользовательские правила на основе Lambda, использующие
undefined
) для проверки того, что прослушиватели NLB являются TCP и что ни один ALB не терминирует TLS для этого сервиса. Настройте исправление в Config для вызова документов SSM Automation при обнаружении неверной конфигурации и отправляйте результаты в AWS Security Hub и CloudWatch Events. Обоснование со стороны AWS: NLB в режиме TCP обеспечивает настоящую сквозную передачу TLS, необходимую для end-to-end mTLS, и масштабируется до тысяч одновременных соединений с небольшой нагрузкой на CPU балансировщика в расчете на одно соединение. Нацеливание на поды через
undefined
устраняет лишний хоп (hop) и сохраняет отзывчивость автомасштабирования. Хранение и ротация ключей в SSM Parameter Store, защищенном KMS, обеспечивает централизованное, аудируемое управление секретами с контролем через IAM, а использование CloudFormation в связке с пользовательскими ресурсами Lambda и EventBridge гарантирует, что весь жизненный цикл кодифицирован, воспроизводим и наблюдаем.
← Производительность сети и мониторинг · Все домены · Контейнерные и бессерверные сети →
Отработать эти вопросы → · Тесты на время на ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Сдайте экзамен →