我们有几个大型 AWS 账户,我的任务是实施资源监控指南并确保为所有现有和未来的资源设置监控。
有没有办法通过调用基于资源选项和/或自定义条件的规则来防止资源创建/修改?例如,除非启用了增强监控,否则不允许创建 RDS 实例,或者不允许在没有某些特定 CloudWatch 警报的情况下创建任何 EC2 实例。
我研究过策略/护栏,但似乎不够强大。其他人在这个场景中使用什么?
编辑我一直在考虑将 AWS Config 作为一种潜在的解决方案,但似乎有很多限制。例如,我可以审核 RDS 集群以查看它们是否针对某些指标创建了警报,但我无法对 RDS 实例执行相同操作。
答案1
使用 SCP 防止创建资源
在某些情况下,您可以使用服务控制策略来满足此类需求,但仅与正在创建的资源的属性有关 - 据我所知,如果尚未创建 CloudWatch 警报,则说“您无法创建 EC2 实例”是行不通的。
AWS 上有一些服务控制策略示例这一页,我将在下面复制一个。我曾使用过这种技术来执行以下任务,例如,如果未加密,则阻止创建 EC2 实例;如果未加密,则阻止创建 EBS 卷;如果未加密,则阻止创建 RDS。
来自亚马逊的示例 SCP:使用此 SCP,任何未使用 t2.micro 实例类型的实例启动都将被拒绝。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "RequireMicroInstanceType",
"Effect": "Deny",
"Action": "ec2:RunInstances",
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringNotEquals":{
"ec2:InstanceType":"t2.micro"
}
}
}
]
}
自动修复
您可以考虑在创建资源后进行自动修复。AWS Config 之类的程序可以在每次创建资源时收到通知,运行 Lambda 脚本,然后您可以运行自定义代码来检测状态并设置相关资源。同样,这是自定义的,但我们过去已经这样做了。例如,当创建 S3 存储桶时,我们会打开日志记录和版本控制,除非设置了特定标签。
同样,您可以删除不合规的资源,而不是自动修复。
使用 IAM 权限阻止创建资源
除了删除不合规的资源外,您还可以考虑减少用户的权限,使他们无法直接创建资源,并建立某种自助服务系统为他们设置资源,并设置所有必需的相关资源。我自己没有这样做过,所以我不能确切地说怎么做。
这可以简单到允许您提供的 CloudFormation 模板在服务角色下运行,但不允许用户直接创建资源。