跳至内容

如何使用加密的 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(警报历史记录)部分收到类似于以下内容的消息:

“无法执行操作 arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME。已收到错误: “CloudWatch Alarms 无权访问 SNS 主题加密密钥。””

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

解决方法

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

  1. 打开 Amazon SNS 控制台

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

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

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

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

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

    {      
    "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 警报:
    静态阈值
    指标数学表达式
    Metrics Insights 查询
    连接的数据源
    异常检测

相关信息

使用 Amazon CloudWatch 警报

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

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