我想提醒您ec2上的证书将在30天后过期。
我在不同的自动伸缩组上运行了不同的证书。所有Auto Scaling组的大小都不同,范围从3到30个ec2实例。
我至少希望收到一条警报,提示““ {Path}中的{证书}即将过期”
但理想情况下,希望收到一条警报,提示“ {Auto Scaling Group}上{Path}中的{Certificate}将在30天后过期”。但是我不确定如何从ec2实例中获取自动缩放组名称信息。
我不想在同一(证书,路径,Auto Scaling组)元组上收到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"
}
]
}
这是生成上面json的python脚本的简化:
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.创建一个运行python脚本的cronjob,该脚本查找过期后不到30天的证书,并将其信息发布到SNS。
优势:
缺点:
解决方案2:创建一个每天运行一次python脚本的cronjob,以查找过期后不到30天的证书,然后使用以下指标将其发布到cloudwatch:Certifcate / DaysUntilExpiration {Name,Path}。
优势:
缺点:
解决方案3:创建一个python脚本,当计算机上的证书距到期日不足30天时,该脚本将失败。创建一个运行此python脚本的SSM维护窗口,并在SSM维护窗口收到此失败命令时发送SNS通知。
优势:
缺点:
请让我知道您将如何解决此问题。