我有一个用例,我动态创建了联合身份用户,并允许访问在 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 开发工具包以编程方式执行此操作
为了建立@Arafat Nalkhande的答案,Cloud Trail可以跟踪要删除的内容,但它仍然留下了如何触发何时删除的问题。
如果您的持续时间较短(15 分钟或更短(,您可以在 SQS 中放置一个可能会延迟的任务,然后触发一个查看云跟踪的 lambda 并执行删除。 30 分钟调度的一种可能解决方案是在联合用户登录后立即触发 lambda。第一个 lambda 将创建与计划事件关联的第二个 lambda,如此处所述。第二个 lambda 需要包含用户的信息、删除他们创建的所有资源的说明以及删除计划事件的说明(因此它不会每 30 分钟运行一次(。
你能分享更多用例吗?如果您的所有用户都在创建 s3 对象,并且时间量不必正好为 30 分钟,则可以设置存储桶生命周期以在 24 小时后删除。
如果您允许用户使用一种游乐场区域,并且只需要丢弃垃圾,也许最好的解决方案是创建一个组织并为用户预置账户 API_CreateAccount ,仅授予他们需要的权限,然后每 1 分钟运行一次 CloudWatch 规则以检查哪些账户可以删除。更容易跟踪,调用的 API 更少。