通过AWS Config 管理AWS服务配置
之前的一篇安全相关的文章《从永恒之蓝开始,安全防范没有结束》中,提到通过AWS Config自动规范AWS服务的安全、合规方面的配置。
为更好遵从各行业的合规要求,构建安全的IT环境,企业的安全团队一般都会在明确安全/管理边界的前提下,选择相关安全框架,用对应的风险评估方法梳理出符合自身业务特点的安全模型。根据安全模型,通常也会用各种文档标准化抽象为各种管理策略,例如可能包含以下常见的内容:
- 用户权限策略
- 访问控制策略
- 服务器安全策略
- 应用接入策略
- 网络分区策略
- 数据传输策略
- 数据存储策略
- 备份归档策略
- 日志记录策略
- 审计管理策略
……….
在实际的应用场景中,标准策略可能会因为业务的变化或管理方式的变化动态调整,如何持续评估和审核在AWS云端的资源配置的合规性是否与企业规划一致?如何帮助用户在云端更好的实现变更管理,安全分析甚至自动修正不合规的配置 ?这种场景下,可以考虑用AWS Config 服务来帮忙。
一、AWS config 是什么
AWS Config 是一项托管服务,借助 Config您可以盘点AWS 资源、查看配置更改以及 AWS 资源之间的关系并深入探究详细的资源配置历史记录。使用 Config,还能通过自定义规则来定义所需的资源配置、内部最佳实践和指南,并依据这些规则评估您记录的配置。
AWS Config的主要应用功能:
- 评估您 AWS 资源配置是否具备所需设置。
- 获得与您的 AWS 账户关联的受支持资源的当前配置快照。
- 检索您的账户中的一个或多个资源配置。
- 检索一个或多个资源的历史配置。
- 在资源被创建、修改或删除时接收通知。
- 查看不同资源之间的关系。例如,您可能想要找到使用特定安全组的所有资源
AWS Config工作原理
更多AWS Config的信息可以参考https://aws.amazon.com/cn/config/
二、 AWS config 配置测试
为了更好了解AWS Config的工作过程,以下 将以AWS安全组的配置监控为例做一个简短测试 。
1. 测试场景:
- 一个为web服务器配置的安全组,该安全组策略只允许对Internet开放HTTP和HTTPS两个端口;
- 配置AWS Config 规则,当该安全组配置规则中添加了其他端口时,AWS Config 自动记录,并触发修复机制自动删除新加入的不合规的配置。
2. 配置过程
a. 权限准备。为成功配置AWS Config 规则,需要创建IAM 角色,授予 AWS Config 权限,使其可以访问Amazon S3 存储桶、Amazon SNS 主题,获取受支持的 AWS 资源的配置详细信息。IAM内置了一个AWSConfigRole的托管策略 。
新建一个IAM Role 命名为awsconfigrole, 可以直接附加该策略:
另外,测试过程中将使用lambda自动对安全组执行安全组操作,cloudwatch log操作,也需要建立好对应的IAM role并编辑策略赋予对应的权限,在测试中该IAM role为:awsoncifgec2security
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"config:PutEvaluations",
"ec2:DescribeSecurityGroups",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": "*"
}
]
}
b. 配置AWS Config Setting。在AWS 控制台,打开 AWS Config ,具体过程可以参考:http://docs.aws.amazon.com/zh_cn/config/latest/developerguide/gs-console.html
在本测试过程中,我们选择资源类型为SecurityGroup:
在配置过程中,指定一个存储桶保存日志,并指定预先为AWS Config 的IAM Role ,当然也可以在这个步骤选择新建角色:
在上述页面中,可以选择是否通过SNS 启用通知将信息流式传输到 Amazon SNS 主题,发送配置历史记录传输、配置快照传输和合规性等通知。
在Resources页面中验证一下,评估的对象是否能正常的筛选出来,本例中我们是对测试的安全组进行查找:
c. AWS Config 规则配置。AWS Config提供一些内置的规则,也支持自定义规则创建。在前文中提及测试的背景中需要通过自动机制保证安全组规则符合设定的合规配置,我们将通过lambda完成该步骤。在创建规则的过程中,按向导设置规则名称,点击新建lambda功能按钮:
在lambda创建过程中,选择blank blueprint 并为函数指定runtime为python2.7 ,将准备好的代码保存在s3(可以在github中找到相关代码参考,比如https://github.com/awslabs/aws-config-rules )并上传。
Lambda函数主要完成以下工作:
- lambda函数中按照要求只开启tcp 80 和tcp 443端口;
- 如果有其他端口添加到配置规则中将被删除,最终保证安全组的配置规则条目中只有tcp80和tcp443相关的配置;
- 相关的操作将记录在cloudwath logs中。
在创建过程中,为lambda指定对应的IAM Role.
lambda创建完成后,需要在AWS Config 规则页面中指定Lambda ARN, 配置触发器。本例中,当安全组配置发生变化时即触发对安全组的评估,也可以配置按照时间周期的评估对象。 另外,为了详细记录评估信息,为规则启用debug级别的记录。
AWS config 规则后,当前的安全组配置将自动被评估。
d. 验证。为触发AWS Config 对安全组的评估, 我们在对应的安全组规则中除tcp 80 和tpc443,额外新添加tcp445 端口。在cloudwathc logs中创建了logs group,可以进行相关日志查看:
在日志中可以清楚看到对安全组有revoking的行为,操作的端口正是额外添加的tcp445 , 并且最终将安全组只开启tcp80 和tcp443 端口。
三、进一步讨论
在上述测试过程中,大致可以了解AWS Config的工作机制和配置流程,下面进一步对一些场景的应用场景做进一步说明。
资产发现
AWS Config 不仅会发现账户中的资源、记录其当前配置并捕获对这些配置所做的任何更改,Config 还会保留已删除资源的详细配置信息。所有资源及其配置属性的完全快照在您的账户中提供完整的资源库。
持续安全分析
AWS Config 提供的数据可使您持续监控您的资源配置情况,并评估这些配置是否具有潜在的安全弱点。对您的资源配置进行更改,将触发系统发送 Amazon Simple Notification Service (SNS) 通知,这些通知可发送给您的安全团队,以便他们查看通知并采取相应措施。发生潜在的安全事件后,您可以使用 Config 查看资源的配置历史记录并检查您的安全状况。
正如测试过程中展示,企业IT团队只需明确制定相关的策略,配置AWS Config规则,AWS Config提供了托管规则和自定义规则,能满足各种就能持续监控相关的安全标准是否合规。借助 AWS Config,利用 AWS Lambda 中的自定义规则将合规性要求编制成代码,这些代码会定义资源配置内部最佳实践和指南。您可以使用 Config 自动评估您的资源配置和资源更改,从而确保整个 AWS 基础设施实现持续合规性和自主监管。通过这个机制,为企业的安全自动化提供了一个可行选项。
变更管理
在创建、更新或删除资源时,AWS Config 会将这些配置更改流式传输到 Amazon Simple Notification Service (SNS),如此便会收到所有配置更改通知。根据通知机制也可以考虑引入基于事件触发的机制,进一步集成各个管理环节。
在AWS Config按照既定规则完成评估后,可以在规则的详细信息中查看到具体的变更事件记录:
审计
AWS CloudTrail 将记录账户上的用户 API 活动,将保存有关 API 操作的完整详细信息,如发起人的身份、该 API 调用的时间、请求参数和 AWS 服务返 。AWS Config 与AWS CloudTrail 集成 ,回答“谁进行了修改此资源的 API 调用?”例如下图, 使用集成的 AWS CloudTrail 信息,可以发现是哪个用户错误配置了安全组。
综合上述讨论,企业内部资产管理团队可以清楚明确当前在AWS云端的数字资产,安全团队可以将严格制定的安全体系持续的在云端自动化运行,任何相关的变更和配置管理都能详尽的记录,方便后续的审计。
更多关于AWS Config的一些常见问题可参考:https://aws.amazon.com/cn/config/faq/