Запретить CreateBucket в S3, если не проверено шифрование AES256

Я пытался большую часть дня. Я, как администратор, пытаюсь потребовать, чтобы пользователи проверяли кнопку «Автоматически шифровать объекты, когда они хранятся в S3» (AES256) при создании своих корзин S3. Я пробовал все, что только можно придумать. Пока что я получил только 2 отдельных результата.

Как тестовый пользователь, мне либо разрешено создавать корзины (с проверкой шифрования или без нее), либо мне отказывают (с проверкой шифрования или без нее).

Последнее усилие привело к тому, что к тестируемому пользователю была применена следующая политика, и в этом случае мне отказывают в создании корзины, независимо от того, отмечу ли я флажок шифрования.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "s3:CreateBucket"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-content-sha256": "AES256"
                },
                "Null": {
                    "s3:x-amz-content-sha256": true
                }
            }
     ]

}

Я объединил указанную выше политику с S3AllowFullAccess с другими настраиваемыми политиками, разрешающими доступ, но я просто не могу заставить ее работать.

Любая помощь приветствуется


person jjones150    schedule 24.07.2019    source источник


Ответы (1)


Команда CreateBucket() не принимает настройку шифрования сегмента.

Например, при создании корзины из интерфейса командной строки AWS доступны следующие параметры:

aws s3api  create-bucket
[--acl <value>]
--bucket <value>
[--create-bucket-configuration <value>]
[--grant-full-control <value>]
[--grant-read <value>]
[--grant-read-acp <value>]
[--grant-write <value>]
[--grant-write-acp <value>]
[--object-lock-enabled-for-bucket | --no-object-lock-enabled-for-bucket]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Невозможно указать шифрование сегмента.

Вместо этого шифрование корзины указывается с помощью команды put-bucket-encryption:

aws s3api put-bucket-encryption
--bucket <value>
[--content-md5 <value>]
--server-side-encryption-configuration <value>
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]

Это означает, что невозможно создать политику на CreateBucket(), которая принудительно устанавливает значение шифрования на стороне сервера. Его необходимо установить после создания корзины.

Вы можете создать правило событий Amazon CloudWatch, которое активируется CreateBucket() и запускает функцию AWS Lambda. Затем вы можете закодировать функцию для вызова PutBucketEncryption() в корзине.

Обновление: вместо настройки шифрования на уровне сегмента можно использовать политику, требующую шифрования самих объектов.

Вот Пример политик управления услугами от AWS Organizations. это требует, чтобы все загружали только объекты с шифрованием:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyIncorrectEncryptionHeader",
      "Effect": "Deny",
      "Action": "s3:PutObject",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    },
    {
      "Sid": "DenyUnEncryptedObjectUploads",
      "Effect": "Deny",
      "Action": "s3:PutObject",
      "Resource": "*",
      "Condition": {
        "Null": {
          "s3:x-amz-server-side-encryption": true
        }
      }
    }
  ]
}
person John Rotenstein    schedule 24.07.2019