跳至内容

如何使用加密的 SNS 主题配置 CloudWatch 警报?

2 分钟阅读
0

我想使用加密的 Amazon Simple Notification Service (Amazon SNS) 主题配置 Amazon CloudWatch 警报。

简短描述

您必须使用 AWS Key Management Service (AWS KMS) 客户管理型密钥才能传送带有 CloudWatch 警报加密 Amazon SNS 主题的 Amazon SNS 通知。如果您使用默认 alias/aws/sns AWS 托管式密钥进行加密,则 CloudWatch 警报无法启动警报操作。然后,您会在 Alarm History(警报历史记录)部分收到类似于以下内容的消息:

"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME.Received error: "CloudWatch Alarms does not have authorization to access the SNS topic encryption key.""

**注意:**Amazon SNS 的默认 AWS KMS 密钥策略不允许 CloudWatch 警报执行 kms:Decrypt 和 kms:GenerateDataKey API 调用。您无法手动编辑 AWS 托管式密钥的策略。

解决方法

要使用加密的 Amazon SNS 主题配置 CloudWatch 警报,请完成以下步骤:

  1. 打开 Amazon SNS 控制台。

  2. 选择 Create topic(创建主题)。

  3. 对于 Type(类型),选择 Standard(标准),然后创建主题名称和显示名称。

  4. 展开 Encryption - optional(加密 - 可选)设置以打开 Encryption(加密)。

  5. 选择客户管理型密钥。

  6. 手动编辑密钥策略,授予 CloudWatch 警报向加密的 Amazon SNS 主题发布消息的 Decrypt 和 GenerateDataKey 权限:

    {      
    "Sid": "Allow_CloudWatch_for_CMK",  
      "Effect": "Allow",  
      "Principal": {  
        "Service": [  
          "cloudwatch.amazonaws.com"  
        ]  
      },  
      "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKey*"  
      ],  
      "Resource": "*"  
    }
  7. (可选)要使策略更具限制性,请添加 Condition 元素。例如,以下策略中的 Condition 上下文键仅允许来自组织 o-123456789 的操作:

    "Resource": "*"
     "Condition": {
        "StringEquals": {
         "aws:SourceOrgID": "o-123456789"
      }
  8. 确保 Amazon SNS 主题的访问策略包含允许 CloudWatch 警报向 Amazon SNS 主题发布消息的 Publish(发布)权限:

    {     
    "Sid": "Allow_Publish_Alarms",  
      "Effect": "Allow",  
      "Principal": {  
        "Service": [  
          "cloudwatch.amazonaws.com"  
        ]  
      },  
      "Action": "sns:Publish",  
      "Resource": "arn:aws:sns:example-region:example-account-id:example-topic"}

    **注意:**请将 example-region 替换为您的 AWS 区域,将 example-account-id 替换为账户 ID,并将 example-topic 替换为主题名称。

  9. 选择 Create topic(创建主题)。

  10. 根据以下任一条件创建 CloudWatch 警报:<br id=hardline_break/> 静态阈值<br id=hardline_break/> 指标数学表达式<br id=hardline_break/> Metrics Insights 查询<br id=hardline_break/> 连接的数据源<br id=hardline_break/> 异常检测

相关信息

使用 Amazon CloudWatch 警报

使用 AWS KMS 加密发布到 Amazon SNS 的消息

为什么我没有收到 CloudWatch 警报触发器的 SNS 通知?