如何删除 aws 联合用户创建的所有资源

How to remove all resources created by aws federated user

我有一个用例,我在其中动态创建了联合用户并允许访问在 aws 上执行操作 30 分钟。之后我将从联合用户那里收回访问权限,但我需要通过自动方式删除他创建的资源。

您可以使用 AWS Cloudtrail。 使用 AWS Cloudtrail,您可以获得特定用户执行的所有操作

以下是一个示例 AWS CLI 命令,用于列出用户执行的所有操作

aws cloudtrail lookup-events --lookup-attributes AttributeKey=Username,AttributeValue=Some.Federated.User@MyCompany.com

一旦你有了,你就可以提取用户创建的所有资源的列表,然后相应地删除它们。

以下是您在用户创建 SNS 主题时获得的示例事件

{
    "EventId": "HHHHe1bc-73b1-4c0c-bcaa-6666947f3eec",
    "Username": "Some.Federated.User@MyCompany.com",
    "EventTime": 1534234453.0,
    "CloudTrailEvent": "{\"eventVersion\":\"1.05\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"KKKKAJOTFHFJGLLFGHJF34:Some.Federated.User@MyCompany.com\",\"arn\":\"arn:aws:sts::888888888888:assumed-role/dev/Some.Federated.User@MyCompany.com\",\"accountId\":\"888888888888\",\"accessKeyId\":\"ASIA53RBKAC2XUI7CT5W\",\"sessionContext\":{\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2018-08-14T08:11:35Z\"},\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"KKKKAJOTFHFJGLLFGHJF34\",\"arn\":\"arn:aws:iam::888888888888:role/dev\",\"accountId\":\"888888888888\",\"userName\":\"dev\"}}},\"eventTime\":\"2018-08-14T08:14:13Z\",\"eventSource\":\"sns.amazonaws.com\",\"eventName\":\"CreateTopic\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"121.244.109.2\",\"userAgent\":\"aws-cli/1.11.47 Python/2.7.9 Windows/8 botocore/1.5.10\",\"requestParameters\":{\"name\":\"Temp6789\"},\"responseElements\":{\"topicArn\":\"arn:aws:sns:us-east-1:888888888888:Temp6789\"},\"requestID\":\"3787d2fe-a88c-53ee-h328-81123919c93e\",\"eventID\":\"HHHHe1bc-73b1-4c0c-bcaa-6666947f3eec\",\"eventType\":\"AwsApiCall\",\"recipientAccountId\":\"888888888888\"}",
    "EventName": "CreateTopic",
    "EventSource": "sns.amazonaws.com",
    "Resources": []
}

并且您可以使用任何可用的 AWS SDK 以编程方式执行此操作

如果您允许用户使用某种游乐场区域并且只需要丢弃垃圾,也许最好的解决方案是创建一个 Organization and provision the account for the user API_CreateAccount ,然后仅授予他们需要的权限 运行 CloudWatch 规则每 1 分钟检查一次可以删除哪些账户。跟踪更容易,调用的 API 更少。

基于@Arafat Nalkhande 的回答,cloud trail 可以跟踪要删除的内容,但它仍然留下了如何触发何时删除的问题。

如果你的持续时间较短(15 分钟或更短),你可以在 SQS 中放置一个可能延迟的任务,然后触发一个 lambda 来查看云轨迹并执行删除。 30 分钟计划的一个可能解决方案是在联合用户登录时立即触发 lambda。第一个 lambda 将创建与计划事件 as explained here 关联的第二个 lambda。第二个 lambda 需要包含用户的信息、删除他们创建的所有资源的说明以及删除计划事件的说明(因此它不会每 30 分钟保留 运行)。

你能分享更多的用例吗?如果您创建的所有用户都是 s3 对象,并且时间量不必正好是 30 分钟,您可以设置一个存储桶生命周期以在 24 小时后删除。