Как удалить все ресурсы, созданные федеративным пользователем aws

У меня есть сценарий использования, где я создал федеративного пользователя на лету и разрешил доступ для выполнения действий над aws в течение 30 минут. После этого я получу доступ от федеративного пользователя, но мне нужно удалить созданный им ресурс автоматически.

3 ответа

Решение

Чтобы основываться на ответе @Arafat Nalkhande, облачный след может отслеживать, что удалять, но он все еще оставляет вопрос о том, как вызвать, когда удалять.

Если ваша продолжительность была короче (15 минут или меньше), вы можете поместить в SQS задачу, которая может задержать, затем запустить лямбду, которая просматривает облачный след и выполнить удаление. Одним из возможных решений для 30-минутного планирования было бы инициирование лямбды сразу после входа в систему федеративного пользователя. Эта первая лямбда создаст 2-ю лямбду, связанную с запланированным событием, как описано здесь. Эта вторая лямбда должна содержать информацию о пользователе, инструкции по удалению всех созданных ими ресурсов и инструкции по удалению запланированного события (чтобы оно не продолжалось каждые 30 минут).

Можете ли вы рассказать о большем количестве вариантов использования? Если все ваши пользователи создают объекты s3 и количество времени не обязательно должно быть ровно 30 минут, вы можете настроить жизненный цикл корзины для удаления через 24 часа.

Для этого вы можете использовать AWS Cloudtrail. Используя AWS Cloudtrail, вы можете получить все действия, выполняемые конкретным пользователем.

Ниже приведен пример команды CLI AWS для вывода списка всех действий, выполненных пользователем.

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, чтобы сделать это программно

Если вы предоставляете пользователю какую-то игровую площадку и вам просто нужно отбросить мусор, возможно, лучшим решением будет создание организации и предоставление учетной записи для пользователя API_CreateAccount, предоставление только тех прав, которые ему необходимы, затем запускайте правило CloudWatch каждый 1 минута, чтобы проверить, какие учетные записи могут быть удалены. Гораздо легче отслеживать и меньше apis для вызова.

Другие вопросы по тегам