设计AWS云架构方案实现基于AWS Endpoint Security(EPS)的合规性保障,使用EPS持续收集终端设备的安全状态数据(如补丁版本、密码策略),并通过CloudWatch生成合规性报告。企业可利用这些数据满足GDPR、HIPAA等法规对终端设备的安全审计要求,以及具体实现的详细步骤和关键代码。
该方案通过自动化收集终端安全数据,实时监控合规状态,并生成审计报告,满足GDPR/HIPAA要求。关键点包括SSM与CloudWatch的集成、自定义脚本的数据采集,以及Lambda的自动化处理。
架构概述
- 终端设备:EC2实例安装SSM Agent,由Systems Manager管理。
- 数据收集:使用SSM Patch Manager检查补丁,自定义脚本检查密码策略。
- 日志与监控:数据发送至CloudWatch Logs,生成指标和仪表盘。
- 合规性报告:通过CloudWatch和Lambda生成报告,满足GDPR/HIPAA审计。
详细步骤
1. 准备终端设备
- 安装SSM Agent:确保EC2实例已安装并运行SSM Agent。
- IAM角色:附加包含
AmazonSSMManagedInstanceCore
和CloudWatchLogsFullAccess
策略的IAM角色。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:*",
"cloudwatch:PutMetricData",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
2. 配置补丁合规性
- 创建补丁基线:在SSM Patch Manager中定义基准(如Critical补丁自动批准)。
- 定期扫描:设置维护窗口每周扫描实例。
AWS CLI创建补丁基线:
aws ssm create-patch-baseline \
--name "CriticalPatchBaseline" \
--approval-rules "PatchRules=[{PatchFilterGroup={PatchFilters=[{Key=CLASSIFICATION,Values=Security}}],ApproveAfterDays=7}]"
3. 检查密码策略(Linux示例)
- 创建SSM文档:运行脚本检查
/etc/login.defs
中的密码策略。
SSM Document (JSON):
{
"schemaVersion": "2.2",
"description": "Check Password Policy Compliance",
"mainSteps": [{
"action": "aws:runShellScript",
"name": "checkPasswordPolicy",
"inputs": {
"runCommand": [
"#!/bin/bash",
"pass_max_days=$(grep '^PASS_MAX_DAYS' /etc/login.defs | awk '{print $2}')",
"if [ $pass_max_days -gt 90 ]; then",
" echo 'Non-Compliant: Password max days is $pass_max_days' >> /var/log/compliance.log",
"else",
" echo 'Compliant: Password max days is $pass_max_days' >> /var/log/compliance.log",
"fi"
]
}
}]
}
- 通过Run Command执行:
aws ssm send-command \ --instance-ids "i-1234567890" \ --document-name "CheckPasswordPolicy"
4. 收集日志到CloudWatch
- 安装CloudWatch代理:配置代理将
/var/log/compliance.log
发送到CloudWatch。
代理配置 (config.json):
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/compliance.log",
"log_group_name": "EndpointCompliance",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
5. 生成CloudWatch指标与警报
- 创建Metric Filter:从日志中提取合规事件。
CLI创建Metric Filter:
aws logs put-metric-filter \
--log-group-name "EndpointCompliance" \
--filter-name "NonCompliantPassword" \
--filter-pattern "Non-Compliant" \
--metric-transformations \
metricName="NonCompliantPasswordCount",
metricNamespace="Compliance",
metricValue="1"
- 设置警报:当非合规事件超过阈值时触发SNS通知。
6. 创建合规性仪表盘
- 在CloudWatch中创建Dashboard,添加以下组件:
- 补丁合规率:
AWS/SSM
命名空间的PatchCompliance
指标。 - 密码策略违规次数:自定义
NonCompliantPasswordCount
指标。
- 补丁合规率:
7. 自动化报告生成(Lambda示例)
- 定时触发Lambda:每周查询CloudWatch指标,生成CSV报告保存至S3。
Python Lambda代码:
import boto3
import csv
from datetime import datetime
def lambda_handler(event, context):
cloudwatch = boto3.client('cloudwatch')
s3 = boto3.client('s3')
# 查询补丁合规性数据
response = cloudwatch.get_metric_statistics(
Namespace='AWS/SSM',
MetricName='PatchCompliance',
Dimensions=[{'Name': 'InstanceId', 'Value': 'i-1234567890'}],
StartTime=datetime.utcnow() - timedelta(days=7),
EndTime=datetime.utcnow(),
Period=86400,
Statistics=['Average']
)
# 生成CSV
filename = '/tmp/report.csv'
with open(filename, 'w') as f:
writer = csv.writer(f)
writer.writerow(['Time', 'Compliance%'])
for point in response['Datapoints']:
writer.writerow([point['Timestamp'], point['Average']])
# 上传至S3
s3.upload_file(filename, 'my-compliance-bucket', 'reports/weekly_patch_report.csv')
合规性保障
- 加密:启用S3桶加密、CloudWatch Logs加密(KMS)。
- 访问控制:通过IAM策略限制访问,启用AWS Config记录配置变更。
- 审计:使用CloudTrail跟踪所有API调用。