AWS Config — мощный инструмент, но головная боль при развертывании
Опытные пользователи AWS знакомы с сервисом AWS Config. Config — это мощный инструмент, позволяющий постоянно отслеживать и записывать конфигурацию ресурсов AWS в вашей учетной записи. Используя Config, вы можете легко увидеть изменения в конфигурации данного ресурса AWS на временной шкале, узнать, кто внес данное изменение в конфигурацию, и увидеть взаимосвязи между ресурсами в вашей учетной записи. Config также предлагает мощную функцию, которая позволяет вам настроить правила управления, чтобы предупреждать вас, когда ресурсы не соответствуют вашим желаемым рекомендациям.
AWS рекомендует настроить AWS Config в каждом из ваших аккаунтов AWS в качестве лучшей практики. Опытные пользователи Config знают, что это может быстро превратиться в громоздкий процесс, если у вас более нескольких учетных записей AWS. AWS Config является региональной службой, что означает, что вам необходимо включить ее в каждом регионе, в котором вы работаете. Это может быть утомительным процессом при использовании консоли AWS Console, и даже при использовании AWS CLI это сложная многоступенчатая процедура:
- Создать ведро S3
- Создайте роль IAM
- Создать тему SNS
- Создать регистратор конфигурации
- Создать канал доставки
- Запустить регистратор конфигурации
Теперь представьте, что вы делаете это двадцать раз (по одному разу для каждого региона) для 150 учетных записей AWS, и я думаю, вы сможете представить себе всю боль и страдания.
Для администраторов больших сред с несколькими учетными записями, которые живут в рамках организации AWS, я рад поделиться тем, что существует гораздо более простой способ развернуть Config на всех учетных записях и регионах одновременно, а для новых учетных записей в вашей организации Config включается автоматически. Магия? CloudFormation StackSets на помощь!
Решение
В этом решении мы настроим развертывание службы Config в масштабах всей организации AWS, при этом все данные регистратора конфигурации будут записываться в единое централизованное хранилище Amazon S3. Служба Config будет включена в каждой учетной записи и регионе с помощью CloudFormation StackSets.
Предварительные условия
Для успешного развертывания этого решения необходимо выполнить несколько требований.
Организации AWS
Для того чтобы использовать AWS StackSets, ваши учетные записи AWS должны быть членами организации AWS. Ваши учетные записи должны быть организованы в одну или несколько организационных единиц (OUs). Я также рекомендую создать OU «Testing», где вы сможете опробовать развертывание StackSet на тестовом аккаунте, прежде чем использовать его на всех аккаунтах вашей организации. Кроме того, в вашей организации AWS должны быть включены все функции, а не только консолидированный биллинг.
Включение доверенного доступа к наборам стеков
Мы будем создавать StackSet с разрешениями «service-managed». Я настоятельно рекомендую этот вариант, потому что с разрешениями service-managed вам не нужно беспокоиться о создании ролей IAM в каждой учетной записи, в которой вы будете развертывать… StackSets позаботится об этом за вас автоматически. Эта страница документации AWS содержит более подробную информацию о различных моделях разрешений для развертывания StackSets. Прежде чем начать развертывание StackSets с разрешениями, управляемыми службами, необходимо включить доверенный доступ в организациях AWS. Существует несколько способов включить эту функцию, но проще всего это сделать через консоль CloudFormation.
- Войдите в свою учетную запись управления организациями как пользователь с доступом администратора
- Перейдите в консоль AWS CloudFormation
- В левой навигационной панели выберите StackSets. Если доверенный доступ в настоящее время не включен, в верхней части страницы появится баннер, предлагающий включить доверенный доступ.
- Нажмите кнопку Включить доверенный доступ, чтобы включить эту функцию.
Доверенный доступ успешно включен, когда появится следующий зеленый баннер:
Централизованное ведро S3
Вместо развертывания ведра S3 для каждой связанной учетной записи, эта архитектура использует единое ведро S3, в которое все учетные записи записывают свои журналы. Если вы управляете большой средой с несколькими учетными записями, у вас, скорее всего, уже есть централизованная учетная запись журнала, и именно туда следует поместить новое ведро для ведения журналов конфигурации. Создайте ведро S3 с соответствующим именем в учетной записи ведения журнала и убедитесь, что для него включены параметры блокировки публичного доступа. Затем примените к ведру политику ведра, которая разрешит доступ к ведру каждой учетной записи в организации, а также доступ к ведру службе AWS Config.
Ниже приведен пример политики ведра, который демонстрирует эту конфигурацию, используя условие aws:PrincipalOrgID для разрешения доступа каждой учетной записи в организации, а затем использует Principal «Service»: «config.amazonaws.com» для предоставления AWS Config необходимого доступа к ведру.
{
"Version": "2008-10-17",
"Id": "Policy1357935677554",
"Statement": [
{
"Sid": "ListBucketAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::my-config-bucket",
"arn:aws:s3:::my-config-bucket/*"
],
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-1111111111"
}
}
},
{
"Sid": "PutObjectAccess",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-config-bucket/AWSLogs/*",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-1111111111"
}
}
},
{
"Sid": "AWSConfigBucketPermissionsCheck",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::my-config-bucket"
},
{
"Sid": "AWSConfigBucketExistenceCheck",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-config-bucket"
},
{
"Sid": "AWSConfigBucketDelivery",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-config-bucket/AWSLogs/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}
После выполнения этих предварительных условий мы можем приступить к развертыванию решения с помощью CloudFormation StackSets.
Развертывание набора StackSet
Наборы StackSet создаются в учетной записи управления AWS Organizations, используя ту же концепцию шаблона CloudFormation, что и обычный стек CloudFormation. Набор StackSet создается и нацеливается на одну или несколько организационных единиц (OU), а CloudFormation развертывает стек в каждой нацеленной учетной записи и регионе.
Для этого развертывания мы будем использовать предварительно созданный шаблон от AWS, что облегчит нашу работу. Следуйте этой процедуре для создания нового набора стеков CloudFormation в вашей учетной записи управления организациями AWS
- Войдите в AWS Console в вашей учетной записи Management с пользователем, имеющим права доступа администратора
- Перейдите к консоли службы CloudFormation
- В левой навигационной панели выберите StackSets.
- Нажмите оранжевую кнопку Create StackSet, чтобы запустить рабочий процесс развертывания нового набора StackSet.
Ниже я расскажу вам о каждом шаге рабочего процесса развертывания
Шаг 1: Выбор шаблона
Убедитесь, что выбран параметр Service-managed permissions и выберите опцию Use a sample template. В выпадающем списке Sample templates выберите опцию «Enable AWS Config with central logging».
Затем нажмите оранжевую кнопку Next.
Шаг 2: Укажите детали набора стеков
Дайте своему набору StackSet осмысленное имя. Вы можете оставить все параметры по умолчанию, за следующим исключением.
- В поле Central S3 bucket введите имя ведра S3, которое вы создали для хранения журналов конфигурации. ПРИМЕЧАНИЕ: не вводите здесь ARN, только имя ведра.
По желанию вы можете изменить следующее:
- Вы можете выбрать включение глобальных типов ресурсов, изменив этот параметр на true.
- Вы можете изменить частоту, с которой AWS config доставляет снимки конфигурации, изменив параметр Snapshot delivery frequency.
- Вы можете указать адрес электронной почты для уведомлений AWS Config в поле Notification Email.
После завершения настройки опций нажмите кнопку Next.
Шаг 3: Настройка параметров набора стеков
На этом экране примените любые теги, которые вы хотите использовать для своего набора StackSet. Вы можете оставить для Managed Execution значение Inactive или изменить его на Active, если вы хотите, чтобы CloudFormation выполнял неконфликтные операции одновременно. После завершения нажмите оранжевую кнопку Next.
Шаг 4: Настройка параметров развертывания
Оставьте для параметра развертывания значение Развертывать новые стеки.
Для целей развертывания я всегда рекомендую начинать с тестового OU при развертывании новых наборов стеков, чтобы убедиться в отсутствии проблем перед тем, как использовать всю организацию. Выберите радиокнопку Deploy to organizational units и введите идентификатор AWS OU ID в текстовое поле. (Идентификаторы OU можно получить из консоли AWS Organizations).
Оставьте для параметра Автоматическое развертывание значение включено, таким образом, если в OU добавляется новая учетная запись, новый стек будет автоматически перенесен на эту учетную запись. Поведение при удалении учетной записи должно быть настроено на удаление стеков.
В разделе Указать регионы вы можете выбрать регионы, на которые вы хотите нацелиться, из выпадающего меню или нажать кнопку Добавить все регионы. Обратите внимание, что вы должны выбирать только те регионы, которые включены в ваших целевых учетных записях, и эти регионы также должны быть включены в вашей учетной записи управления. Более подробную информацию об этом см. в этом примечании от AWS.
Наконец, в опциях развертывания выберите Максимальное количество одновременных учетных записей, на которые вы хотите одновременно развернуть стек. Вы можете оставить значение 1 или задать большее значение.
Для параметра Отказоустойчивость я рекомендую установить значение больше 0, иначе все развертывание остановится, если в одном регионе произойдет сбой одной учетной записи. Я обычно устанавливаю это значение на 2 или 3, чтобы одна ошибка не привела к сбою всего развертывания StackSet.
Параллельность регионов контролирует, сколько регионов будет развернуто одновременно для данной учетной записи. Для более быстрых операций установите значение Параллельно.
После завершения настройки параметров нажмите Далее.
Шаг 5: Обзор
Просмотрите все настройки, чтобы убедиться в их точности, а затем нажмите оранжевую кнопку Отправить. Вы перейдете на вкладку Операции для нового набора StackSet, который вы только что развернули, и он должен иметь статус Выполняется.
Если все идет хорошо, статус операции изменится с Running на Succeeded, что означает, что стек был успешно развернут во всех целевых учетных записях и регионах.
Затем вы можете перейти на вкладку Stack Instances, чтобы увидеть отдельные развертывания стека CloudFormation в каждой учетной записи и регионе. Вы также можете использовать вкладку Stack Instances в случае неудачи развертывания, чтобы узнать, что пошло не так.
Заключение и следующие шаги
В заключение, в этой статье я показал вам, как можно автоматически развернуть службу AWS Config во всех регионах для всех учетных записей AWS в вашей организации AWS, а все данные регистратора конфигурации хранить в централизованном ведре S3. Развернув эту архитектуру, вы получите возможность оценивать, аудировать и анализировать конфигурацию всех ресурсов AWS в вашем аккаунте (аккаунтах), а также отслеживать изменения в этих ресурсах с течением времени. Кроме того, если эта услуга включена для всех ваших учетных записей, вы сможете реализовать дополнительное управление в своих средах AWS с помощью правил AWS Config Rules.
Некоторые из вас, возможно, уже развернули AWS Config на своих аккаунтах децентрализованным способом, и, возможно, задаются вопросом, как перейти на централизованную архитектуру. Оставайтесь с нами, поскольку я расскажу об этом в следующем посте этой серии.
Я надеюсь, что вы нашли этот материал полезным. Если у вас есть отзывы или предложения по улучшению этого материала, пожалуйста, оставьте комментарий ниже.
Узнать больше
Если вы хотите узнать больше о службе AWS Config, вот несколько ссылок для более подробного изучения:
- Руководство разработчика AWS Config
- FAQs по AWS Config
- AWS Config Rules Development Kit @ Github
- AWS re:Invent 2018: Централизованный мониторинг конфигурации ресурсов и соответствия требованиям
- Мониторинг и устранение несоответствующих ресурсов с помощью AWS Config @ AWS YouTube
- Визуализация данных AWS Config с помощью Amazon Athena и Amazon QuickSight