使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

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

2 分钟阅读
0

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

简短描述

您必须使用客户自主管理型密钥才能成功传送带有 CloudWatch 警报加密 Amazon SNS 主题的 Amazon SNS 通知。如果您使用默认 AWS Key Management Service (AWS KMS) 密钥进行加密,则 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."(无法执行操作 arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME。已收到错误:CloudWatch Alarms 无权访问 SNS 主题加密密钥。)”

解决方法

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

  1. 打开 Amazon SNS 控制台

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

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

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

  5. 选择 customer managed key(客户自主管理型密钥)。
    **注意:**如果 Amazon SNS 使用默认 AWS KMS 密钥 alias/aws/sns 进行加密,则 CloudWatch 警报无法发布消息。Amazon SNS 的默认 AWS KMS 密钥策略不允许 CloudWatch 警报执行 kms:Decryptkms:GenerateDataKey API 调用。您无法手动编辑 AWS 托管式密钥的策略。

  6. 手动编辑密钥策略,以授予 CloudWatch 警报向加密的 Amazon SNS 主题发布消息的权限。确保客户自主管理型密钥在策略的 Statement(声明)部分下包含以下权限:

    {    
      "Sid": "Allow_CloudWatch_for_CMK",  
      "Effect": "Allow",  
      "Principal": {  
        "Service": [  
          "cloudwatch.amazonaws.com"  
        ]  
      },  
      "Action": [  
        "kms:Decrypt",  
        "kms:GenerateDataKey*"  
      ],  
      "Resource": "*"  
    }
  7. 确保 Amazon SNS 主题的访问策略包含允许 CloudWatch 警报向 Amazon SNS 主题发布消息的权限。使用以下语句:
    **注意:**将 example-region 替换为您的 AWS 区域,将 example-account-id 替换为账户 ID,将 example-topic 替换为主题名称。

    {   
      "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"}
  8. 选择 Create topic(创建主题)。

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

相关信息

使用 Amazon CloudWatch 警报

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

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