
Инструмент AWS для создания оценки вашего аккаунта AWS на определённый момент времени с помощью Prowler.
## Self-Service Security Assessment Solutions (v2.0)<!-- omit from toc -->
Кибербезопасность остаётся очень важной темой и предметом беспокойства для многих CIO, CISO и их клиентов. Чтобы ответить на эти важные запросы, AWS разработала основной набор сервисов, которые клиенты должны использовать для защиты своих аккаунтов. [Amazon GuardDuty](https://aws.amazon.com/guardduty/), [AWS Security Hub](https://aws.amazon.com/security-hub/), [AWS Config](https://aws.amazon.com/config/) и обзоры [AWS Well-Architected](https://aws.amazon.com/architecture/well-architected/?wa-lens-whitepapers.sort-by=item.additionalFields.sortDate&wa-lens-whitepapers.sort-order=desc&wa-guidance-whitepapers.sort-by=item.additionalFields.sortDate&wa-guidance-whitepapers.sort-order=desc) помогают клиентам поддерживать надёжную безопасность своих аккаунтов AWS. По мере того как всё больше организаций разворачивают свои системы в облаке, особенно если они делают это быстро и ещё не внедрили рекомендуемые сервисы AWS, может возникнуть необходимость провести быструю оценку безопасности облачной среды.
Мы разработали недорогое, простое в развёртывании, безопасное и быстрое решение, позволяющее предоставить нашим клиентам отчёт об оценке безопасности. Эти отчёты формируются с использованием открытого проекта [Prowler](https://github.com/prowler-cloud/prowler). Prowler выполняет оценку безопасности на определённый момент времени на основе лучших практик AWS и помогает быстро выявить потенциальные зоны риска в развёрнутой среде клиента. Если вы заинтересованы в проведении таких оценок на постоянной основе, AWS рекомендует включить [стандарт Foundational Security Best Practices](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp.html) в Security Hub. Если вы хотите интегрировать результаты оценки Prowler с Security Hub, вы можете следовать инструкциям в [документации Prowler](https://docs.prowler.cloud/en/latest/tutorials/aws/securityhub/).
>Примечание: Prowler не является решением, принадлежащим AWS. Клиенты должны самостоятельно ознакомиться с Prowler перед запуском этого решения. Все зависимости, связанные с Prowler, должны поддерживаться в актуальном состоянии. Это решение устанавливает зафиксированную версию Prowler (в настоящее время 5.41.0) из установщика пакетов pip, чтобы изменение формата вывода Prowler не могло без предупреждения нарушить сканирование. Чтобы перейти на более новую версию, отредактируйте строку `pip3 install prowler==` в файле `2-sat2-codebuild-prowler.yaml`.
📕 Для получения более подробных пошаговых инструкций посетите модуль 2 в [SHIP Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/3bd6e4da-265a-4c79-ab47-639b7ef23c9d/en-US/20-satv2).
## Содержание<!-- omit from toc -->
- [Обзор](#overview)
- [Параметры](#parameters)
- [Развёртывание](#deployment)
- [Сканирование одного аккаунта](#single-account-scan)
- [AWS CloudShell](#aws-cloudshell)
- [Развёртывание решения](#deploy-the-solution)
- [Консоль AWS](#aws-console)
- [Развёртывание решения](#deploy-the-solution-1)
- [Сканирование нескольких аккаунтов](#multi-account-scan)
- [AWS CloudShell](#aws-cloudshell-1)
- [Шаг 1: Развёртывание предварительной роли](#step-1-deploy-prerequisite-role)
- [Шаг 2: Развёртывание решения SATv2](#step-2-deploy-the-satv2-solution)
- [Консоль AWS](#aws-console-1)
- [Шаг 1: Развёртывание предварительной роли](#step-1-deploy-prerequisite-role-1)
- [Шаг 2: Включение делегированного администратора для AWS Organizations](#step-2-enable-delegated-administrator-for-aws-organizations)
- [Шаг 3: Развёртывание решения SATv2](#step-3-deploy-the-satv2-solution)
- [Просмотр результатов](#review-the-results)
- [Панель управления SATv2 (рекомендуется)](#satv2-dashboard-recommended)
- [Панель управления Prowler](#prowler-dashboard)
- [Типы сканирования](#scan-types)
- [Базовое сканирование](#basic-scan)
- [Промежуточное сканирование](#intermediate-scan)
- [Полное сканирование](#full-scan)
- [Проверки секретов](#secrets-checks)
- [Уведомления](#notifications)
- [Сводка отчётности](#reporting-summary)
- [Как строится таблица Athena](#how-the-athena-table-is-built)
- [История сканирований и дубликаты](#scan-history-and-duplicates)
- [Часто задаваемые вопросы (FAQ)](#frequently-asked-questions-faq)
- [Очистка](#clean-up)
- [Безопасность](#security)
- [Лицензия](#license)
## Обзор
Решение развёртывается с помощью [AWS CloudFormation](https://aws.amazon.com/cloudformation/). При развёртывании создаются проект [AWS CodeBuild](https://aws.amazon.com/codebuild/) и бакет [Amazon S3](https://aws.amazon.com/s3/) для хранения отчётов, сгенерированных Prowler. Затем для запуска проекта AWS CodeBuild используется функция [AWS Lambda](https://aws.amazon.com/lambda/).
Значения параметров (вводимых пользователем) по умолчанию запускают базовое сканирование в одном аккаунте. Однако вы можете выбрать другие параметры для выполнения более обширных сканирований или сканирования нескольких аккаунтов. Процесс развёртывания занимает менее 5 минут. Шаблоны AWS CloudFormation этого решения предоставлены для ознакомления в этом репозитории Github.
После развёртывания шаблона запустится проект CodeBuild. Оценка по умолчанию занимает около 5 минут. Время выполнения оценки безопасности будет варьироваться в зависимости от количества ресурсов и выбранных параметров сканирования. По завершении оценок отчёты доставляются в созданный бакет S3.

## Параметры
SATv2 можно настроить, изменяя параметры CloudFormation. В этом разделе приведены доступные опции и ссылка на раздел с более подробной информацией.
| Параметр | Описание | Дополнительная информация |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| ProwlerScanType | Укажите, какой тип сканирования выполнять. Выбор full без указания других ProwlerOptions выполнит полное сканирование. Чтобы выполнить конкретную проверку, выберите Full и добавьте -c <check> к ProwlerOptions. | [Типы сканирования](#scan-types) |
| ExcludeSecretsChecks | По умолчанию true, что пропускает проверки Prowler, которые ищут в содержимом ресурсов жёстко закодированные секреты. Установите false, чтобы выполнять их. | [Проверки секретов](#secrets-checks) |
| MultiAccountScan | Установите true, если вы хотите сканировать все аккаунты в вашей организации. Вы должны развернуть предварительный шаблон для создания роли или указать другую ProwlerRole с соответствующими разрешениями. | [Сканирование нескольких аккаунтов](#multi-account-scan) |
| Reporting | Установите true, если вы хотите объединить отчёты Prowler в один csv. Это полезно при сканировании нескольких аккаунтов. | [Сводка отчётности](#reporting-summary) |
| EmailAddress | Укажите адрес, если вы хотите получать электронное письмо по завершении оценки. | [Уведомления](#notifications) |
| **Расширенные параметры** |
| ConcurrentAccountScans | Для сканирования нескольких аккаунтов укажите количество аккаунтов для одновременного сканирования. Это полезно для крупных организаций с большим количеством аккаунтов. Выбор более трёх изменяет размер инстанса CodeBuild и может повлечь дополнительные расходы. |
| CodeBuildTimeout | Установите тайм-аут для задания CodeBuild. По умолчанию — 300 минут (5 часов). |
| MultiAccountListOverride | Укажите разделённый пробелами список аккаунтов для сканирования. Если оставить это поле пустым, будут сканироваться все аккаунты в вашей организации. Убедитесь, что для параметра `MultiAccountScan` выше установлено значение true, если вы хотите сканировать конкретные аккаунты. Если вы не можете предоставить делегированный доступ ListAccount, вы можете указать параметр MultiAccountListOverride. | [Сканирование нескольких аккаунтов](#multi-account-scan) |
| ProwlerOptions | Укажите параметры для Prowler. Параметры --role и ARN будут автоматически добавлены в конец указанных вами параметров. Это также можно использовать для указания одной проверки. | [Полное сканирование](#full-scan) |
| ProwlerRole | Роль, которую Prowler должен принять для выполнения сканирования. Измените это, если хотите указать свою собственную роль с другими разрешениями. |
## Развёртывание
Вы можете использовать этот проект для запуска Prowler в нескольких аккаунтах в AWS Organization или в одном аккаунте. Мы предоставляем инструкции по использованию AWS CloudShell или консоли AWS. Выберите вариант, чтобы начать.
| Тип развёртывания | AWS CloudShell | Консоль AWS |
| --------------- | ------------------------- | ---------------------- |
| Один аккаунт | [Ссылка](#aws-cloudshell) | [Ссылка](#aws-console) |
| Несколько аккаунтов | [Ссылка](#aws-cloudshell-1) | [Ссылка](#aws-console-1) |
## Сканирование одного аккаунта
Чтобы запустить решение Self-Service Security Assessment (SATv2) для одного аккаунта, следуйте приведённым ниже инструкциям. Вы можете использовать AWS CLI или консоль AWS.
### AWS CloudShell
<details>
<summary>Показать шаги</summary>
#### Развёртывание решения
1. Войдите в свой аккаунт AWS.
2. В панели навигации выберите [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home).
3. Чтобы скачать шаблон CloudFormation, введите следующую команду.
```bash
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml
```
4. Чтобы создать бакет S3 для размещения шаблона, введите следующие команды. Шаблон превышает 51 200 байт, поэтому CloudFormation требует загрузить его в S3, а не передавать встроенно.
```bash
TEMPLATE_BUCKET=sat2-cfn-templates-$(aws sts get-caller-identity --query Account --output text)-$AWS_REGION
aws s3 mb s3://$TEMPLATE_BUCKET --region $AWS_REGION
```
5. Чтобы развернуть шаблон CloudFormation, введите следующую команду. Опция `--s3-bucket` загружает шаблон в бакет перед созданием стека.
```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2 \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET
```
6. После создания стека вы можете удалить промежуточный бакет. Он используется только для передачи шаблона в CloudFormation.
```bash
aws s3 rb s3://$TEMPLATE_BUCKET --force
```
</details>
### Консоль AWS
<details>
<summary>Показать шаги</summary>
#### Развёртывание решения
1. Скачайте шаблон CloudFormation [2-sat2-codebuild-prowler.yaml](https://github.com/awslabs/aws-security-assessment-solution/blob/main/2-sat2-codebuild-prowler.yaml).
2. Перейдите в [консоль AWS CloudFormation](https://console.aws.amazon.com/cloudformation).
3. В панели навигации выберите **Stacks**.
4. Выберите **Create stack**.
5. В разделе Specify template выберите **Upload a template file**.
6. Выберите **2-sat2-codebuild-prowler.yaml**, скачанный на шаге 1.
7. Выберите **Next**.
8. В поле Stack name введите **sat2**.
9. Выберите **Next**.
10. На странице Configure stack options выберите **Next**.
11. На странице Review SAS установите флажок **I acknowledge that AWS CloudFormation might create IAM resources.** и выберите **Submit**.
</details>
## Сканирование нескольких аккаунтов
Решение Self-Service Security Assessment (SAT) также поддерживает сканирование нескольких аккаунтов. Вы должны развернуть предварительную роль в каждом аккаунте, в котором хотите выполнить сканирование. Чтобы запустить SATv2 для нескольких аккаунтов, следуйте приведённым ниже инструкциям. Вы можете использовать AWS CLI или консоль AWS.
Эти инструкции предполагают, что у вас уже есть предварительные условия для операций со stack set. Для получения дополнительной информации посетите [руководство пользователя AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html).
>Примечание: StackSets не применяются к управляющему аккаунту. Чтобы оценить управляющий аккаунт, разверните 1-sat2-member-role как стек CloudFormation.
### AWS CloudShell
<details>
<summary>Показать шаги</summary>
#### Шаг 1: Развёртывание предварительной роли
1. Войдите в свой управляющий аккаунт AWS.
2. В панели навигации выберите [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home).
3. Определите, из какого аккаунта вы будете запускать сканирование Prowler. Клиенты обычно используют аккаунт для инструментов безопасности или аккаунт аудита. Запишите ID аккаунта для параметра **ProwlerAccountID**.
4. Чтобы скачать шаблон CloudFormation, введите следующую команду.
```bash
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/1-sat2-member-roles.yaml
```
5. Разверните шаблон CloudFormation через CloudFormation StackSets. Обновите следующие параметры:
- Замените **\<aws-account-id\>** на ID аккаунта, из которого вы будете запускать Prowler.
- Замените **\<region\>** на регион, в который вы хотите развернуть шаблон.
```bash
aws cloudformation create-stack-set --template-body file://1-sat2-member-roles.yaml \
--stack-set-name sat2-member-roles \
--permission-model SERVICE_MANAGED \
--auto-deployment Enabled=true,RetainStacksOnAccountRemoval=false \
--capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey=ProwlerAccountID,ParameterValue=<aws-account-id> \
--region <region>
```
6. Используйте следующую команду для создания экземпляров стека для каждого аккаунта в вашей организации. Вы можете нацелиться на конкретное OU или на корневое OU. Обновите следующие параметры:
- Замените **\<root-ou\>** на [ID корня организации](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html#orgs_view_root).
- Замените **\<region\>** на регион, в который вы хотите развернуть шаблон.
```bash
aws cloudformation create-stack-instances --stack-set-name sat2-member-roles \
--deployment-targets OrganizationalUnitIds='["<root-ou>"]' \
--regions '["<region>"]' \
--operation-preferences FailureTolerancePercentage=100,MaxConcurrentPercentage=100 \
--region <region>
```
7. Определите, есть ли у вас делегированный администратор или политика ресурсов, уже существующая для вашего аккаунта Prowler. Нужен только один вариант, и политика ресурсов предпочтительнее, так как она более гранулярна.
>Примечание: Политики ресурсов недоступны в GovCloud, поэтому вам нужно будет использовать делегированного администратора.
7a. В вашем аккаунте Prowler может уже быть делегирование. Вы можете проверить это с помощью следующих команд:
```bash
aws organizations list-delegated-administrators
```
7b. В вашем аккаунте Prowler может уже быть политика ресурсов. Вы можете проверить это с помощью следующих команд:
```bash
aws organizations describe-resource-policy
```
8. Если у вас нет делегированного администратора или политики ресурсов, вы можете использовать следующие команды для добавления соответствующего доступа.
>Примечание: Если вы не можете предоставить делегированный доступ ListAccount, вы можете указать параметр MultiAccountListOverride в шаблоне `2-sat2-codebuild-prowler`.
>Примечание: Если вы используете GovCloud, используйте шаг 8a для создания делегированного администратора. Если вы используете коммерческий регион, используйте шаг 8b для предоставления доступа с наименьшими привилегиями к ListAccounts.
8a. Используйте следующую команду для делегирования администратора, если у вас его ещё нет. Замените **\<aws-account-id\>** на ID аккаунта, из которого вы будете запускать Prowler.
```bash
aws organizations register-delegated-administrator <aws-account-id>
```
8b. Используйте следующие команды для добавления политики ресурсов.
- Замените **\<aws-account-id\>** на ID аккаунта, из которого вы будете запускать Prowler.
```bash
aws organizations put-resource-policy --content \
'{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<aws-account-id>:root"
},
"Action": [
"organizations:ListAccounts",
"organizations:DescribeAccount",
"organizations:ListTagsForResource",
"organizations:ListParents",
"organizations:DescribeOrganizationalUnit"
],
"Resource": "*"
}
]
}'
```
>Примечание: `ListParents` и `DescribeOrganizationalUnit` — это то, что заполняет столбцы `account_ou_uid` и `account_ou_name` в результатах. Пропустите их, и остальная часть сканирования всё равно будет работать, но эти два столбца вернутся пустыми.
#### Шаг 2: Развёртывание решения SATv2
>Примечание: Убедитесь, что вы переключились на аккаунт, который указали для запуска Prowler.
1. Чтобы скачать шаблон, откройте AWS CloudShell в **аккаунте Prowler** и введите следующую команду.
```bash
wget https://raw.githubusercontent.com/awslabs/aws-security-assessment-solution/main/2-sat2-codebuild-prowler.yaml
```
2. Чтобы создать бакет S3 для размещения шаблона, введите следующие команды. Шаблон превышает 51 200 байт, поэтому CloudFormation требует загрузить его в S3, а не передавать встроенно.
```bash
TEMPLATE_BUCKET=sat2-cfn-templates-$(aws sts get-caller-identity --query Account --output text)-$AWS_REGION
aws s3 mb s3://$TEMPLATE_BUCKET --region $AWS_REGION
```
3. Чтобы развернуть шаблон в аккаунте Prowler. Установите **MultiAccountScan** в **true**, чтобы сканировать все аккаунты в вашей организации. Опция `--s3-bucket` загружает шаблон в бакет перед созданием стека.
```bash
aws cloudformation deploy --template-file 2-sat2-codebuild-prowler.yaml \
--stack-name sat2-prowler \
--capabilities CAPABILITY_NAMED_IAM \
--s3-bucket $TEMPLATE_BUCKET \
--parameter-overrides MultiAccountScan=true
```
4. После создания стека вы можете удалить промежуточный бакет. Он используется только для передачи шаблона в CloudFormation.
```bash
aws s3 rb s3://$TEMPLATE_BUCKET --force
```
</details>
### Консоль AWS
<details>
<summary>Показать шаги</summary>#### Шаг 1: Развертывание предварительной роли
1. Скачайте файлы **1-sat2-member-roles.yaml** и **2-sat2-codebuild-prowler.yaml**.
2. Разверните шаблон CloudFormation через CloudFormation StackSets. Обновите следующие параметры:
- Замените \<aws-account-id\> на идентификатор аккаунта, из которого вы будете запускать Prowler.
- Замените \<region\> на регион, в котором вы хотите развернуть шаблон.
3. Перейдите в [консоль AWS CloudFormation](https://console.aws.amazon.com/cloudformation).
4. В панели навигации выберите **StackSets**.
5. Выберите **Create StackSet**.
6. В разделе Permissions оставьте выбранным **Service-managed permissions**.
7. В разделе Specify template выберите **Upload a template file**.
8. Выберите **1-sat2-member-roles.yaml**, скачанный на шаге 1-1.
9. Выберите **Next**.
10. В поле Stack name введите **sat2-member-role**.
11. В разделе Parameters введите следующее:
- ProwlerAccountID — идентификатор аккаунта, из которого вы будете запускать Prowler.
12. Выберите **Next**.
13. На странице Configure StackSet options выберите **Next**.
14. На странице Set deployment options введите следующее:
1. В разделе **Deployment targets** оставьте выбранным **Deploy to organization**.
2. В разделе **Specify regions** выберите **us-east-1**.
3. В разделе **Region Concurrency** выберите **Parallel**.
15. Выберите **Next**.
16. На странице **Review** установите флажок **I acknowledge that AWS CloudFormation might create IAM resources.** и выберите **Submit**.
#### Шаг 2: Включение делегированного администратора для AWS Organizations
Определите, есть ли у вас делегированный администратор или уже существующая политика ресурсов для аккаунта, в котором вы хотите развернуть Prowler. Рекомендуется запускать Prowler из вашего аккаунта для инструментов безопасности (Audit). Чтобы обновить или проверить, что у аккаунта аудита есть разрешения на ListAccounts, выполните следующие шаги.
1. Перейдите в [консоль AWS Organization](https://console.aws.amazon.com/organizations).
2. В панели навигации выберите **Settings**.
3. В разделе Delegated administrator for AWS Organizations добавьте следующее утверждение.
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<aws-account-id>:root"
},
"Action": [
"organizations:ListAccounts",
"organizations:DescribeAccount",
"organizations:ListTagsForResource",
"organizations:ListParents",
---
[Read more](https://github.com/awslabs/aws-security-assessment-solution)