Навіщо нам потрібна приватна підмережа в VPC?


127

У налаштуваннях AWS VPC є 4 сценарії . Але давайте розглянемо ці два:

  • Сценарій 1: 1 загальнодоступна підмережа.
  • Сценарій 2: 1 загальнодоступна підмережа та 1 приватна підмережа.

Оскільки будь-який екземпляр, запущений у загальнодоступній підмережі, не має EIP (якщо він не призначений), він вже не може бути адресований через Інтернет. Тоді:

  • Чому потрібна приватна підмережа?
  • Які саме відмінності між приватною та публічною підмережами?

4
Приватна підмережа, навіть після присвоєння загальнодоступного ІС машинам всередині, все ще недоступна для загального доступу до Інтернету. Я створюю налаштування VPC, наприклад, з веб-сервером у загальнодоступній підмережі та з моєю базовою базою даних у приватній підмережі. Я можу підключитися до шлюзу клієнтів для доступу до машин як приватної, так і публічної підмережі.
користувач602525

Відповіді:


239

Оновлення: наприкінці грудня 2015 року AWS оголосила про нову функцію - керований NAT шлюз для VPC . Цей необов'язковий сервіс забезпечує альтернативний механізм для випадків VPC в приватній підмережі для доступу до Інтернету, де раніше загальним рішенням був екземпляр EC2 у публічній підмережі в межах VPC, функціонуючи як "екземпляр NAT", забезпечуючи переклад мережевих адрес ( технічно - переклад адрес порту ) для примірників інших приватних підмереж, що дозволяє цим машинам використовувати публічну IP-адресу екземпляра NAT для виходу з Інтернету.

Новий керований сервіс NAT принципово не змінює застосовність наступної інформації, однак ця опція не розглядається у наведеному нижче змісті. Екземпляр NAT все ще може використовуватися, як описано, або замість цього може бути надана служба керованого NAT шлюзу. Подана розширена версія цієї відповіді, що містить більше інформації про NAT Gateway та про те, як він порівнює з екземпляром NAT, оскільки вони мають відношення до парадигми приватної / публічної підмережі в VPC.

Зауважте, що Internet Gateway та NAT Gateway - це дві різні функції. Усі конфігурації VPC з доступом до Інтернету матимуть віртуальний об'єкт Internet Gateway.


Щоб зрозуміти різницю між "приватною" та "публічною" підмережами в Amazon VPC, потрібно зрозуміти, як працюють маршрутизація IP та трансляція мережевих адрес (NAT) взагалі та як вони спеціально реалізовані в VPC.

Основна диференціація між публічною та приватною підмережею в VPC визначається тим, яким є маршрут за замовчуванням цієї підмережі, у таблицях маршрутизації VPC.

Ця конфігурація, в свою чергу, диктує дійсність використання або не використання публічних IP-адрес у випадках у цій конкретній підмережі.

Кожна підмережа має рівно один маршрут за замовчуванням, який може бути лише однією з двох речей:

  • об’єкт "Інтернет-шлюз" VPC у випадку "загальнодоступної" підмережі, або
  • пристрій NAT - тобто або шлюз NAT, або екземпляр EC2, який виконує роль "екземпляра NAT", у випадку "приватної" підмережі.

Інтернет - шлюз робить ніякого перетворення мережевих адрес для примірників без яких IP - адрес , тому екземпляр без IP адреси громадськості не може підключитися назовні до Інтернету - робити такі речі , як завантаження оновлень програмного забезпечення, або доступ до інших AWS ресурсів , таким як S3 1 і SQS - якщо маршрут за замовчуванням у його підмережі VPC є об'єктом Internet Gateway. Отже, якщо ви є екземпляром у "загальнодоступній" підмережі, тоді вам потрібна загальнодоступна IP-адреса, щоб зробити значну кількість речей, які зазвичай повинні робити сервери.

Для випадків із приватною IP-адресою існує альтернативний вихідний доступ до Інтернету. Тут надходять мережеві переклади2 і екземпляр NAT.

Машини приватної підмережі можуть отримувати доступ до Інтернету, оскільки маршрут за замовчуванням у приватній підмережі не є об’єктом VPC "Internet Gateway" - це екземпляр EC2, налаштований як екземпляр NAT.

Екземпляр NAT - це екземпляр у загальнодоступній підмережі з загальнодоступним IP-адресою та певною конфігурацією. Є AMI, які попередньо створені для цього, або ви можете створити свій власний.

Коли машини з приватною адресою надсилають трафік назовні, трафік передається VPC до екземпляра NAT, який замінює вихідну IP-адресу в пакеті (приватну IP-адресу приватної машини) своєю власною загальнодоступною IP-адресою, передає трафік. з Інтернету, приймає пакети відповідей і пересилає їх назад на приватну адресу машини-виробника. (Він також може переписати вихідний порт, і в будь-якому випадку він запам'ятовує відображення, щоб він знав, яка внутрішня машина повинна отримувати пакети відповідей). Екземпляр NAT не дозволяє жодному "несподіваному" вхідному трафіку діставатися до приватних примірників, якщо тільки це не було спеціально налаштовано для цього.

Таким чином, під час доступу до зовнішнього ресурсу Інтернету з приватної підмережі, трафік проходить через екземпляр NAT і, здається, до місця призначення, походить із загальнодоступної IP-адреси інстанції NAT ... так що трафік відповідей повертається до екземпляра NAT. Ні група безпеки, призначена для екземпляра NAT, ні група безпеки, призначена приватному екземпляру, не повинні бути налаштовані так, щоб "дозволити" цей трафік відповідей, оскільки групи безпеки є статними. Вони розуміють, що трафік відповідей пов'язаний із сеансами, що виникли всередині країни, тому він дозволений автоматично. Несподіваний трафік, звичайно, відмовляється, якщо група безпеки не налаштована на дозвіл.

На відміну від звичайної маршрутизації IP, де ваш шлюз за замовчуванням знаходиться у вашій підмережі, спосіб його роботи в VPC відрізняється: екземпляр NAT для будь-якої приватної підмережі завжди знаходиться в іншій підмережі, а інша підмережа завжди є публічною підмережею, оскільки екземпляр NAT повинен мати відкритий зовнішній IP, і його шлюзом за замовчуванням повинен бути об’єкт VPC "Internet Gateway".

Аналогічно ... ви не можете розгорнути примірник із загальнодоступним IP в приватній підмережі. Це не працює, оскільки маршрут за замовчуванням у приватній підмережі - це (за визначенням) екземпляр NAT (який виконує NAT у трафіку), а не об'єкт Internet Gateway (що не робить). Вхідний трафік з Інтернету впливав би на загальнодоступну IP-адресу цього примірника, але відповіді намагалися прокласти назовні через екземпляр NAT, який би або скинув трафік (оскільки він буде складатися з відповідей на з'єднання, про які він не знає, тому вони вважатиметься недійсним) або переписував би трафік відповіді на використання власної загальнодоступної IP-адреси, яка не працювала б, оскільки зовнішнє походження не приймало б відповідей, що надходили з IP-адреси, відмінної від тієї, з якою вони намагалися ініціювати зв’язок. .

По суті, тоді "приватні" та "публічні" позначення насправді не стосуються доступності чи недоступності з Інтернету. Йдеться про види адрес, які будуть присвоєні примірникам цієї підмережі, що актуально через необхідність перекладати - або уникати перекладу - тих IP-адрес для взаємодії в Інтернеті.

Оскільки VPC має неявні маршрути від усіх підмереж VPC до всіх інших підмереж VPC, маршрут за замовчуванням не грає ролі у внутрішньому трафіку VPC. Екземпляри з приватними IP-адресами підключатимуться до інших приватних IP-адрес у VPC "від" їх приватної IP-адреси, а не "від" їхньої загальнодоступної IP-адреси (якщо у неї є) ... до тих пір, поки адреса призначення буде іншою приватною адресою в межах VPC.

Якщо ваші примірники з приватними IP-адресами ні за яких обставин не потребують вихідного інтернет-трафіку, вони технічно можуть бути розгорнуті в "загальнодоступній" підмережі і все ще будуть недоступними для Інтернету ... але за такої конфігурації, їм неможливо породжувати вихідний трафік до Інтернету, який включає з'єднання з іншими інфраструктурними службами AWS, знову ж таки, як S3 1 або SQS.


1. Зокрема, щодо S3 сказати, що завжди потрібен доступ до Інтернету - це надмірне спрощення, яке, ймовірно, зростатиме з часом і поширюватиметься на інші служби AWS, оскільки можливості VPC продовжують зростати та розвиватися. Існує порівняно нова концепція, яка називається VPC Endpointщо дозволяє вашим екземплярам, ​​включаючи лише приватні IP-адреси, безпосередньо отримувати доступ до S3 з вибраних підмереж в VPC, не торкаючись "Інтернету" і не використовуючи примірник NAT або шлюз NAT, але це вимагає додаткової конфігурації, і це доступний лише для доступу до відра у тому ж регіоні AWS, що і ваш VPC. За замовчуванням S3 - це єдиний сервіс, який виявив можливість створення кінцевих точок VPC - доступний лише зсередини VPC через Інтернет. Коли ви створюєте кінцеву точку VPC, це створює список префіксів (pl-xxxxxxxx), яку ви можете використовувати у своїх таблицях маршрутів VPC, щоб надсилати трафік, пов'язаний для цієї конкретної послуги AWS, безпосередньо до служби через віртуальний об'єкт "VPC Endpoint". Він також вирішує проблему обмеження вихідного доступу до S3 для конкретного екземпляра, оскільки список префіксів може використовуватися у вихідних групах безпеки, замість цільової IP-адреси або блоку призначення, а кінцева точка VPC S3 може бути предметом додаткових заяв про політику , обмежуючи доступ до ковша зсередини, за бажанням.

2. Як зазначено в документації, тут фактично обговорюється порт, а також переклад мережевих адрес. Загальноприйнято, хоча і технічно трохи неточно, називати комбіновану операцію "NAT". Це дещо схоже на те, як багато хто з нас схильні говорити "SSL", коли ми маємо на увазі "TLS". Ми знаємо, про що говоримо, але не використовуємо найбільш правильне слово для його опису. "Примітка. У цій документації ми використовуємо термін NAT для дотримання загальної практики ІТ, хоча фактична роль NAT-пристрою - це і переклад адрес, і переклад адрес порту (PAT)."


16
Детальна відповідь, але я все ще дивуюсь. Яка перевага сервера в приватній підмережі з екземпляром NAT та публічною підмережею сервера aa із суворою політикою безпеки?
abhillman

13
@abhillman справа не в перевазі. Йдеться про те, як працює мережа в VPC. Усі екземпляри даної підмережі повинні використовувати той самий шлюз за замовчуванням, який буде або віртуальним об’єктом "Інтернет-шлюз", який не буде робити NAT, або це буде екземпляр NAT, який "не зробить" NAT . Якщо всі ваші машини не мають загальнодоступних IP-адрес або жодна з них не потребує, вам потрібно буде обидва типи підмереж. Якщо все є веб-сервером, орієнтованим на Інтернет, вам, можливо, знадобиться лише загальнодоступна підмережа, і при правильній конфігурації безпеки немає недоліків.
Майкл - sqlbot

1
Насправді тепер можна отримати доступ до деяких ресурсів AWS, таких як S3, з VPC aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3 .
avloss

2
@avloss дякую за те, що я повернув мою увагу до цього питання та його відповідність цій відповіді. Минуло майже два роки без багато редагування, і ти маєш рацію - все продовжує розвиватися. Я оновлю це, щоб згадати кінцеві точки VPC.
Майкл - sqlbot

4
@VirtualJasper ви не повинні хотіти , щоб використовувати все-публічні адреси. Використання приватних IPv4-адрес, де це можливо, є найкращою практикою. Це зменшує вашу атакуючу поверхню. Це забезпечує кращий контроль виходу. Адресний простір IPv4 є дефіцитним і стає тим більше, є етичний аспект споживання цього ресурсу більше, ніж потрібно. Далі здається логічним, що якщо ви продовжуєте запитувати підтримку AWS для збільшення дозволеної кількості адрес, вони в якийсь момент почнуть задавати питання. VPC був розроблений для роботи таким чином. Чи можете ви підключити систему та використовувати всі відкриті IP-адреси? Так. Це гарна ідея? №
Майкл - sqlbot

27

Я б запропонував інший такт - канаву "приватних" підмереж та NAT-екземпляри / шлюзи. Вони не потрібні. Якщо ви не хочете, щоб машина була доступною з Інтернету, не ставте її до групи безпеки, яка дозволяє такий доступ.

Викидаючи примірник / шлюз NAT, ви виключаєте поточну вартість екземпляра / шлюзу, і ви усуваєте обмеження швидкості (будь то 250 Мбіт або 10 Гбіт).

Якщо у вас є машина, яка також не потребує прямого доступу до Інтернету (і я б запитав, як ви її виправляєте *), тоді, не призначайте загальнодоступну IP-адресу.

* Якщо відповідь тут - це якийсь проксі, ну ви несете накладні витрати, але кожен свій.


5
Я не міг більше погодитися. Чим більше я працюю з питаннями, тим менше використовую для приватних підмереж. Він більше схожий на реліквію, як виглядали локальні мережі і що їх існування полягає в основному в знайомстві. Я впевнений, що є випадки, коли вони все-таки можуть бути дійсними, але, загалом, я кажу, що не використовуйте їх. Те, що вгорі (і дуже довга відповідь) на це питання не стосується актуального питання, є свідченням їх надмірності.
Карл

1
Я повністю згоден з теорією тут, але на практиці я виявив, що AWS за замовчуванням обмежує вас до 20 EIP в кожному регіоні, і я скептично налаштований збільшити цю межу, щоб дозволити сотні публічних IPv4-адрес. Вони є дефіцитними ресурсами в Інтернеті.
Нік

1
@ Nic Вам не потрібні EIP, пам’ятайте, що це стосується канавки NAT - нас не хвилює, яким є публічний IP будь-якої безликої машини, і нам не байдуже, чи вона зміниться.
Філ

1
Сьогодні AWS випустила IPv6 у всьому світі. Нехай помер IPv4. :-)
Філ

3
Вилучення приватних підмереж по суті передбачає, що помилок ніколи не буває. Десятки випадків і сотні правил безпеки, що перетинають між собою, та численні співробітники, які беруть участь у технічному обслуговуванні, не можуть оминути увагою можливість того, що хтось випадково відкриє порт у світі. Оборонна поза, що обмежує доступ громадськості за допомогою дизайну до кількох випадків, які потребують цього, є кращим підходом до безпеки. Для тих із вас, хто непогрішний, гойдайтеся. Для решти нас, простих смертних, помилка на стороні обережності не така страшна ідея.
Джим Уокер

23

Я не маю репутації додавати коментар до відповіді Майкла вище, отже, додаючи мій коментар як відповідь.

Варто зазначити, що шлюз, керований AWS, у 3 рази дорожчий на дату порівняно із запуском власного екземпляра. Звичайно, якщо припустити, що вам потрібен лише один екземпляр NAT (тобто у вас немає декількох екземплярів NAT, налаштованих для відмови тощо), що, як правило, справедливо для більшості сценаріїв малого та середнього використання. Припускаючи щомісячну передачу даних 100 Гб через NAT-шлюз,

Щомісячна вартість керованого екземпляру NAT = $ 33,48 / місяць ($ 0,045 / годину * 744 години на місяць) + 4,50 $ (0,045 $ за ГБ, оброблювані дані * 100 ГБ) + 10 $ ($ 10,10 / ГБ стандартні тарифи за передачу даних AWS за всі дані, передані через NAT шлюз) = $ 47,98

t2.nano екземпляр, сконфігурований як екземпляр NAT = 4,84 дол. США на місяць (0,0065 дол. США * 744 години на місяць) + 10 дол.

Це, звичайно, змінюється, коли ви звертаєтесь до надмірних екземплярів NAT, оскільки на шлюзі NAT, керованого AWS, є вбудована надмірність для високої доступності. Якщо ви не турбуєтесь про зайві $ 33 / місяць, то керований екземпляр NAT, безумовно, варто зменшити головний біль, коли не потрібно підтримувати інший екземпляр. Якщо ви використовуєте екземпляр VPN (наприклад, OpenVPN) для доступу до своїх примірників в VPC, ви можете просто налаштувати цей екземпляр, щоб він також виконував роль шлюзу NAT, і тоді вам не доведеться підтримувати додатковий екземпляр лише для NAT ( хоча деякі люди можуть нахмуритися ідеєю поєднання VPN та NAT).


4
Погоджено - однак із екземпляром t2.nano ви побачите максимальну пропускну здатність, можливо, 250 Мбіт / с, порівняно з кричущим піком 10 Гбіт / с від шлюзу NAT. Не зрозумійте мене неправильно, я також вважаю, що ціна трохи крута, і є інші обмеження - я все ще використовую екземпляри NAT практично скрізь ... але, чесно кажучи, ви частково платите за деякі досить серйозні сирі комутаційні пакети живлення та мережеве з'єднання із шлюзом.
Michael - sqlbot

1
Але чому NAT Gateway такий дорогий? Чи потрібно багато комп'ютерних ресурсів для перекладу адрес? Я можу зрозуміти, що для дійсно величезного застосування NAT може передавати багато запитів із VPC, але якщо говорити про звичайний середній бізнес та невеликі проекти $ 0,045 за годину, а кожен ГБ досить завищений.
Сергій Черепанов

15

Відповідь Майкла - sqlbot робить неявне припущення, що потрібні приватні IP-адреси. Я вважаю, що варто засумніватися в цьому припущенні - чи нам взагалі потрібно використовувати приватні IP-адреси? Принаймні один коментатор задав те саме питання.

Яка перевага сервера в приватній підмережі з екземпляром NAT [проти] сервера [в a] публічній підмережі із суворою політикою безпеки? - abhillman 24 червня 14 о 23:45

Уявіть собі сценарій, коли ви використовуєте VPC і призначаєте загальнодоступні IP-адреси для всіх своїх екземплярів EC2. Не хвилюйтеся, це не означає, що вони обов'язково доступні через Інтернет, тому що ви використовуєте групи безпеки для обмеження доступу точно так само, як це працювало з EC2 classic. Використовуючи загальнодоступні IP-адреси, ви маєте перевагу в тому, що зможете легко піддавати певні послуги обмеженій аудиторії без необхідності використовувати щось на зразок ELB. Це звільняє вас від необхідності налаштування екземпляра NAT або шлюзу NAT. А оскільки вам потрібно вдвічі більше підмереж, ви можете вибрати менший розподіл CIDR для свого VPC або ви можете зробити більші підмережі з однаковим розміром VPC. А менше підмереж означає, що ви також платите менше за трафік між АЗ.

То чому б ми цього не зробили? Чому AWS каже, що найкращою практикою є використання приватних ІС?

Amazon Web Services має обмежений запас публічних IPv4-адрес, оскільки Інтернет в цілому має обмежений доступ до публічних IPv4-адрес. Вам цікаво використовувати приватні IP-адреси, які фактично необмежені, а не надмірно споживають обмежені публічні IPv4-адреси. Ви можете побачити деякі докази цього в тому, як AWS ціни на Elastic IP; EIP, приєднаний до примірника, є безкоштовним, але невикористаний EIP коштує грошей.

Але заради аргументу, припустимо, що нас не хвилює дефіцит загальнодоступних IPv4 адрес в Інтернеті. Адже моя заява особлива. Що буде далі?

Є лише два способи приєднати публічну IP-адресу до екземпляра EC2 у VPC.

1. Асоційована публічна IP-адреса

Ви можете запитувати публічну IP-адресу під час запуску нового екземпляра EC2. Цей параметр відображається як прапорець у консолі, як прапор --associate-public-ip-адреси при використанні aws-cli, і як прапор AssociatePublicIpAddress на вбудованому об’єкті мережевого інтерфейсу при використанні CloudFormation. У будь-якому випадку публічна IP-адреса призначається eth0(DeviceIndex = 0). Цей підхід можна використовувати лише при запуску нового примірника. Однак це має деякі недоліки.

Недоліком є ​​те, що зміна групи захисту екземпляра, який використовує вбудований мережевий інтерфейс, змусить негайно замінити екземпляр, принаймні, якщо ви використовуєте CloudFormation.

Ще одним недоліком є ​​те, що присвоєна таким чином публічна IP-адреса втрачається при зупинці примірника.

2. Еластичний IP

Загалом, переважним підходом є еластичні ІС, оскільки вони безпечніші. Ви гарантовано продовжуєте використовувати ту саму IP-адресу, ви не ризикуєте випадково видалити будь-які екземпляри EC2, ви можете будь-коли вільно приєднати / зняти Elastic IP, і у вас є свобода змінювати групи безпеки, застосовані до ваших екземплярів EC2.

... Але AWS обмежує вас до 5 EIP на регіон. Ви можете запитувати більше, і ваш запит може бути задоволений. Але AWS так само ймовірно може відмовити в цьому запиті, виходячи з міркувань, про які я згадував вище. Тому ви, мабуть, не хочете покладатися на EIP, якщо плануєте коли-небудь масштабувати свою інфраструктуру понад 5 екземплярів EC2 на регіон.

На закінчення, використання загальнодоступних IP-адрес має певні переваги, але ви зіткнетесь з адміністративними проблемами чи масштабуванням, якщо ви будете намагатися використовувати лише публічні IP-адреси. Сподіваємось, це допомагає проілюструвати та пояснити, чому найкращі практики такі, якими вони є.


3
Межа за замовчуванням для EIP - це фактично 5 для регіону , а не 20. "Зрештою, моя програма особлива". Це речення заслуговує на власний підсумок.
Майкл - sqlbot

4
Звідки виникла думка про те, що ви не можете змінити групи безпеки на ходу для машини з відкритим IP-адресою, яка не є EIP? Це просто неправда!
Філ

1
@Phil Правильно. Це твердження хибне. Сказавши, що ви не можете змінити групу безпеки екземпляра, який має приєднану до нього загальнодоступну IP-адресу, це нівелює всю його відповідь. Я знаю, що це може бути суворо, але як можна ввести в оману читачів брехливими твердженнями, які лежать в основі вашої публікації. У будь-якому випадку я згоден з Nic, що ви можете викопати приватні підмережі та просто використовувати загальнодоступні з належним налаштуванням брандмауера,
Geo C.

1
Зараз я видалив помилкові твердження про неможливість зміни групи безпеки.
JP

Деякі з цих тверджень все ще є;)
Тім Малоун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.