1

我们有一个带有 lambda 的帐户 A 和一个调用它的角色。我们有帐户 B、C、D,它们被允许假设 A 角色并调用该 lambda。

现在的问题是:我们对 lambda 的调用太多,我们想弄清楚哪些帐户最活跃地使用它。因此,在 lambda 代码中,我想知道是谁在调用它并编写一些日志或放置一些指标记录。但看起来我无法用代码找到它(至少在java中)。

我还启用了 cloudtrail 数据事件,现在在跟踪中我可以看到一些关于我的 lambda 调用的附加信息。“userIdentity”字段看起来很有希望,但它也不包含有关担任该角色的原始帐户的任何信息。唯一可能有用的信息是在承担角色操作期间提供的角色会话名称。但是 B、C、D 服务没有提供任何合理的会话名称,只是一些随机的东西。

目前我只看到两个选项,并且都需要更改依赖服务:提供帐户 ID 或服务名称作为角色会话名称,或者为每个 B、C 和 D 服务创建独立的可承担角色。

在不更改这些服务的代码的情况下,是否有任何其他可能性可以追踪到这一点?

4

1 回答 1

0

@jellycsc 的评论确实提供了答案,尽管该文档对如何设置自动审计系统进行了相当冗长的描述。简短的回答是:一切都在 CloudTrail 中。

正如您已经确定的那样,您可以在 CloudTrail中找到InvokeFunctionor事件。InvokeAsyncuserIdentityCloudTrail 事件的对象中,查看该accessKeyId字段。我们希望使用此字段而不是arn字段(其中包含代入角色的 ARN),因为每次代入角色时它都是唯一的(这意味着它允许您将特定操作链接InvokeFunction到特定AssumeRole操作)。

现在,您要查找事件类型为 的 CloudTrail管理事件(不是数据事件)AssumeRole,其中responseElements. credentials. accessKeyId字段与accessKeyId您在上一步中找到的匹配。这是第一次假定用于调用 Lambda 的角色的事件。在userIdentity事件的对象中,您将找到担任该角色的用户的凭据,即通过该担任的角色实际调用 Lambda 的原始用户。

于 2021-08-03T15:57:18.720 回答