Я хотел бы предупредить, когда срок действия сертификата на ec2 истекает через 30 дней.
У меня разные сертификаты, работающие в разных группах автоматического масштабирования. Все группы автоматического масштабирования имеют разные размеры в диапазоне от 3 до 30 экземпляров ec2.
Как минимум, я хотел бы получить предупреждение, в котором говорится, что "{Certificate} в {Path} истекает"
Но в идеале хотелось бы получить предупреждение о том, что срок действия "{Certificate} в {Path} в {Auto Scaling Group} истекает через 30 дней". Однако я не уверен, как получить имя группы автоматического масштабированияинформация из экземпляра ec2.
Я не хочу получать 30 предупреждений об одном и том же кортеже (сертификат, путь, группа автоматического масштабирования) - только одно предупреждение.
Я разработалPython-скрипт, который выводит информацию о сертификате компьютера в JSON. Пример:
{
"HostName": "SomeEC2Instance",
"MachineCertInfo":[
{
"Name": "example.crt",
"DaysUntilExpiration": 100,
Path: "/some/path/to/example.crt"
},
{
"Name": "another_example.crt",
"DaysUntilExpiration": 20,
"Path": "/some/path/to/another_example.crt"
}
]
}
Ниже приведено упрощение Python-скрипта, создающего json:
import json
import socket
cert_infos = []
# Recursively seach entire machine for all files ending in .crt
for path in Path('/').rglob('*.crt'):
# get_cert_info returns the name and days until expiration
name, expiration = get_cert_info(path)
res.append(
{
"Name": name,
"DaysUntilExpiration": expiration,
"Path": path.as_posix(),
}
)
res = {"Hostname": socket.get_hostname(), "MachineCertInfo": cert_infos}
print(json.dump(res))
Я пропустилИсходный код get_cert_info, поскольку он является относительно сложным и на самом деле не является проблемой. Я подтвердил, что он надежно работает для моего сценария использования.
Из-за способа, которым этот скрипт являетсяреализовано, его необходимо запустить на экземпляре ec2, чтобы получить эту информацию Я уже установил этот скрипт на каждом экземпляре ec2.
Некоторые подходы, которые я рассмотрел:
Решение 1. Создатьcronjob, который запускает скрипт python, который находит сертификаты, срок действия которых истекает <30 дней, и отправляет их информацию в SNS. </p>
Преимущества:
- Простота реализации
Недостатки:
- Я получу 30 таких же предупреждений, так как у моей самой большой автомасштабной группы есть 30 экземпляров с одинаковыми сертификатами
- Мне нужно установить boto3 на мой ec2,которого я хотел бы избежать, если смогу
Решение 2. Создайте cronjob, который запускает скрипт python один раз в день, который находит сертификаты, срок действия которых меньше 30 дней, и отправляет их в cloudwatch с метрикой: Certifcate / DaysUntilExpiration {Имя, Путь}.
Преимущество:
- Я получу по одному предупреждению для каждого (Имя, путь) кортежа
- Простота реализации
Недостаток:
- Мне нужно будет создать уникальный сигнал тревоги для каждой уникальной комбинации измерений метрики DaysUntilExpiration.
- Если я переместу сертификат или изменим его имя, мне нужно будет не забыть удалитьоповещение, связанное со старым именем / путем. В противном случае он просто будет неопределенно долго находиться в «недостаточном состоянии».
- Мне нужно установить boto3 на мой ec2, чего я бы хотел избежать, если смогу
Решение 3: Создатьскрипт python, который завершается ошибкой, когда срок действия сертификата на компьютере составляет менее 30 дней. Создайте окно обслуживания SSM, которое запускает этот скрипт Python и отправляет уведомление SNS, когда окно обслуживания SSM получает эту неудачную команду.
Преимущество:
- Не нужно устанавливать boto3 на моемec2
- Я получил бы только одно предупреждение, когда срок действия сертификата близок к истечению
Недостаток:
- Я не знаком с SSM, поэтому естьмного неопределенностей. Какую информацию я могу отправить в SNS? Будет ли это просто «эта команда не выполнена» или я могу добавить сообщение об ошибке, с которым она не справилась?
- Может быть сложнее реализовать
Пожалуйста, дайте мне знать, как вы решите эту проблему.