如何确保我收到来自 AWS Config 的 Amazon SNS 通知?

上次更新时间:2021 年 4 月 8 日

我为 AWS Config 设置了 Amazon Simple Notification Service (Amazon SNS) 通知,但我没有收到任何通知。

简短描述

请尝试以下问题排除解决方案:

  • 验证您的 Amazon SNS 主题订阅的状态
  • 授予您的 AWS 账户发布 SNS 主题的权限
  • 授予 AWS 跨账户发布 Amazon SNS 主题的权限
  • 确认 AWS Config 可以访问加密 Amazon SNS 主题
  • 修复您的 Amazon CloudWatch Events 和 SNS 权限配置

解决方法

验证您的 Amazon SNS 主题订阅的状态

1.    打开 Amazon SNS 控制台

2.    在导航窗格上,选择 Subscriptions(订阅)。

3.    从订阅列表中,确认您的订阅 Status(状态)设置为 Confirmed(已确认)。如果 Status(状态)为 PendingConfirmation(等待确认),则按照确认订阅的说明操作。

授予您的 AWS 账户发布 SNS 主题的权限

您必须选择服务相关角色或自定义角色作为记录器角色。记录器角色是可供您记录配置信息的 AWS Identity and Access Management (IAM) 角色。

重要事项:作为安全最佳实践,使用自定义配置服务角色作为记录器角色。避免使用服务相关角色作为跨账户主题策略的记录器角色。这是因为服务相关角色要求您在 Amazon SNS 主题策略中将 “config.amazonaws.com” 设置为 Service(服务)属性。

要将服务相关角色的 Amazon 资源名称 (ARN) 替换为自定义服务角色 ARN,请向角色权限策略中添加以下权限:

{
    "Effect": "Allow",
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:Region:AccountId:Topic-Name"
}

有关自定义角色的更多信息,请参阅分配给 AWS Config 的 IAM 角色的权限

授予 AWS 跨账户发布 Amazon SNS 主题的权限

如果您从另一个账户中选择了 SNS 主题,请设置以下配置以获取跨账户访问权限

1.    向附加到您的 SNS 主题的访问策略中添加以下语句:

{
    "Sid": "__console_pub_0",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::config-AccountId:root" OR "arn:aws:iam::config-AccountId:role/Custom_Service_role_name"
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:Region:SNS-topic-AccountId:Topic-Name"
}

2.    将以下语句附加到 AWS Config 担任的 IAM 角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublishToSNSTargetAccount",
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "arn:aws:sns:Region:config-AccountId:Topic-Name"
        }
    ]
}

确认 AWS Config 可以访问加密 Amazon SNS 主题

如果您的 SNS 主题使用 AWS Key Management Service (AWS KMS) 密钥进行加密,请完成以下步骤:

1.    确认 AWS Config 担任的 IAM 角色可以访问解密 SNS 主题所需的密钥。例如:

{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::config-AccountId:role/ConfigRoleName"
    },
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:Encrypt"
    ],
    "Resource": "*"
}

2.    在角色的访问策略中添加 AWS KMS 权限:

{
    "Effect": "Allow",
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt",
         
    ],
    "Resource": "*"
}

修复您的 Amazon CloudWatch Events 和 SNS 权限配置

1.    确认您选择了正确的 SNS 主题作为 CloudWatch Events 规则的目标。

2.    如果您使用 Amazon CloudWatch 监控 AWS Config API 并使用 Amazon SNS 发送通知,请确认 CloudWatch 拥有 SNS 主题的发布权限。例如,在主题的资源策略中包含以下语句:

{
    "Sid": "Allow_Publish_Events",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": "sns:Publish",
    "Resource": "arn:aws:sns:Region:AccountId:Topic-Name"
}