Требовать шифрование KMS с определенным идентификатором ключа в политике сегмента S3
Я пытаюсь сделать так, чтобы все объекты, помещенные в корзину, были зашифрованы с помощью определенного ключа KMS. Мне удалось потребовать шифрование KMS, но спецификация ключа не работает. Вот текущая политика (без реальных имен и идентификаторов):
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenyInsecureCommunications",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket1,
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
},
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucket1/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms",
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:eu-central-1:123456789:key/12345-123-notmy-keyid-1234566"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucket1/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
}
Это корректно запрещает загрузку без указания шифрования на стороне сервера, но позволяет использовать ключ s3 по умолчанию.
1 ответ
Если существует несколько операторов условия или если к одному оператору условия подключено несколько ключей, условия оцениваются с использованием логического AND.
http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html
Это говорит о том, что политика двойного условия будет запрещать, только если обе строки не равны (то есть, если шифрование не используется, а идентификатор ключа неверен).
Разделение тестов на s3:x-amz-server-side-encryption
а также s3:x-amz-server-side-encryption-aws-kms-key-id
на две отдельные Deny
политические заявления должны быть исправлением.