Создать CloudWatch Alarm, чтобы уведомить о настройке объекта S3 для общего доступа
Я хочу создать в CloudWatch метрический фильтр и сигнал тревоги на его основе, чтобы уведомлять меня о событиях S3, особенно когда файл или корзина установлены в открытый доступ. Это фильтр метрики, который я использовал для создания метрики:
{($.eventSource = s3.amazonaws.com) && (($.eventName = PutBucketAcl) || ($.eventName = PutObjectAcl)) && (($.requestParameters.AccessControlPolicy.AccessControlList.AccessControlList.Grant.Grantee.type = Group))}
Я проверял это pattern
поставив следующее Custom log data
:
{
"Records": [
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2015-08-26T20:46:31Z",
"eventSource": "s3.amazonaws.com",
"eventName": "DeleteBucketPolicy",
"awsRegion": "us-west-2",
"sourceIPAddress": "127.0.0.1",
"userAgent": "[]",
"requestParameters": {
"bucketName": "myawsbucket"
},
"responseElements": null,
"requestID": "47B8E8D397DCE7A6",
"eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2015-08-26T20:46:31Z",
"eventSource": "s3.amazonaws.com",
"eventName": "PutBucketAcl",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"bucketName": "",
"AccessControlPolicy": {
"AccessControlList": {
"Grant": {
"Grantee": {
"xsi:type": "Group",
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
},
"Permission": "FULL_CONTROL"
}
},
"xmlns": "http://s3.amazonaws.com/doc/2006-03-01/",
"Owner": {
"ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
}
}
},
"responseElements": null,
"requestID": "BD8798EACDD16751",
"eventID": "607b9532-1423-41c7-b048-ec2641693c47",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2015-08-26T20:46:31Z",
"eventSource": "s3.amazonaws.com",
"eventName": "GetBucketVersioning",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"bucketName": "myawsbucket"
},
"responseElements": null,
"requestID": "07D681279BD94AED",
"eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
}
]
}
Я нажал "Тестовый образец" и получил это сообщение:
Найдено результатов: 0 совпадений из 50 событий в журнале образцов.
Это metric filter
правильно и правильно? У меня должен быть один результат, но он не подходит.
1 ответ
Расчет того, предоставляет ли политика открытый доступ, довольно сложен из-за множества способов, которыми правила могут быть указаны в Bucket Policy (например, групповые символы могут предоставлять доступ).
Более простой подход - использовать проверку разрешений корзины Amazon S3 в Trusted Advisor:
Проверяет сегменты в Amazon Simple Storage Service (Amazon S3), которые имеют разрешения на открытый доступ или разрешают доступ любому аутентифицированному пользователю AWS.
Затем вы можете отслеживать результаты проверки доверенных советников с помощью событий Amazon CloudWatch.
Однако эта конкретная проверка не включена в уровень бесплатного пользования для Trusted Advisor. Вы должны быть в плане поддержки для того, чтобы эта проверка работала.
Консоль Amazon S3 также была недавно обновлена - теперь она четко показывает все сегменты с открытыми разрешениями.