適用於 AWS Landing Zone(控制塔)的良好 KMS 金鑰策略是什麼樣的?

適用於 AWS Landing Zone(控制塔)的良好 KMS 金鑰策略是什麼樣的?

我最近透過手動將 KMS 密鑰新增至 Control Tower SNS 主題來「破壞」了 Control Tower。當控制塔對堆疊進行檢查或升級時,這種方法效果不佳。我必須刪除金鑰並推動一些堆疊才能使其處於健康狀態,但現在 SNS 主題未加密,Security Hub 感到不滿。

以前,我部署了一個KMS 金鑰,用於所有組織帳戶的SNS 主題(每個帳戶一個),但我現在了解到,如果我給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"

我不知道這些是否需要,我只是猜測。

相關內容