안녕하세요 맥썸입니다.
오늘의 포스팅은 AWS 서비스를 이용하여 만료된 도메인 인증서를 알람을 통해 만료 되기 전, 메일로 확인 할 수 있는 알람 환경을 구성하고자 합니다.
🔷 AWS 서비스
- SNS : 각각의 Protocol을 통해 채널에 알람을 보냅니다.
- Lambda : Function을 통해 서버를 프로비저닝하거나 관리하지 않고 코드를 실행합니다.
- Cloudwatch : Rule를 통해 이벤트를 예약된 간격으로 Lambda Function을 트리거하는데 사용합니다.
🔷 Step 1. SNS
- Topic 생성
- Type: Standard
- Subscription 생성
- 해당 Topic에서 진행하면 Topic ARN을 입력하지 않아도 자동 할당 됩니다.
- Protocol: EMAIL
- Endpoint: 메일 형식
>> 구독에 추가된 메일을 승인 하여야 Pending confirmation 상태에서 Confirmed 상태로 변경 됩니다.
🔷 Step 2. Lambda
- Function 생성
- Function: Author from scratch
- Runtime: Python 3.7
- Permissions - Execution role: Create a new role form AWS Policy templates
- Role Name
- Policy Templates: Amazon SNS publish policy
- Code
import socket
import ssl, boto3
import re,sys,os,datetime
def ssl_expiry_date(domainname):
ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'
context = ssl.create_default_context()
conn = context.wrap_socket(
socket.socket(socket.AF_INET),
server_hostname=domainname,
)
# 3 second timeout because Lambda has runtime limitations
conn.settimeout(3.0)
conn.connect((domainname, 443))
ssl_info = conn.getpeercert()
return datetime.datetime.strptime(ssl_info['notAfter'], ssl_date_fmt).date()
def ssl_valid_time_remaining(domainname):
"""Number of days left."""
expires = ssl_expiry_date(domainname)
return expires - datetime.datetime.utcnow().date()
def sns_Alert(dName, eDays, sslStatus):
sslStat = dName + ' SSL certificate will be expired in ' + eDays +' days!! '
snsSub = dName + ' SSL Certificate Expiry ' + sslStatus + ' alert'
print (sslStat)
print (snsSub)
response = client.publish(
TargetArn="arn:aws:sns:REGION:ACCOUNT_ID:SNS_TOPIC_ARN",
Message= sslStat,
Subject= snsSub
)
#####Main Section
client = boto3.client('sns')
def lambda_handler(event, context):
f = ['DOMAIN_NAME']
for dName in f:
print(dName)
expDate = ssl_valid_time_remaining(dName.strip())
(a, b) = str(expDate).split(',')
(c, d) = a.split(' ')
# Critical alerts
if int(c) < 15:
sns_Alert(dName, str(c), 'Critical')
# Frist critical alert on 20 th day
elif int(c) == 10:
sns_Alert(dName, str(c), 'Critical')
#second warning alert on 40th day
elif int(c) == 15:
sns_Alert(dName, str(c), 'Warning')
#First warning alert on 50th day
elif int(c) == 20:
sns_Alert(dName, str(c), 'Warning')
else:
print('Everything Fine..')
🔷 Step 3. Cloudwatch
- Rule 생성
- 매일 아홉시 알람 발생 할 수 있도록 설정
- Rule type: Schedule
- Schedule pattern: A fine-grained schedule that runs at a specific time, such as 8:00a.m. PST on the first Monday of every month.
- Cron expression: cron (00 1 * * ? *)
- Target
- Type: AWS service
- Select a target: Lambda Function
- Functio: 이전에 생성한 Lambda Function 선택
🔷 Step 4. Lambda Function Trigger
- Trigger Configuration
- Select a source: EventBridge (CloudWatch Events)
- Existing rules: 이전에 생성한 Cloudwatch Rule 선택
🔷 Step 5. Test
화이팅 입니다.
'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글
AWS Instance profile (0) | 2022.10.02 |
---|---|
[AWS] Auto Scaling - 실습2 (1) | 2022.09.30 |
[AWS] Auto Scaling - 실습1 (1) | 2022.09.23 |
[AWS] WAF (0) | 2022.09.23 |
Apache Ignite 소개 및 설치 방법 (0) | 2022.09.19 |
댓글