Я не мог оставить это, поэтому я провел тестирование и обнаружил, что следующее, вероятно, является хорошим решением.
Ключевые моменты, которые я усвоил:
- Похоже, службам нужны только разрешения «kms: GenerateDataKey».
- Используйте условие "StringLike", а не "StringEquals", если вы хотите *-подстановочный знак
Этот документация был весьма полезен.
Мне не удалось создать политику с использованием «aws:SourceArn» или «aws:SourceAccount», но мне удалось создать политику с «kms:EncryptionContext:context».
Вот моя политика, номер аккаунта отредактирован:
{
«Версия»: «2012-10-17»,
«Идентификатор»: «Ключ SNS-KMS»,
"Заявление": [
{
"Sid": "Ключевой администратор в учетной записи управления",
«Эффект»: «Разрешить»,
"Главный": {
«AWS»: «arn:aws:iam::112211221122:root»
},
"Действие": "км:*",
"Ресурс": "*"
},
{
"Sid": "Разрешения AWS-сервисов во всех аккаунтах",
«Эффект»: «Разрешить»,
"Главный": {
"Оказание услуг": [
"config.amazonaws.com",
"cloudtrail.amazonaws.com"
]
},
"Действие": [
"кмс:СгенерироватьКлючДанных",
"кмс:Зашифровать",
"кмс:Расшифровать",
"кмс:ОписатьКлюч",
"кмс:Повторное шифрование*"
],
"Ресурс": "*"
}
]
}
Я надеюсь, что кто-то найдет это полезным.
Обратите внимание, что я подозреваю, что вы можете и, возможно, должны использовать условия для ограничения последнего оператора. Сам не заработал.