Создайте CloudWatch Alarm, чтобы уведомить о том, что объект S3 стал общедоступным.

Я хочу создать в CloudWatch метрический фильтр и основанный на нем сигнал тревоги, чтобы уведомлять меня о событиях S3, особенно когда файл или корзина являются общедоступными. Это фильтр метрики, который я использовал для создания метрики:

{($ .eventSource = s3.amazonaws.com) && (($ .eventName = PutBucketAcl) || ($ .eventName = PutObjectAcl)) && (($ .requestParameters.AccessControlPolicy.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"
    }
  ]
}

Я щелкнул Test Pattern и получил следующее сообщение:

Результаты Найдено 0 совпадений из 50 событий в образце журнала.

metric filter правильный и правильный? У меня должен быть один результат, но его нет.




Ответы (1)


Вычислить, предоставляет ли политика открытый доступ, довольно сложно из-за множества способов, которыми правила могут быть указаны в политике сегмента (например, подстановочные знаки могут предоставлять доступ).

Более простой подход - использовать проверку Разрешения Amazon S3 Bucket в Trusted Advisor:

Проверяет корзины в Amazon Simple Storage Service (Amazon S3), которые имеют разрешения на открытый доступ или разрешают доступ любому аутентифицированному пользователю AWS.

Затем вы можете отслеживать результаты проверки доверенного советника с помощью событий Amazon CloudWatch.

Однако эта конкретная проверка не входит в уровень бесплатного пользования для Trusted Advisor. Вы должны быть на плане поддержки, чтобы эта проверка работала.

Консоль Amazon S3 также была недавно обновлена ​​- теперь она четко показывает все корзины с общедоступными разрешениями.

person John Rotenstein    schedule 14.11.2017
comment
Да, я знаю, что Trust Advisor предоставляет это, но мне нужно уведомление от SNS на мой почтовый ящик, так как я управляю многими учетными записями AWS, и мне сложно проверить учетную запись Trust Advisor по учетной записи. События CloudTrail всех учетных записей централизованы в одной корзине, и мне нужно установить на нее фильтр метрик. - person Souad; 14.11.2017
comment
Мне нужно это оповещение, даже если оно сложное. - person Souad; 14.11.2017
comment
Согласно приведенной выше ссылке, Trusted Advisor может инициировать событие CloudWatch, которое может отправлять уведомление SNS. - person John Rotenstein; 14.11.2017
comment
Мы работаем в регионе eu-west-1, и правила Trust Advisor там недоступны. - person Souad; 14.11.2017
comment
Верный. Как указано в документации, вы должны использовать Amazon CloudWatch Events в us-east-1 для доступа к Trusted Advisor. Однако проверки Trusted Advisor для Amazon S3 являются глобальными, поэтому они все равно будут доступны в us-east-1. - person John Rotenstein; 14.11.2017
comment
Еще одна причина, по которой я не могу рассчитывать на Trust Advisor, заключается в том, что он говорит только тогда, когда ведро является общедоступным, а не на уровне объекта. - person Souad; 14.11.2017