AWS - Basic Information
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
В AWS є кореневий обліковий запис, який є батьківським контейнером для всіх облікових записів вашої організації. Однак вам не потрібно використовувати цей обліковий запис для розгортання ресурсів, ви можете створити інші облікові записи, щоб розділити різні AWS інфраструктури між ними.
Це дуже цікаво з точки зору безпеки, оскільки один обліковий запис не зможе отримати доступ до ресурсів з іншого облікового запису (якщо спеціально не створені мости), тому таким чином ви можете створити межі між розгортаннями.
Отже, в організації є два типи облікових записів (ми говоримо про облікові записи AWS, а не про облікові записи користувачів): один обліковий запис, який призначений як обліковий запис управління, і один або кілька облікових записів учасників.
Обліковий запис управління (кореневий обліковий запис) - це обліковий запис, який ви використовуєте для створення організації. З облікового запису управління організації ви можете зробити наступне:
Створювати облікові записи в організації
Запрошувати інші існуючі облікові записи до організації
Видаляти облікові записи з організації
Керувати запрошеннями
Застосовувати політики до сутностей (корені, ОУ або облікові записи) в межах організації
Увімкнути інтеграцію з підтримуваними AWS сервісами для надання функціональності сервісу для всіх облікових записів в організації.
Можливо увійти як кореневий користувач, використовуючи електронну пошту та пароль, які використовувалися для створення цього кореневого облікового запису/організації.
Обліковий запис управління має обов'язки облікового запису платника і відповідає за оплату всіх витрат, які накопичуються учасниками. Ви не можете змінити обліковий запис управління організації.
Облікові записи учасників складають всі інші облікові записи в організації. Обліковий запис може бути учасником лише однієї організації одночасно. Ви можете прикріпити політику до облікового запису, щоб застосувати контролі лише до цього одного облікового запису.
Облікові записи учасників повинні використовувати дійсну електронну адресу і можуть мати ім'я, загалом вони не зможуть керувати виставленням рахунків (але їм можуть надати доступ до цього).
Облікові записи можна групувати в Організаційні одиниці (OU). Таким чином, ви можете створювати політики для Організаційної одиниці, які будуть застосовані до всіх дочірніх облікових записів. Зверніть увагу, що OU може мати інші OU як дочірні.
Політика контролю послуг (SCP) - це політика, яка визначає послуги та дії, які користувачі та ролі можуть використовувати в облікових записах, на які впливає SCP. SCP схожі на політики дозволів IAM, за винятком того, що вони не надають жодних дозволів. Натомість SCP визначають максимальні дозволи для організації, організаційної одиниці (OU) або облікового запису. Коли ви прикріплюєте SCP до кореня вашої організації або OU, SCP обмежує дозволи для суб'єктів у членських облікових записах.
Це є ЄДИНИМ способом, яким навіть кореневий користувач може бути зупинений від виконання певних дій. Наприклад, його можна використовувати, щоб зупинити користувачів від відключення CloudTrail або видалення резервних копій. Єдиний спосіб обійти це - також скомпрометувати майстер-обліковий запис, який налаштовує SCP (майстер-обліковий запис не може бути заблокований).
Зверніть увагу, що SCP лише обмежують суб'єктів у обліковому записі, тому інші облікові записи не підлягають впливу. Це означає, що наявність SCP, яка забороняє s3:GetObject
, не зупинить людей від доступу до публічного S3 бакету у вашому обліковому записі.
Приклади SCP:
Повна заборона кореневого облікового запису
Дозволити лише конкретні регіони
Дозволити лише сервіси зі списку дозволених
Заборонити GuardDuty, CloudTrail та S3 Public Block Access від
вимкнення
Заборонити ролі безпеки/реагування на інциденти від видалення або
модифікації.
Заборонити видалення резервних копій.
Заборонити створення користувачів IAM та ключів доступу
Знайдіть приклади JSON за адресою https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html
Ідентифікатор ресурсу Amazon (ARN) - це унікальна назва, яку має кожен ресурс всередині AWS, вона складається так:
Зверніть увагу, що в AWS є 4 розділи, але лише 3 способи їх виклику:
AWS Standard: aws
AWS China: aws-cn
AWS US public Internet (GovCloud): aws-us-gov
AWS Secret (US Classified): aws
IAM - це сервіс, який дозволяє вам керувати Аутентифікацією, Авторизацією та Контролем доступу у вашому обліковому записі AWS.
Аутентифікація - Процес визначення особи та перевірки цієї особи. Цей процес можна поділити на: Ідентифікацію та перевірку.
Авторизація - Визначає, до чого може отримати доступ особа в системі після її аутентифікації.
Контроль доступу - Метод і процес надання доступу до захищеного ресурсу.
IAM можна визначити за його здатністю керувати, контролювати та регулювати механізми аутентифікації, авторизації та контролю доступу особистостей до ваших ресурсів у вашому обліковому записі AWS.
Коли ви вперше створюєте обліковий запис Amazon Web Services (AWS), ви починаєте з єдиної особи для входу, яка має повний доступ до всіх сервісів та ресурсів AWS в обліковому записі. Це кореневий користувач облікового запису AWS, до якого ви отримуєте доступ, увійшовши з електронною адресою та паролем, які ви використовували для створення облікового запису.
Зверніть увагу, що новий адміністратор матиме менше прав, ніж кореневий користувач.
З точки зору безпеки рекомендується створювати інших користувачів і уникати використання цього.
Користувач IAM - це сутність, яку ви створюєте в AWS, щоб представити особу або додаток, який використовує його для взаємодії з AWS. Користувач в AWS складається з імені та облікових даних (пароль та до двох ключів доступу).
Коли ви створюєте користувача IAM, ви надаєте йому дозволи, роблячи його членом групи користувачів, до якої прикріплені відповідні політики дозволів (рекомендується), або безпосередньо прикріплюючи політики до користувача.
Користувачі можуть мати увімкнене MFA для входу через консоль. API токени користувачів з увімкненим MFA не захищені MFA. Якщо ви хочете обмежити доступ ключів API користувачів за допомогою MFA, вам потрібно вказати в політиці, що для виконання певних дій MFA має бути присутнім (приклад тут).
ID ключа доступу: 20 випадкових великих алфавітно-цифрових символів, таких як AKHDNAPO86BSHKDIRYT
ID секретного ключа доступу: 40 випадкових великих і малих символів: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (неможливо відновити втрачені ID секретного ключа доступу).
Коли вам потрібно змінити ключ доступу, ви повинні дотримуватися цього процесу: Створіть новий ключ доступу -> Застосуйте новий ключ до системи/додатку -> позначте оригінальний як неактивний -> протестуйте та перевірте, що новий ключ доступу працює -> видаліть старий ключ доступу
Вона використовується для створення додаткового фактора для аутентифікації на додаток до ваших існуючих методів, таких як пароль, тим самим створюючи багатофакторний рівень аутентифікації. Ви можете використовувати безкоштовний віртуальний додаток або фізичний пристрій. Ви можете безкоштовно використовувати такі додатки, як Google Authenticator, щоб активувати MFA в AWS.
Політики з умовами MFA можуть бути прикріплені до наступного:
Користувача або групи IAM
Ресурсу, такому як кошик Amazon S3, черга Amazon SQS або тема Amazon SNS
Політики довіри ролі IAM, яку може прийняти користувач
Якщо ви хочете отримати доступ через CLI до ресурсу, який перевіряє MFA, вам потрібно викликати GetSessionToken
. Це надасть вам токен з інформацією про MFA.
Зверніть увагу, що облікові дані AssumeRole
не містять цю інформацію.
Як вказано тут, існує багато різних випадків, коли MFA не може бути використано.
IAM група користувачів - це спосіб прикріплення політик до кількох користувачів одночасно, що може спростити управління дозволами для цих користувачів. Ролі та групи не можуть бути частиною групи.
Ви можете прикріпити політику на основі ідентичності до групи користувачів, щоб всі користувачі в групі користувачів отримали дозволи політики. Ви не можете ідентифікувати групу користувачів як Principal
у політиці (такій як політика на основі ресурсу), оскільки групи стосуються дозволів, а не аутентифікації, а принципи є аутентифікованими сутностями IAM.
Ось деякі важливі характеристики груп користувачів:
Група користувачів може містити багато користувачів, а користувач може належати до кількох груп.
Групи користувачів не можуть бути вкладеними; вони можуть містити лише користувачів, а не інші групи користувачів.
Існує жодна група користувачів за замовчуванням, яка автоматично включає всіх користувачів в обліковому записі AWS. Якщо ви хочете мати таку групу користувачів, ви повинні створити її та призначити кожного нового користувача до неї.
Кількість і розмір ресурсів IAM в обліковому записі AWS, таких як кількість груп, а також кількість груп, до яких може належати користувач, обмежені. Для отримання додаткової інформації див. Квоти IAM та AWS STS.
IAM роль дуже схожа на користувача, оскільки це ідентифікація з політиками дозволів, які визначають, що вона може і не може робити в AWS. Однак роль не має жодних облікових даних (пароль або ключі доступу), пов'язаних з нею. Замість того, щоб бути унікально пов'язаною з однією особою, роль призначена для того, щоб бути прийнятою будь-ким, хто її потребує (і має достатні дозволи). Користувач IAM може прийняти роль, щоб тимчасово отримати різні дозволи для конкретного завдання. Роль може бути призначена федеративному користувачу, який входить, використовуючи зовнішнього постачальника ідентичності замість IAM.
IAM роль складається з двох типів політик: політики довіри, яка не може бути порожньою, що визначає хто може прийняти роль, і політики дозволів, яка не може бути порожньою, що визначає до чого вона може отримати доступ.
AWS Служба безпечних токенів (STS) - це веб-сервіс, який полегшує видачу тимчасових, обмежених привілеїв облікових даних. Він спеціально розроблений для:
Тимчасові облікові дані в основному використовуються з IAM ролями, але є й інші використання. Ви можете запитати тимчасові облікові дані, які мають більш обмежений набір дозволів, ніж ваш стандартний користувач IAM. Це запобігає вам випадковому виконанню завдань, які не дозволені більш обмеженими обліковими даними. Перевагою тимчасових облікових даних є те, що вони автоматично закінчуються після встановленого періоду часу. Ви контролюєте тривалість, протягом якої облікові дані є дійсними.
Використовуються для призначення дозволів. Є 2 типи:
Політики, керовані AWS (попередньо налаштовані AWS)
Політики, керовані клієнтом: Налаштовані вами. Ви можете створювати політики на основі політик, керованих AWS (модифікуючи одну з них і створюючи свою), використовуючи генератор політик (GUI, що допомагає вам надавати та відмовляти в дозволах) або написавши свої власні.
За замовчуванням доступ є забороненим, доступ буде надано, якщо була вказана явна роль. Якщо існує єдине "Заперечення", воно переважатиме "Дозволити", за винятком запитів, які використовують кореневі облікові дані безпеки облікового запису AWS (які за замовчуванням дозволені).
The глобальні поля, які можна використовувати для умов у будь-якій службі, задокументовані тут. Специфічні поля, які можна використовувати для умов для кожної служби, задокументовані тут.
Цей вид політик безпосередньо призначається користувачу, групі або ролі. Тоді вони не з'являються у списку політик, оскільки інші не можуть їх використовувати. Вбудовані політики корисні, якщо ви хочете підтримувати строгі однозначні відносини між політикою та ідентичністю, до якої вона застосовується. Наприклад, ви хочете бути впевненими, що дозволи в політиці не призначені ненавмисно іншій ідентичності, окрім тієї, для якої вони призначені. Коли ви використовуєте вбудовану політику, дозволи в політиці не можуть бути ненавмисно прикріплені до неправильної ідентичності. Крім того, коли ви використовуєте AWS Management Console для видалення цієї ідентичності, політики, вбудовані в ідентичність, також видаляються. Це тому, що вони є частиною основної сутності.
Це політики, які можуть бути визначені в ресурсах. Не всі ресурси AWS підтримують їх.
Якщо у основної сутності немає явного заборони на них, і політика ресурсу надає їм доступ, тоді їм дозволено.
Межі IAM можна використовувати для обмеження дозволів, до яких користувач або роль повинні мати доступ. Таким чином, навіть якщо інший набір дозволів надається користувачу іншою політикою, операція не вдасться, якщо він спробує їх використати.
Межа - це просто політика, прикріплена до користувача, яка вказує максимальний рівень дозволів, які користувач або роль можуть мати. Отже, навіть якщо у користувача є доступ адміністратора, якщо межа вказує, що він може лише читати S· кошики, це максимальне, що він може зробити.
Це, SCP та дотримання принципу найменших привілеїв - це способи контролю, щоб користувачі не мали більше дозволів, ніж їм потрібно.
Політика сесії - це політика, встановлена, коли роль приймається якимось чином. Це буде як межа IAM для цієї сесії: Це означає, що політика сесії не надає дозволів, але обмежує їх до тих, що вказані в політиці (максимальні дозволи - це ті, які має роль).
Це корисно для заходів безпеки: Коли адміністратор збирається прийняти дуже привілейовану роль, він може обмежити дозволи лише тими, що вказані в політиці сесії, у разі, якщо сесія буде скомпрометована.
Note that by default AWS might add session policies to sessions that are going to be generated because of third reasons. For example, in unauthenticated cognito assumed roles by default (using enhanced authentication), AWS will generate session credentials with a session policy that limits the services that session can access to the following list.
Тому, якщо в якийсь момент ви зіткнетеся з помилкою "... тому що жодна політика сесії не дозволяє ...", і роль має доступ для виконання дії, це тому, що існує політика сесії, яка цьому заважає.
Identity federation дозволяє користувачам з постачальників ідентичності, які є зовнішніми для AWS, безпечно отримувати доступ до ресурсів AWS без необхідності надавати облікові дані користувача AWS з дійсного облікового запису IAM. Прикладом постачальника ідентичності може бути ваш власний корпоративний Microsoft Active Directory (через SAML) або OpenID сервіси (як Google). Федеративний доступ дозволить користувачам всередині нього отримувати доступ до AWS.
Щоб налаштувати це довір'я, генерується постачальник ідентичності IAM (SAML або OAuth), який буде довіряти іншій платформі. Потім принаймні одна роль IAM призначається (довіряючи) постачальнику ідентичності. Якщо користувач з довіреної платформи отримує доступ до AWS, він буде отримувати доступ як зазначена роль.
Однак, зазвичай ви захочете надати іншу роль в залежності від групи користувача на сторонній платформі. Тоді кілька ролей IAM можуть довіряти сторонньому постачальнику ідентичності, а стороння платформа буде тією, що дозволяє користувачам приймати одну роль або іншу.
AWS IAM Identity Center (наступник AWS Single Sign-On) розширює можливості AWS Identity and Access Management (IAM), щоб забезпечити централізоване місце, яке об'єднує адміністрування користувачів та їх доступ до облікових записів AWS та хмарних додатків.
Домен для входу буде чимось на зразок <user_input>.awsapps.com
.
Щоб увійти, можна використовувати 3 джерела ідентичності:
Identity Center Directory: Звичайні користувачі AWS
Active Directory: Підтримує різні конектори
Зовнішній постачальник ідентичності: Всі користувачі та групи походять від зовнішнього постачальника ідентичності (IdP)
У найпростішому випадку каталогу Identity Center, Identity Center матиме список користувачів і груп і зможе призначати політики їм для будь-якого з облікових записів організації.
Щоб надати доступ користувачу/групі Identity Center до облікового запису, буде створено постачальника ідентичності SAML, який довіряє Identity Center, і роль, що довіряє постачальнику ідентичності з вказаними політиками, буде створена в цільовому обліковому записі.
Можливо надавати дозволи через вбудовані політики для ролей, створених через IAM Identity Center. Ролі, створені в облікових записах, яким надаються вбудовані політики в AWS Identity Center, матимуть ці дозволи у вбудованій політиці під назвою AwsSSOInlinePolicy
.
Тому, навіть якщо ви бачите 2 ролі з вбудованою політикою під назвою AwsSSOInlinePolicy
, це не означає, що вони мають однакові дозволи.
Користувач (довіряючий) може створити роль між обліковими записами з деякими політиками, а потім дозволити іншому користувачу (довіреному) отримати доступ до свого облікового запису, але лише маючи доступ, вказаний у нових політиках ролі. Щоб створити це, просто створіть нову роль і виберіть роль між обліковими записами. Ролі для доступу між обліковими записами пропонують два варіанти. Надання доступу між обліковими записами AWS, які ви володієте, і надання доступу між обліковим записом, яким ви володієте, і стороннім обліковим записом AWS. Рекомендується вказати користувача, який є довіреним, а не ставити щось загальне, оскільки в іншому випадку інші автентифіковані користувачі, такі як федеративні користувачі, також зможуть зловживати цією довірою.
Не підтримується:
Відносини довіри
Центр адміністрування AD
Повна підтримка PS API
Кошик для переробки AD
Групові керовані облікові записи служб
Розширення схеми
Немає прямого доступу до ОС або екземплярів
Додаток використовує AssumeRoleWithWebIdentity для створення тимчасових облікових даних. Однак це не надає доступ до консолі AWS, лише доступ до ресурсів у AWS.
Ви можете встановити параметри політики паролів, такі як мінімальна довжина та вимоги до паролів.
Ви можете завантажити "Звіт про облікові дані" з інформацією про поточні облікові дані (такі як час створення користувача, чи активовано пароль...). Ви можете генерувати звіт про облікові дані так часто, як раз на чотири години.
AWS Identity and Access Management (IAM) забезпечує точний контроль доступу по всьому AWS. З IAM ви можете вказати, хто може отримати доступ до яких сервісів і ресурсів, і за яких умов. За допомогою політик IAM ви керуєте дозволами для вашої робочої сили та систем, щоб забезпечити найменші привілеї.
На цій сторінці ви можете знайти префікси IAM ID ключів залежно від їх природи:
ABIA | |
ACCA | Контекстно-специфічні облікові дані |
AGPA | Група користувачів |
AIDA | Користувач IAM |
AIPA | Профіль екземпляра Amazon EC2 |
AKIA | Ключ доступу |
ANPA | Керована політика |
ANVA | Версія в керованій політиці |
APKA | Публічний ключ |
AROA | Роль |
ASCA | Сертифікат |
ASIA | Тимчасові (AWS STS) ідентифікатори ключів доступу використовують цей префікс, але є унікальними лише в комбінації з секретним ключем доступу та токеном сесії. |
Наступні привілеї надають різний доступ для читання метаданих:
arn:aws:iam::aws:policy/SecurityAudit
arn:aws:iam::aws:policy/job-function/ViewOnlyAccess
codebuild:ListProjects
config:Describe*
cloudformation:ListStacks
logs:DescribeMetricFilters
directconnect:DescribeConnections
dynamodb:ListTables
Щоб звичайний користувач міг автентифікуватися в AWS через CLI, вам потрібно мати локальні облікові дані. За замовчуванням ви можете налаштувати їх вручну в ~/.aws/credentials
або запустивши aws configure
.
У цьому файлі ви можете мати більше одного профілю, якщо не вказано профіль за допомогою aws cli, буде використано той, що називається [default]
у цьому файлі.
Приклад файлу облікових даних з більш ніж 1 профілем:
Якщо вам потрібно отримати доступ до різних облікових записів AWS і вашому профілю було надано доступ до прийняття ролі в цих облікових записах, вам не потрібно вручну викликати STS щоразу (aws sts assume-role --role-arn <role-arn> --role-session-name sessname
) і налаштовувати облікові дані.
Ви можете використовувати файл ~/.aws/config
, щоб вказати, які ролі приймати, а потім використовувати параметр --profile
як зазвичай (прийняття ролі буде виконано прозоро для користувача).
Приклад конфігураційного файлу:
З цим файлом конфігурації ви можете використовувати aws cli, як:
Якщо ви шукаєте щось схоже на це, але для браузера, ви можете перевірити розширення AWS Extend Switch Roles.
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)