AWS云具有的灵活性,动态性特点赋予了开发人员和管理人员在按需推出,配置,使用和终止处理,存储,组网和其他资源方面极大的灵活性。在任何一个快节奏的灵敏环境中,在向市场推出新产品,赢得竞争优势的比赛中,安全原则和策略可能被忽视。
想象一下,你有能力验证既存的和新推出的AWS资源符合你组织的安全原则和最优实践,但却没有产生新的官僚机构或是花费你的时间手动检查云资源。
去年我宣布你可以使用AWS Config追踪AWS资源配置。在那篇帖子中,我向你展示了AWS Config是如何捕获你的AWS资源状态以及它们之间关系的。我也讨论了Config的审计特性,包括能够选择一项资源,然后在时间轴中查看配置变化的时间轴。
新的AWS Config Rules
你可以使用AWS以及合作伙伴的既存规则,你也可以定义你自己的自定义规则。规则可指向特定的资源(以id进行区分),特定种类的资源,或者以一种特殊方式标记的资源。在这些资源被创建或修改时,规则被运行,规则也可以周期性地(按小时,按天等等)被评估。
规则可以寻找任何想要的或不想要的条件。例如,你可以:
每一个自定义规则仅仅是一个AWS Lambda函数。当函数被调用,对一项资源进行评估时,它被提供资源的Configuration Item(配置项目)。函数可以检查该项目,也可以按需要(通常根据通过IAM角色赋予的权限)调用其他AWS API函数。Lambda判断(合规或不合规)后,调用PutEvaluations函数记录判断结果和返回结果。
所有这些规则调用(你可以把它们看做合规检查)的结果以每项资源为基础进行记录和追踪,然后在AWS Management Console(AWS管理控制台)对你开放。你也可以以一种面向报表的形式或者通过Config API访问这些结果。
让我们快速浏览一下AWS Config Rules,但是在我们朝着更广泛的可用性前进的路上,我和你分享的这些东西的一些会毫无疑问地改变。像往常一样,我们期待你的反馈,并将用你的反馈来确定我们的路线图,优先安排路线图中的一些项目。
使用一条既存的规则
让我们以使用Config包括的一条规则开始。我打开Config Console,点击Add Rule:
我浏览所有的规则,决定从instances-in-vpc开始。这条规则验证一个EC2实例属于一个VPC,包含用来验证该实例属于一个特定的VPC的选项。我点击该规则,并按需要对其进行自定义:
参数Trigger type指示Config在资源被更改时或周期性地运行该规则。参数Scope of changes指示Config哪些资源才是相关的。范围可以通过资源种类(带有一个可选择的标识符),标记名称,或标记名称和值的组合来指定。如果我正在检查EC2实例,我可以触发下列任何一个:
Rule parameters区域的参数使我能够将额外的密钥/值对传递到Lambda函数。参数名称和它们的含义是特定于函数的。在这种情况下,为vpcid参数赋一个值会告诉该函数去验证该EC2实例正在特定的VPC内运行。
点击Save后,该规则生效。当我返回到Rules页面时,我可以看到我的AWS配置现在是不合规的:
我可以检查问题实例的Config时间轴来调查该问题:
结果证明是该实例已经闲了一会儿了(事实是我忘记它了)。这个示例完美展示了新的Config Rules是多么的有用!
我也可以使用Config Console来查看特定种类的所有实例的合规状态:
创建新规则
我可以使用Lambda支持的任何一种语言创建新规则。该规则接收Configuration Item和我上面提到的规则参数,可以实施需要的任何逻辑。
让我们看一下示例规则中的几条片段。该规则适用于EC2实例,所以它检查是否它在每一个实例上被调用 :
function evaluateCompliance(configurationItem, ruleParameters) { if (configurationItem.resourceType !== 'AWS::EC2::Instance') { return 'NOT_APPLICABLE'; } else { var securityGroups = configurationItem.configuration.securityGroups; var expectedSecurityGroupId = ruleParameters.securityGroupId; if (hasExpectedSecurityGroup(expectedSecurityGroupId, securityGroups)) { return 'COMPLIANT'; } else { return 'NON_COMPLIANT'; } } }
如果该规则在一个EC2实例上被调用,它检查是否预期的安全组列表中的任何一个安全组附属于该实例:
function hasExpectedSecurityGroup(expectedSecurityGroupId, securityGroups) { for (var i = 0; i < securityGroups.length; i++) { var securityGroup = securityGroups[i]; if (securityGroup.groupId === expectedSecurityGroupId) { return true; } } return false; }
最后,该规则调用Config API的putEvaluations函数存储合规检查结果:
config.putEvaluations(putEvaluationsRequest, function (err, data) { if (err) { context.fail(err); } else { context.succeed(data); } });
该规则可以记录被检查的项目或任何相关项目的结果。比如说,你正在检查以确保一个Elastic Load Balancer(ELB,弹性负载均衡器)仅附属于一个特定种类的EC2实例。你可以选择去报告ELB或者实例的合规情况(或不合规情况),取决于哪项最适合你的组织或合规模型。你可以对Config支持的任何资源类型进行该项操作。
下面展示了我如何创建一条引用了我的Lambda函数的规则:
即将面世
AWS Config Rules现在正以试用的形式推出,你现在就可以注册了。敬请期待更多信息!
原文链接: https://aws.amazon.com/cn/blogs/aws/aws-config-rules-dynamic-compliance-checking-for-cloud-resources/活动推荐:10月23 亚马逊AWS云计算研讨会之云中的安全部署与开发运维
11月13 创建你的第一个虚拟私有云(VPC)
( 翻译/吕冬梅 责编/王鑫贺 )
订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!
AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台 ,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。