针对 AWS 登陆区(控制塔)的良好 KMS 密钥策略是什么样的?

针对 AWS 登陆区(控制塔)的良好 KMS 密钥策略是什么样的?

我最近通过手动将 KMS 密钥添加到 Control Tower SNS 主题中“破坏”了 Control Tower。当 Control Tower 检查或升级堆栈时,这种方法效果不佳。我不得不移除密钥并调整一些堆栈以使其处于健康状态,但现在 SNS 主题未加密,Security Hub 不高兴。

之前,我向所有组织账户(每个账户一个)部署了一个用于 SNS 主题的 KMS 密钥,但现在我明白,如果我在创建或修改着陆区时给 Control Tower 一个密钥,它就可以帮我完成这个任务。据我所知,这个密钥必须是管理账户中的单个密钥,并且具有允许至少 Config 和 CloudTrail 服务的策略,但也可以在我的所有账户中使用。

如果有人能给我提供一个模板,我将不胜感激。谢谢。:)

答案1

我不能放过这个,所以我去测试并发现下面可能是一个很好的解决方案。

我学到的要点:

  • 看起来服务只需要“kms:GenerateDataKey”权限。
  • 如果您想要 *-通配符,请使用“StringLike”条件,而不是“StringEquals”

文档非常有用。我无法成功制定使用“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"

我不知道这些是否都是必要的,我只是猜测。

相关内容