AWS Cloudwatch 无法使用 SSE 发布到 SNS 主题

Bre*_*dly 3 amazon-web-services amazon-iam

我有一个 Route53 运行状况检查,它将其指标提交到 Cloudwatch,最后 Cloudwatch 指定阈值并应通过 SNS 发送警报。

但是,我希望对我的 SNS 主题进行加密。当我使用alias/aws/sns密钥打开 SNS 主题加密时,我会在 Cloudwatch 消息历史记录中收到以下消息:

{
  "actionState": "Failed",
  "stateUpdateTimestamp": 123456778899,
  "notificationResource": "arn:aws:sns:xx-region-y:zzzzzzzzzz:topic_name",
  "publishedMessage": null,
  "error": "null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: ccccccccccccccccccc)"
}
Run Code Online (Sandbox Code Playgroud)

似乎不是 Cloudwatch 的 IAM 问题,而是 SNS 本身未被授权使用 KMS 资源。

我喜欢为 IAM 用户使用 IAM 策略模拟器来确定他们缺少权限的地方,但似乎没有一种方法可以验证服务对其他服务的访问权限。这是我能应付的事情吗?

https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html


我还尝试使用具有以下策略的 CMK:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "sns.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "route53.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "events.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*"
        },
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXX:role/OrganizationAccountAccessRole"
            },
            "Action": "kms:*",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我几乎和校长们在墙上投掷飞镖,但我认为有sns.amazonaws.com对 SNS 和events.amazonaws.comCloudwatch的验证。

"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: ccccccccccccccccccc)"以这种方式使用 CMK 时,我也收到了完全相同的错误。我可以理解我的 CMK 无法正常工作,但我认为亚马逊托管的密钥应该是开箱即用的。


我已经使用该赠款CMK尝试sns.amazonaws.comevents.amazonaws.com使用kms:*权限。同样的错误。

小智 10

只是在这里总结正确的答案,因为接受的答案似乎已经过时:。

  1. 您无法使用 Amazon 托管 CMK alias/aws/sns,因为为了将 cloudwatch 与使用 KMS CMK 加密的 SNS 主题连接,您需要在 CMK 上设置资源策略/访问策略,以便 cloudwatch 服务可以对密钥执行操作kms:GenerateDataKey*kms:Decrypt并且无法编辑亚马逊托管密钥的访问策略。

  2. 对于您的情况,您需要创建客户管理的对称 CMK,并编辑访问策略以允许 cloudwatch 服务主体访问该 CMK。访问策略将如下所示:

    "Version": "2012-10-17",
    "Id": "key-policies",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions for administration of this key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxxx:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow cloudwatch metric to use this key",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudwatch.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


Bre*_*dly 5

更新:此信息可能已过时。请尝试其他答案,并让所有人知道它们是否适合您。


显然,根据使用服务器端加密 (SSE) 和 AWS KMS 保护 Amazon SNS 数据,CloudWatch无法将消息发送到加密的 SNS 主题:

目前,CloudWatch 警报不适用于 Amazon SNS 加密主题。有关将警报发布到未加密主题的信息,请参阅 Amazon CloudWatch 用户指南中的使用 Amazon CloudWatch 警报。

但是,博客文章使用 AWS KMS 加密发布到 Amazon SNS 的消息似乎表明您可以......