如何将"kms:CallerAccount"条件添加到用于加密云观察日志的 KMS 密钥中?



我似乎无法在用于加密现有CloudWatch日志组的KMS客户管理密钥中使用"kms:CallerAccount"条件。

我遵循了官方文档,并使用以下策略创建了一个对称的KMS密钥,该密钥允许与任何日志组一起使用(已编辑帐户ID(:

{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxx:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Principal": {
"Service": "logs.eu-central-1.amazonaws.com"
},
"Action": [
"kms:Encrypt*",
"kms:Decrypt*",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:Describe*"
],
"Resource": "*",
"Condition": {
"ArnEquals": {
"kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:eu-central-1:xxx:*"
},
"StringEquals": {
"kms:CallerAccount": "xxx"
}
}
}
]
}

文档中的策略和我的策略之间的唯一区别是,我的策略具有"kms:CallerAccount"条件:

"StringEquals": {
"kms:CallerAccount": "xxx"
}

当我尝试将我的密钥与日志组/aws/batch/job:关联时,我收到以下错误

❯ aws logs associate-kms-key --log-group-name /aws/batch/job --kms-key-id arn:aws:kms:eu-central-1:xxx:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
An error occurred (AccessDeniedException) when calling the AssociateKmsKey operation: The specified KMS key does not exist or is not allowed to be used with LogGroup 'arn:aws:logs:eu-central-1:xxx:log-group:/aws/batch/job'

当我删除";kms:CallerAccount";密钥策略中的条件。

如何在用于加密CloudWatch日志组的客户管理密钥中包含"kms:CallerAccount"条件?

我最终打开了一个AWS支持案例,这是我得到的回复:

根据提供的密钥策略,您是说只有来自帐户的身份";xxx";能够调用策略中列出的KMS操作以及CloudWatch服务。将不需要包括";呼叫者账户";条件键,因为现有条件键";加密上下文";将此键范围缩小到特定的区域、帐号和日志组名称。遵循本文档(https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)具体地说;AWS KMS密钥和加密上下文";显示了如何使用加密上下文条件密钥来确定指定的此KMS密钥的使用范围。

我在自己的环境中测试了该策略,发现具有此策略条件的密钥不能与CloudWatch组一起使用,但如果在日志组使用该密钥后删除该条件并将其添加到密钥中,则不会破坏它。在密钥策略中使用的CloudWatch中有一个检查与此条件密钥不兼容,这就是为什么我们必须使用文档中显示的密钥策略,它仍然可以实现对CloudWatch日志的加密。

最新更新