我的客户需要AWS春季大扫除!
在我们终止EC2实例之前,我们需要找出配置它们的人,并在删除它们之前询问它们是否仍在使用该实例。 AWS似乎没有为报告EC2实例的“所有者”/“配置者”提供开箱即用的功能,据我所知,我需要解析驻留在S3中的存档压缩日志文件的大量内容
问题是,他们的自动化是利用STS AssumeRole来配置实例。这意味着日志中的RunInstances事件不会追溯到实际用户(如果我错了,请纠正我,请我希望我错了)。
AWS blog提供了一个虚构人物Alice的故事,以及她将一个TerminateInstance事件追溯回用户的步骤,该事件涉及2个日志事件:TerminateInstance事件和AssumeRole的“时间某处”事件包含实际用户详细信息的事件。是否有一种实用的方法可以将这两个事件联系起来?
这是我的POC,它通过s3中的cloudtrail日志进行解析:
import boto3
import gzip
import json
boto3.setup_default_session(profile_name=<your_profile_name>)
s3 = boto3.resource('s3')
s3.Bucket(<your_bucket_name>).download_file(<S3_path>, "test.json.gz")
with gzip.open('test.json.gz','r') as fin:
file_contents = fin.read().replace('\n', '')
json_data = json.loads(file_contents)
for record in json_data['Records']:
if record['eventName'] == "RunInstances":
user = record['userIdentity']['userName']
principalid = record['userIdentity']['principalId']
for index, instance in enumerate(record['responseElements']['instancesSet']['items']):
print "instance id: " + instance['instanceId']
print "user name: " + user
print "principalid " + principalid
但是,细节是通用的,因为这些角色由许多组共享。如何在脚本中假定角色之前找到用户的详细信息?
更新:做了一些研究,看起来我可以通过共享的“accessKeyId”将Runinstances事件与AssumeRole事件相关联,并且应该在它承担角色之前显示帐户名称。虽然棘手。并非所有RunInstances事件都包含此accessKeyId,例如,如果'invokedby'是自动缩放事件。
答案 0 :(得分:0)
对于你提出的解决方案,遗憾的是你不幸。你可以看看http://docs.aws.amazon.com/IAM/latest/UserGuide/cloudtrail-integration.html#w28aac22b9b4b7b3b1。在第4行,它表示Assume Role将仅为所有后续调用保存角色身份。
我会联系aws支持以确保这一点,因为我很可能会弄错。
首先,请等待几天,以防有人有更好的想法,或者我错了,并通过开箱即用的解决方案获得支持答案
请注意,这不是万无一失的,因为它可能存在人为错误和可能的停机时间,因此需要进行双重检查和三重检查,对同一环境进行克隆并对其进行测试(如果您的开发环境已经具有此类一个配置,这将是最好的方案),慢慢地能够监控所有内容,并确保保留所有内容的备份。
祝你好运,并告诉我你的解决方案最终是什么。
注意:以下几点非常具体,并且是我遵守的一般规则,因为我发现它们不时给我带来麻烦。阅读它们,解雇你认为不合适的东西,并采取你觉得合理的东西。
我建议的是在开发环境中向用户自己授予权限,因为它会将事情跟踪到他们的根目录并找到最有经验的人来更轻松地解决问题。在生产环境中,一切都应该是自动化的(在需要时创建并在不再需要时删除)并且任何人都不应该对该帐户具有任何写入权限。
至于假定角色,我只使用它以防我想要访问另一个帐户的只读生产日志。另一种情况是真的不应该发生的事情,如果有的话,但仍然需要让一些用户访问它。所以,作为一个额外的保护层来防止'我错误地做了',我让他们切换角色去做,并且永远不会有一个自动切换角色并执行操作的脚本,以尽量使其尽可能慎重(想想删除数据库等)。另一件事是访问敏感信息(信用卡数据库等)。可能会出现更多情况,这取决于您的判断。
再次,祝你好运。