mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-14 05:46:25 -08:00
Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## **Ієрархія ресурсів**
|
||||
|
||||
Google Cloud використовує [Ієрархію ресурсів](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), яка концептуально подібна до традиційної файлової системи. Це забезпечує логічний робочий процес батьків/дочок з конкретними точками прив'язки для політик і дозволів.
|
||||
Google Cloud використовує [ієрархію ресурсів](https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy), яка концептуально подібна до традиційної файлової системи. Це забезпечує логічний робочий процес батьків/дочок з конкретними точками прив'язки для політик і дозволів.
|
||||
|
||||
На високому рівні це виглядає так:
|
||||
```
|
||||
@@ -13,13 +13,13 @@ Organization
|
||||
--> Projects
|
||||
--> Resources
|
||||
```
|
||||
Віртуальна машина (називається Обчислювальним екземпляром) є ресурсом. Ресурс знаходиться в проекті, ймовірно, поряд з іншими Обчислювальними екземплярами, сховищами, тощо.
|
||||
Віртуальна машина (називається Compute Instance) є ресурсом. Ресурс знаходиться в проекті, ймовірно, поряд з іншими Compute Instances, сховищами, тощо.
|
||||
|
||||
<figure><img src="../../../images/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg">https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg</a></p></figcaption></figure>
|
||||
|
||||
## **Міграція проектів**
|
||||
|
||||
Можливо **мігрувати проект без організації** до організації з правами `roles/resourcemanager.projectCreator` та `roles/resourcemanager.projectMover`. Якщо проект знаходиться в іншій організації, потрібно зв'язатися з підтримкою GCP, щоб **спочатку перемістити їх з організації**. Для отримання додаткової інформації перегляньте [**це**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6).
|
||||
Можливо **мігрувати проект без організації** в організацію з правами `roles/resourcemanager.projectCreator` та `roles/resourcemanager.projectMover`. Якщо проект знаходиться в іншій організації, потрібно зв'язатися з підтримкою GCP, щоб **спочатку перемістити їх з організації**. Для отримання додаткової інформації перегляньте [**це**](https://medium.com/google-cloud/migrating-a-project-from-one-organization-to-another-gcp-4b37a86dd9e6).
|
||||
|
||||
## **Політики організації**
|
||||
|
||||
@@ -27,24 +27,24 @@ Organization
|
||||
|
||||
- Централізувати контроль для **налаштування обмежень** на те, як можуть використовуватися ресурси вашої організації.
|
||||
- Визначити та встановити **обмеження** для ваших команд розробників, щоб залишатися в межах відповідності.
|
||||
- Допомогти власникам проектів та їх командам швидко рухатися без побоювань про порушення відповідності.
|
||||
- Допомогти власникам проектів та їх командам швидко рухатися без побоювань щодо порушення відповідності.
|
||||
|
||||
Ці політики можуть бути створені для **впливу на всю організацію, папки або проекти**. Наслідники цільового вузла ієрархії ресурсів **успадковують політику організації**.
|
||||
|
||||
Щоб **визначити** політику організації, **ви вибираєте** [**обмеження**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), яке є певним типом обмеження щодо або служби Google Cloud, або групи служб Google Cloud. Ви **налаштовуєте це обмеження з вашими бажаними обмеженнями**.
|
||||
Щоб **визначити** політику організації, **виберіть** [**обмеження**](https://cloud.google.com/resource-manager/docs/organization-policy/overview#constraints), яке є певним типом обмеження щодо або служби Google Cloud, або групи служб Google Cloud. Ви **налаштовуєте це обмеження з вашими бажаними обмеженнями**.
|
||||
|
||||
<figure><img src="../../../images/image (217).png" alt=""><figcaption><p><a href="https://cloud.google.com/resource-manager/img/org-policy-concepts.svg">https://cloud.google.com/resource-manager/img/org-policy-concepts.svg</a></p></figcaption></figure>
|
||||
|
||||
#### Загальні випадки використання <a href="#common_use_cases" id="common_use_cases"></a>
|
||||
|
||||
- Обмежити спільний доступ до ресурсів на основі домену.
|
||||
- Обмежити обмін ресурсами на основі домену.
|
||||
- Обмежити використання облікових записів служби управління ідентифікацією та доступом.
|
||||
- Обмежити фізичне розташування новостворених ресурсів.
|
||||
- Вимкнути створення облікових записів служби.
|
||||
|
||||
<figure><img src="../../../images/image (172).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Є багато інших обмежень, які надають вам детальний контроль над ресурсами вашої організації. Для **додаткової інформації дивіться** [**список усіх обмежень служби політики організації**](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)**.**
|
||||
Існує багато інших обмежень, які надають вам детальний контроль над ресурсами вашої організації. Для **додаткової інформації дивіться** [**список усіх обмежень політики організації**](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)**.**
|
||||
|
||||
### **Політики організації за замовчуванням**
|
||||
|
||||
@@ -54,33 +54,33 @@ Organization
|
||||
|
||||
**Політики управління доступом**
|
||||
|
||||
- **Обмежені контакти домену:** Запобігає додаванню користувачів до Основних контактів за межами ваших вказаних доменів. Це обмежує Основні контакти лише на управлінні ідентичностями користувачів у ваших вибраних доменах для отримання сповіщень платформи.
|
||||
- **Обмежене спільне використання домену:** Запобігає додаванню користувачів до політик IAM за межами ваших вказаних доменів. Це обмежує політики IAM лише на управлінні ідентичностями користувачів у ваших вибраних доменах для доступу до ресурсів у цій організації.
|
||||
- **Запобігання публічному доступу:** Запобігає відкриттю сховищ Cloud Storage для публіки. Це забезпечує, що розробник не може налаштувати сховища Cloud Storage для неавтентифікованого доступу в Інтернеті.
|
||||
- **Уніфікований доступ на рівні сховища:** Запобігає спискам контролю доступу (ACL) на рівні об'єктів у сховищах Cloud Storage. Це спрощує управління доступом, застосовуючи політики IAM послідовно до всіх об'єктів у сховищах Cloud Storage.
|
||||
- **Вимагати вхід в ОС:** Віртуальні машини, створені в нових проектах, матимуть увімкнений вхід в ОС. Це дозволяє вам керувати доступом SSH до ваших екземплярів, використовуючи IAM, без необхідності створювати та керувати окремими ключами SSH.
|
||||
- **Обмежені контакти домену:** Запобігає додаванню користувачів до Essential Contacts за межами ваших вказаних доменів. Це обмежує Essential Contacts лише на управлінні ідентичностями користувачів у ваших вибраних доменах для отримання сповіщень платформи.
|
||||
- **Обмежене спільне використання домену:** Запобігає додаванню користувачів до IAM політик за межами ваших вказаних доменів. Це обмежує IAM політики лише на управлінні ідентичностями користувачів у ваших вибраних доменах для доступу до ресурсів у цій організації.
|
||||
- **Запобігання публічному доступу:** Запобігає експонуванню Cloud Storage бакетів для публіки. Це забезпечує, що розробник не може налаштувати Cloud Storage бакети для неавтентифікованого доступу в Інтернет.
|
||||
- **Уніфікований доступ на рівні бакета:** Запобігає спискам контролю доступу (ACL) на рівні об'єктів у Cloud Storage бакетах. Це спрощує управління доступом, застосовуючи IAM політики послідовно до всіх об'єктів у Cloud Storage бакетах.
|
||||
- **Вимагати вхід в ОС:** Віртуальні машини, створені в нових проектах, матимуть увімкнений вхід в ОС. Це дозволяє вам керувати доступом SSH до ваших екземплярів, використовуючи IAM без необхідності створювати та керувати окремими SSH ключами.
|
||||
|
||||
**Додаткові політики безпеки для облікових записів служби**
|
||||
|
||||
- **Вимкнути автоматичні надання IAM:** Запобігає автоматичному наданню обліковим записам служби App Engine та Compute Engine ролі редактора IAM при створенні проекту. Це забезпечує, що облікові записи служби не отримують надто широкі ролі IAM при створенні.
|
||||
- **Вимкнути створення ключів облікових записів служби:** Запобігає створенню публічних ключів облікових записів служби. Це допомагає зменшити ризик витоку постійних облікових даних.
|
||||
- **Вимкнути завантаження ключів облікових записів служби:** Запобігає завантаженню публічних ключів облікових записів служби. Це допомагає зменшити ризик витоку або повторного використання матеріалів ключів.
|
||||
- **Вимкнути автоматичні надання IAM**: Запобігає автоматичному наданню ролі редактора IAM для облікових записів служби App Engine та Compute Engine при створенні проекту. Це забезпечує, що облікові записи служби не отримують надто широкі ролі IAM при створенні.
|
||||
- **Вимкнути створення ключів облікових записів служби**: Запобігає створенню публічних ключів облікових записів служби. Це допомагає зменшити ризик експонування постійних облікових даних.
|
||||
- **Вимкнути завантаження ключів облікових записів служби**: Запобігає завантаженню публічних ключів облікових записів служби. Це допомагає зменшити ризик витоку або повторного використання ключових матеріалів.
|
||||
|
||||
**Політики конфігурації безпечної мережі VPC**
|
||||
|
||||
- **Визначити дозволені зовнішні IP-адреси для екземплярів ВМ:** Запобігає створенню обчислювальних екземплярів з публічною IP-адресою, що може піддати їх інтернет-трафіку.
|
||||
- **Визначити дозволені зовнішні IP для екземплярів ВМ**: Запобігає створенню Compute екземплярів з публічним IP, що може піддати їх інтернет-трафіку.
|
||||
|
||||
* **Вимкнути вкладену віртуалізацію ВМ:** Запобігає створенню вкладених ВМ на ВМ Compute Engine. Це зменшує ризик безпеки, пов'язаний з наявністю непідконтрольних вкладених ВМ.
|
||||
* **Вимкнути вкладену віртуалізацію ВМ**: Запобігає створенню вкладених ВМ на Compute Engine ВМ. Це зменшує ризик безпеки від наявності непідконтрольних вкладених ВМ.
|
||||
|
||||
- **Вимкнути серійний порт ВМ:** Запобігає доступу до серійного порту ВМ Compute Engine. Це запобігає введенню даних у серійний порт сервера за допомогою API Compute Engine.
|
||||
- **Вимкнути серійний порт ВМ:** Запобігає доступу до серійного порту Compute Engine ВМ. Це запобігає введенню даних у серійний порт сервера за допомогою API Compute Engine.
|
||||
|
||||
* **Обмежити авторизовані мережі на екземплярах Cloud SQL:** Запобігає доступу публічних або не внутрішніх мереж до ваших баз даних Cloud SQL.
|
||||
* **Обмежити авторизовані мережі на Cloud SQL екземплярах:** Запобігає доступу публічних або не внутрішніх мереж до ваших баз даних Cloud SQL.
|
||||
|
||||
- **Обмежити пересилання протоколів на основі типу IP-адреси:** Запобігає пересиланню протоколів ВМ для зовнішніх IP-адрес.
|
||||
|
||||
* **Обмежити доступ до публічних IP на екземплярах Cloud SQL:** Запобігає створенню екземплярів Cloud SQL з публічною IP-адресою, що може піддати їх інтернет-трафіку.
|
||||
* **Обмежити доступ до публічного IP на Cloud SQL екземплярах:** Запобігає створенню Cloud SQL екземплярів з публічним IP, що може піддати їх інтернет-трафіку.
|
||||
|
||||
- **Обмежити видалення застави проекту спільної VPC:** Запобігає випадковому видаленню проектів-хостів спільної VPC.
|
||||
- **Обмежити видалення ліній проекту спільної VPC:** Запобігає випадковому видаленню проектів-хостів спільної VPC.
|
||||
|
||||
* **Встановити внутрішнє налаштування DNS для нових проектів на лише зональний DNS:** Запобігає використанню застарілого налаштування DNS, яке зменшило доступність служби.
|
||||
|
||||
@@ -94,16 +94,16 @@ Organization
|
||||
|
||||
Це схоже на політики IAM в AWS, оскільки **кожна роль містить набір дозволів.**
|
||||
|
||||
Однак, на відміну від AWS, **немає централізованого репозиторію** ролей. Замість цього, **ресурси надають X ролей доступу Y принципалам**, і єдиний спосіб дізнатися, хто має доступ до ресурсу, - це використовувати **метод `get-iam-policy` для цього ресурсу**.\
|
||||
Однак, на відміну від AWS, **немає централізованого репозиторію** ролей. Замість цього, **ресурси надають X ролі доступу Y принципалам**, і єдиний спосіб дізнатися, хто має доступ до ресурсу, - це використовувати **метод `get-iam-policy` для цього ресурсу**.\
|
||||
Це може бути проблемою, оскільки це означає, що єдиний спосіб дізнатися, **які дозволи має принципал, - це запитати кожен ресурс, кому він надає дозволи**, і користувач може не мати дозволів, щоб отримати дозволи з усіх ресурсів.
|
||||
|
||||
Є **три типи** ролей в IAM:
|
||||
Існує **три типи** ролей в IAM:
|
||||
|
||||
- **Основні/примітивні ролі**, які включають ролі **Власника**, **Редактора** та **Переглядача**, що існували до впровадження IAM.
|
||||
- **Попередньо визначені ролі**, які надають детальний доступ до конкретної служби та управляються Google Cloud. Є багато попередньо визначених ролей, ви можете **переглянути всі з них з привілеями, які вони мають** [**тут**](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles).
|
||||
- **Попередньо визначені ролі**, які надають детальний доступ до конкретної служби та управляються Google Cloud. Існує багато попередньо визначених ролей, ви можете **переглянути всі з них з привілеями, які вони мають** [**тут**](https://cloud.google.com/iam/docs/understanding-roles#predefined_roles).
|
||||
- **Користувацькі ролі**, які надають детальний доступ відповідно до списку дозволів, вказаного користувачем.
|
||||
|
||||
Є тисячі дозволів у GCP. Щоб перевірити, чи має роль дозволи, ви можете [**шукати дозвіл тут**](https://cloud.google.com/iam/docs/permissions-reference) і побачити, які ролі його мають.
|
||||
Існує тисячі дозволів у GCP. Щоб перевірити, чи має роль дозволи, ви можете [**шукати дозвіл тут**](https://cloud.google.com/iam/docs/permissions-reference) і подивитися, які ролі його мають.
|
||||
|
||||
Ви також можете [**шукати тут попередньо визначені ролі**](https://cloud.google.com/iam/docs/understanding-roles#product_specific_documentation) **пропоновані кожним продуктом.** Зверніть увагу, що деякі **ролі** не можуть бути прикріплені до користувачів і **тільки до СА через деякі дозволи**, які вони містять.\
|
||||
Більше того, зверніть увагу, що **дозволи** набудуть **чинності** лише якщо вони **прикріплені до відповідної служби.**
|
||||
@@ -118,15 +118,15 @@ Organization
|
||||
|
||||
У **консолі GCP** немає управління Користувачами або Групами, це робиться в **Google Workspace**. Хоча ви можете синхронізувати інший постачальник ідентичності в Google Workspace.
|
||||
|
||||
Ви можете отримати доступ до користувачів і груп Workspace за адресою [**https://admin.google.com**](https://admin.google.com/).
|
||||
Ви можете отримати доступ до користувачів і груп у Workspaces **за адресою** [**https://admin.google.com**](https://admin.google.com/).
|
||||
|
||||
**MFA** може бути **вимушена** для користувачів Workspace, однак **зловмисник** може використовувати токен для доступу до GCP **через cli, який не буде захищений MFA** (він буде захищений MFA лише тоді, коли користувач входить для його генерації: `gcloud auth login`).
|
||||
**MFA** може бути **вимушена** для користувачів Workspaces, однак **зловмисник** може використовувати токен для доступу до GCP **через cli, який не буде захищений MFA** (він буде захищений MFA лише тоді, коли користувач входить для його генерації: `gcloud auth login`).
|
||||
|
||||
## Групи
|
||||
|
||||
Коли створюється організація, кілька груп **рекомендується створити.** Якщо ви керуєте будь-якою з них, ви можете скомпрометувати всю або важливу частину організації:
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="299.3076923076923"></th><th></th></tr></thead><tbody><tr><td><strong>Група</strong></td><td><strong>Функція</strong></td></tr><tr><td><strong><code>gcp-organization-admins</code></strong><br><em>(група або індивідуальні облікові записи потрібні для контрольного списку)</em></td><td>Адміністрування будь-якого ресурсу, що належить організації. Призначайте цю роль обережно; адміністратори організації мають доступ до всіх ваших ресурсів Google Cloud. Альтернативно, оскільки ця функція має високі привілеї, розгляньте можливість використання індивідуальних облікових записів замість створення групи.</td></tr><tr><td><strong><code>gcp-network-admins</code></strong><br><em>(потрібно для контрольного списку)</em></td><td>Створення мереж, підмереж, правил брандмауера та мережевих пристроїв, таких як Cloud Router, Cloud VPN та балансувальники навантаження в хмарі.</td></tr><tr><td><strong><code>gcp-billing-admins</code></strong><br><em>(потрібно для контрольного списку)</em></td><td>Налаштування облікових записів для виставлення рахунків та моніторинг їх використання.</td></tr><tr><td><strong><code>gcp-developers</code></strong><br><em>(потрібно для контрольного списку)</em></td><td>Проектування, кодування та тестування додатків.</td></tr><tr><td><strong><code>gcp-security-admins</code></strong><br></td><td>Встановлення та управління політиками безпеки для всієї організації, включаючи управління доступом та <a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">політики обмежень організації</a>. Дивіться <a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">посібник з основ безпеки Google Cloud</a> для отримання додаткової інформації про планування вашої інфраструктури безпеки Google Cloud.</td></tr><tr><td><strong><code>gcp-devops</code></strong></td><td>Створення або управління кінцевими конвеєрами, які підтримують безперервну інтеграцію та доставку, моніторинг та постачання систем.</td></tr><tr><td><strong><code>gcp-logging-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-logging-viewers</code></strong></td><td></td></tr><tr><td><strong><code>gcp-monitor-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-billing-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Моніторинг витрат на проекти. Типові учасники є частиною фінансової команди.</td></tr><tr><td><strong><code>gcp-platform-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд інформації про ресурси в організації Google Cloud.</td></tr><tr><td><strong><code>gcp-security-reviewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд безпеки хмари.</td></tr><tr><td><strong><code>gcp-network-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд конфігурацій мережі.</td></tr><tr><td><strong><code>grp-gcp-audit-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд журналів аудиту.</td></tr><tr><td><strong><code>gcp-scc-admin</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Адміністрування Центру команд безпеки.</td></tr><tr><td><strong><code>gcp-secrets-admin</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Управління секретами в Secret Manager.</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="299.3076923076923"></th><th></th></tr></thead><tbody><tr><td><strong>Група</strong></td><td><strong>Функція</strong></td></tr><tr><td><strong><code>gcp-organization-admins</code></strong><br><em>(група або індивідуальні облікові записи потрібні для контрольного списку)</em></td><td>Адміністрування будь-якого ресурсу, що належить організації. Призначайте цю роль обережно; адміністратори організації мають доступ до всіх ваших ресурсів Google Cloud. Альтернативно, оскільки ця функція має високі привілеї, розгляньте можливість використання індивідуальних облікових записів замість створення групи.</td></tr><tr><td><strong><code>gcp-network-admins</code></strong><br><em>(потрібно для контрольного списку)</em></td><td>Створення мереж, підмереж, правил брандмауера та мережевих пристроїв, таких як Cloud Router, Cloud VPN та балансувальники навантаження в хмарі.</td></tr><tr><td><strong><code>gcp-billing-admins</code></strong><br><em>(потрібно для контрольного списку)</em></td><td>Налаштування облікових записів для виставлення рахунків та моніторинг їх використання.</td></tr><tr><td><strong><code>gcp-developers</code></strong><br><em>(потрібно для контрольного списку)</em></td><td>Проектування, кодування та тестування додатків.</td></tr><tr><td><strong><code>gcp-security-admins</code></strong><br></td><td>Встановлення та управління політиками безпеки для всієї організації, включаючи управління доступом та <a href="https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints">політики обмежень організації</a>. Дивіться <a href="https://cloud.google.com/architecture/security-foundations/authentication-authorization#users_and_groups">посібник з основ безпеки Google Cloud</a> для отримання додаткової інформації про планування вашої інфраструктури безпеки Google Cloud.</td></tr><tr><td><strong><code>gcp-devops</code></strong></td><td>Створення або управління кінцевими конвеєрами, які підтримують безперервну інтеграцію та доставку, моніторинг та постачання систем.</td></tr><tr><td><strong><code>gcp-logging-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-logging-viewers</code></strong></td><td></td></tr><tr><td><strong><code>gcp-monitor-admins</code></strong></td><td></td></tr><tr><td><strong><code>gcp-billing-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Моніторинг витрат на проекти. Типові учасники є частиною фінансової команди.</td></tr><tr><td><strong><code>gcp-platform-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд інформації про ресурси в організації Google Cloud.</td></tr><tr><td><strong><code>gcp-security-reviewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд безпеки хмари.</td></tr><tr><td><strong><code>gcp-network-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд конфігурацій мережі.</td></tr><tr><td><strong><code>grp-gcp-audit-viewer</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Перегляд журналів аудиту.</td></tr><tr><td><strong><code>gcp-scc-admin</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Адміністрування Security Command Center.</td></tr><tr><td><strong><code>gcp-secrets-admin</code></strong><br><em>(більше не за замовчуванням)</em></td><td>Управління секретами в Secret Manager.</td></tr></tbody></table>
|
||||
|
||||
## **Політика паролів за замовчуванням**
|
||||
|
||||
@@ -134,7 +134,7 @@ Organization
|
||||
- Від 8 до 100 символів
|
||||
- Без повторного використання
|
||||
- Без терміну дії
|
||||
- Якщо людина отримує доступ до Workspace через стороннього постачальника, ці вимоги не застосовуються.
|
||||
- Якщо люди отримують доступ до Workspace через стороннього постачальника, ці вимоги не застосовуються.
|
||||
|
||||
<figure><img src="../../../images/image (20).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -143,7 +143,7 @@ Organization
|
||||
## **Облікові записи служби**
|
||||
|
||||
Це принципали, які **ресурси** можуть **мати** **прикріпленими** та доступом для легкого взаємодії з GCP. Наприклад, можливо отримати доступ до **токена автентифікації** облікового запису служби **прикріпленого до ВМ** в метаданих.\
|
||||
Можливо зіткнутися з деякими **конфліктами** при використанні як **IAM, так і обсягів доступу**. Наприклад, ваш обліковий запис служби може мати роль IAM `compute.instanceAdmin`, але екземпляр, до якого ви отримали доступ, був обмежений обмеженням обсягу `https://www.googleapis.com/auth/compute.readonly`. Це завадить вам вносити будь-які зміни, використовуючи токен OAuth, який автоматично призначається вашому екземпляру.
|
||||
Можливо зіткнутися з деякими **конфліктами** при використанні як **IAM, так і обсягів доступу**. Наприклад, ваш обліковий запис служби може мати роль IAM `compute.instanceAdmin`, але екземпляр, до якого ви отримали доступ, має обмеження обсягу `https://www.googleapis.com/auth/compute.readonly`. Це завадить вам вносити будь-які зміни, використовуючи токен OAuth, який автоматично призначається вашому екземпляру.
|
||||
|
||||
Це схоже на **ролі IAM з AWS**. Але не так, як в AWS, **будь-який** обліковий запис служби може бути **прикріплений до будь-якої служби** (не потрібно дозволяти це через політику).
|
||||
|
||||
@@ -158,7 +158,7 @@ SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
|
||||
```
|
||||
### **Ключі та Токени**
|
||||
|
||||
Існує 2 основні способи доступу до GCP як обліковий запис служби:
|
||||
Є 2 основні способи доступу до GCP як до облікового запису служби:
|
||||
|
||||
- **Через OAuth токени**: Це токени, які ви отримаєте з таких місць, як кінцеві точки метаданих або шляхом викрадення http запитів, і вони обмежені **обсягами доступу**.
|
||||
- **Ключі**: Це пари публічних і приватних ключів, які дозволять вам підписувати запити як обліковий запис служби і навіть генерувати OAuth токени для виконання дій як обліковий запис служби. Ці ключі небезпечні, оскільки їх складніше обмежити і контролювати, тому GCP рекомендує не генерувати їх.
|
||||
@@ -186,9 +186,9 @@ curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>
|
||||
"access_type": "offline"
|
||||
}
|
||||
```
|
||||
Попередні **scopes** - це ті, що генеруються за **замовчуванням** за допомогою **`gcloud`** для доступу до даних. Це тому, що коли ви використовуєте **`gcloud`**, спочатку ви створюєте токен OAuth, а потім використовуєте його для зв'язку з кінцевими точками.
|
||||
Попередні **scopes** - це ті, що генеруються за **замовчуванням** за допомогою **`gcloud`** для доступу до даних. Це тому, що коли ви використовуєте **`gcloud`**, спочатку ви створюєте OAuth токен, а потім використовуєте його для зв'язку з кінцевими точками.
|
||||
|
||||
Найважливіший scope з цих потенційно є **`cloud-platform`**, що в основному означає, що можливо **доступ до будь-якої служби в GCP**.
|
||||
Найважливіший scope з цих потенційно є **`cloud-platform`**, що в основному означає, що можливо **отримати доступ до будь-якої служби в GCP**.
|
||||
|
||||
Ви можете **знайти список** [**усіх можливих scopes тут**](https://developers.google.com/identity/protocols/googlescopes)**.**
|
||||
|
||||
@@ -206,11 +206,11 @@ gcloud auth application-default print-access-token
|
||||
```
|
||||
## **Terraform IAM Policies, Bindings and Memberships**
|
||||
|
||||
Як визначено terraform у [https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam), використовуючи terraform з GCP, існують різні способи надання доступу принципалу до ресурсу:
|
||||
Як визначено terraform в [https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam), використовуючи terraform з GCP, існують різні способи надання доступу принципалу до ресурсу:
|
||||
|
||||
- **Memberships**: Ви встановлюєте **принципалів як членів ролей** **без обмежень** щодо ролі або принципалів. Ви можете призначити користувача членом ролі, а потім призначити групу членом тієї ж ролі, а також встановити цих принципалів (користувача та групу) членами інших ролей.
|
||||
- **Bindings**: Кілька **принципалів можуть бути прив'язані до ролі**. Ці **принципали все ще можуть бути прив'язані або бути членами інших ролей**. Однак, якщо принципал, який не прив'язаний до ролі, встановлений як **член прив'язаної ролі**, наступного разу, коли **прив'язка буде застосована, членство зникне**.
|
||||
- **Policies**: Політика є **авторитетною**, вона вказує ролі та принципалів, і тоді **ці принципали не можуть мати більше ролей, а ці ролі не можуть мати більше принципалів**, якщо ця політика не буде змінена (навіть в інших політиках, прив'язках або членствах). Тому, коли роль або принципал вказані в політиці, всі їхні привілеї є **обмеженими цією політикою**. Очевидно, це можна обійти, якщо принципалу надано можливість змінювати політику або права на ескалацію привілеїв (наприклад, створити нового принципала та прив'язати його до нової ролі).
|
||||
- **Bindings**: Кілька **принципалів можуть бути прив'язані до ролі**. Ці **принципали все ще можуть бути прив'язані або бути членами інших ролей**. Однак, якщо принципал, який не прив'язаний до ролі, буде встановлений як **член прив'язаної ролі**, наступного разу, коли **прив'язка буде застосована, членство зникне**.
|
||||
- **Policies**: Політика є **авторитетною**, вона вказує ролі та принципалів, і тоді **ці принципали не можуть мати більше ролей, а ці ролі не можуть мати більше принципалів**, якщо ця політика не буде змінена (навіть в інших політиках, прив'язках або членствах). Тому, коли роль або принципал вказані в політиці, всі їхні привілеї є **обмеженими цією політикою**. Очевидно, це можна обійти, якщо принципалу надано можливість змінювати політику або права на ескалацію привілеїв (наприклад, створити нового принципала і прив'язати його до нової ролі).
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
# GCP - Federation Abuse
|
||||
# GCP - Зловживання федерацією
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## OIDC - Github Actions Abuse
|
||||
## OIDC - Зловживання Github Actions
|
||||
|
||||
### GCP
|
||||
|
||||
Щоб надати **доступ до Github Actions** з репозиторію Github до **облікового запису сервісу** GCP, необхідно виконати наступні кроки:
|
||||
Щоб надати **доступ до Github Actions** з репозиторію Github до **облікового запису служби** GCP, необхідно виконати такі кроки:
|
||||
|
||||
- **Створіть обліковий запис сервісу** для доступу з github actions з **бажаними правами:**
|
||||
- **Створіть обліковий запис служби** для доступу з github actions з **бажаними правами:**
|
||||
```bash
|
||||
projectId=FIXME
|
||||
gcloud config set project $projectId
|
||||
@@ -39,7 +39,7 @@ poolId=$(gcloud iam workload-identity-pools describe $poolName \
|
||||
--location global \
|
||||
--format='get(name)')
|
||||
```
|
||||
- Створіть новий **workload identity pool OIDC provider**, який **довіряє** github actions (за назвою org/repo в цьому сценарії):
|
||||
- Створіть новий **пул ідентичності робочого навантаження OIDC постачальника**, який **довіряє** github actions (за назвою org/repo в цьому сценарії):
|
||||
```bash
|
||||
attributeMappingScope=repository # could be sub (GitHub repository and branch) or repository_owner (GitHub organization)
|
||||
|
||||
@@ -55,7 +55,7 @@ providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
|
||||
--workload-identity-pool $poolName \
|
||||
--format='get(name)')
|
||||
```
|
||||
- Нарешті, **дозвольте принципалу** з постачальника використовувати сервісний принципал:
|
||||
- Нарешті, **дозвольте принципалу** від постачальника використовувати сервісний принципал:
|
||||
```bash
|
||||
gitHubRepoName="repo-org/repo-name"
|
||||
gcloud iam service-accounts add-iam-policy-binding $saId \
|
||||
@@ -63,9 +63,9 @@ gcloud iam service-accounts add-iam-policy-binding $saId \
|
||||
--member "principalSet://iam.googleapis.com/${poolId}/attribute.${attributeMappingScope}/${gitHubRepoName}"
|
||||
```
|
||||
> [!WARNING]
|
||||
> Зверніть увагу, що в попередньому члені ми вказуємо **`org-name/repo-name`** як умови для доступу до облікового запису служби (інші параметри, які роблять його **більш обмежувальним**, такі як гілка, також можуть бути використані).
|
||||
> Зверніть увагу, що в попередньому члені ми вказуємо **`org-name/repo-name`** як умови для доступу до облікового запису служби (інші параметри, які роблять його **більш обмеженим**, такі як гілка, також можуть бути використані).
|
||||
>
|
||||
> Однак також можливо **дозволити всім github доступ** до облікового запису служби, створивши провайдера, подібного до наступного, використовуючи підстановочний знак:
|
||||
> Однак також можливо **дозволити всім github доступ** до облікового запису служби, створивши провайдера, як показано нижче, використовуючи підстановочний знак:
|
||||
|
||||
<pre class="language-bash"><code class="lang-bash"># Create a Workload Identity Pool
|
||||
poolName=wi-pool2
|
||||
@@ -99,7 +99,7 @@ providerId=$(gcloud iam workload-identity-pools providers describe $poolName \
|
||||
</strong></code></pre>
|
||||
|
||||
> [!WARNING]
|
||||
> У цьому випадку будь-хто міг би отримати доступ до облікового запису служби з github actions, тому важливо завжди **перевіряти, як визначено члена**.\
|
||||
> У цьому випадку будь-хто міг би отримати доступ до облікового запису служби з github actions, тому завжди важливо **перевіряти, як визначено учасника**.\
|
||||
> Це завжди повинно бути щось на зразок цього:
|
||||
>
|
||||
> `attribute.{custom_attribute}`:`principalSet://iam.googleapis.com/projects/{project}/locations/{location}/workloadIdentityPools/{pool}/attribute.{custom_attribute}/{value}`
|
||||
|
||||
Reference in New Issue
Block a user