%3F.png)
Недавно я «сломал» Control Tower, вручную добавив ключ KMS в темы SNS Control Tower. Это не сработало, когда Control Tower выполнила проверку или обновление стеков. Мне пришлось удалить ключ и подтолкнуть некоторые стеки, чтобы привести их в работоспособное состояние, но теперь темы SNS не зашифрованы, и Security Hub недоволен.
Ранее я развернул ключ KMS для использования в SNS-темах для всех учетных записей организации (по одному в каждой), но теперь я понимаю, что Control Tower может сделать это для меня, если я дам ему ключ при создании или изменении Landing Zone. Насколько я понимаю, этот ключ должен быть единственным ключом в учетной записи управления и с политикой, которая разрешает как минимум службы Config и CloudTrail, но также доступна для использования во всех моих учетных записях.
Если кто-нибудь может предоставить мне шаблон того, как это будет выглядеть, я буду очень благодарен. Пожалуйста и спасибо. :)
решение1
Я не мог оставить это так, поэтому провел тестирование и пришел к выводу, что следующее, вероятно, является хорошим решением.
Ключевые моменты, которые я усвоил:
- Похоже, службам нужны только разрешения «kms:GenerateDataKey».
- Используйте условие «StringLike», а не «StringEquals», если вам нужен *-wildcard
Этотдокументациябыло весьма полезно. Мне не удалось создать политику, которая использовала бы "aws:SourceArn" или "aws:SourceAccount", но мне удалось с "kms:EncryptionContext:context".
Вот мой полис, номера счетов отредактированы:
{
"Version": "2012-10-17",
"Id": "SNS-KMS-Key",
"Statement": [
{
"Sid": "Key admin in mgmt account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::112211221122:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "AWS-services permissions in all accounts",
"Effect": "Allow",
"Principal": {
"Service": [
"config.amazonaws.com",
"cloudtrail.amazonaws.com"
]
},
"Action": [
"kms:GenerateDataKey",
"kms:Encrypt",
"kms:Decrypt",
"kms:DescribeKey",
"kms:ReEncrypt*"
],
"Resource": "*"
}
]
}
Надеюсь, кто-то найдет это полезным. Обратите внимание, что я подозреваю, что вы могли бы и, возможно, должны использовать условия для ограничения последнего утверждения. У меня самого это не сработало.
решение2
Мне удалось заставить это работать, применив комбинацию из ответа выше, а также разрешив следующим ролям сервиса AWS использовать ключ:
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerConfigAggregatorRoleForOrganizations",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerStackSetRole",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerAdmin",
"arn:aws:iam::112211221122:role/service-role/AWSControlTowerCloudTrailRole"
Я не знаю, нужно ли все это или нет, я просто предположил.