适用于 Amazon 的SNS主题政策 CloudTrail - AWS CloudTrail

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Amazon 的SNS主题政策 CloudTrail

要向SNS主题发送通知, CloudTrail 必须具有所需的权限。 CloudTrail当您在 CloudTrail 控制台中创建或更新跟踪时创建 Amazon SNS 主题时,会自动为该主题附加所需的权限。

重要

作为安全最佳实践,为了限制对SNS主题的访问,我们强烈建议您在创建或更新跟踪以发送SNS通知后,手动编辑附加到该SNS主题的IAM策略以添加条件密钥。有关更多信息,请参阅本主题中的SNS主题策略的安全最佳实践

CloudTrail 为您在策略中添加以下语句,其中包含以下字段:

  • 允许的SIDs。

  • 的服务主体名称 CloudTrail。

  • SNS主题,包括区域、账户 ID 和主题名称。

以下策略 CloudTrail 允许从支持的区域发送有关日志文件传输的通知。有关更多信息,请参阅 CloudTrail 支持的区域。这是在您创建或更新跟踪并选择启用SNS通知时附加到新的或现有SNS主题策略的默认策略。

SNS话题政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:region:SNSTopicOwnerAccountId:SNSTopicName" } ] }

要使用 AWS KMS加密的 Amazon SNS 主题发送通知,您还必须通过在的策略中添加以下声明来启用事件源 (CloudTrail) 和加密主题之间的兼容性。 AWS KMS key

KMS密钥政策

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" } ] }

有关更多信息,请参阅启用来自 AWS 服务的事件源和加密主题之间的兼容性

SNS主题策略的安全最佳实践

默认情况下, CloudTrail 附加到您的 Amazon SNS 主题的IAM政策声明允许 CloudTrail 服务委托人向标识的SNS主题发布内容ARN。为帮助防止攻击者访问您的SNS主题并代表主题收件人发送通知, CloudTrail 请手动编辑您的 CloudTrail SNS主题策略,以便在所附的策略声明中添加aws:SourceArn条件密钥 CloudTrail。此键的值是跟踪ARN的值,或者是使用ARNs该SNS主题的跟踪数组。由于它同时包含特定的跟踪 ID 和拥有跟踪的账户 ID,因此仅允许有权管理跟踪的账户访问SNS主题。在向SNS主题策略添加条件密钥之前,请从 CloudTrail 控制台中的跟踪设置中获取SNS主题名称。

aws:SourceAccount 支持条件密钥,但不建议使用。

aws:SourceArn条件密钥添加到您的SNS主题策略中
  1. https://console.aws.amazon.com/sns/v3/ hom SNS e 上打开亚马逊主机。

  2. 在导航窗格中,选择 Topics(主题)

  3. 选择您的跟踪设置中显示SNS的主题,然后选择编辑

  4. 展开 Access policy (访问策略)

  5. 访问策略JSON编辑器中,查找类似于以下示例的区块。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 为条件添加新数据块 aws:SourceArn,如以下示例中所示。的值aws:SourceArn是您要向ARN其发送通知的跟踪的值SNS。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail3" } } }
  7. 编辑完SNS主题策略后,选择保存更改

aws:SourceAccount条件密钥添加到您的SNS主题策略中
  1. https://console.aws.amazon.com/sns/v3/ hom SNS e 上打开亚马逊主机。

  2. 在导航窗格中,选择 Topics(主题)

  3. 选择您的跟踪设置中显示SNS的主题,然后选择编辑

  4. 展开 Access policy (访问策略)

  5. 访问策略JSON编辑器中,查找类似于以下示例的区块。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496" }
  6. 为条件添加新数据块 aws:SourceAccount,如以下示例中所示。的值aws:SourceAccount是拥有 CloudTrail 跟踪的账户的 ID。此示例限制只有能够登录 AWS 账户 123456789012 的用户才能访问该SNS主题。

    { "Sid": "AWSCloudTrailSNSPolicy20150319", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }
  7. 编辑完SNS主题策略后,选择保存更改

指定要发送通知的现有主题

您可以在亚马逊控制台中手动将亚马逊SNS主题的权限添加到您的主题策略中,然后在SNS控制台中指定该 CloudTrail 主题。

手动更新SNS主题政策
  1. https://console.aws.amazon.com/sns/v3/ hom SNS e 上打开亚马逊主机。

  2. 选择 Topics,然后选择主题。

  3. 选择 “编辑”,然后向下滚动到 “访问策略”。

  4. 添加SNS topic policy包含相应区域、账户 ID 和主题名称值的声明。

  5. 如果您的主题是加密主题,则必须 CloudTrail 允许拥有kms:GenerateDataKey*kms:Decrypt权限。有关更多信息,请参阅 Encrypted SNS topic KMS key policy

  6. 选择保存更改

  7. 返回 CloudTrail 控制台并指定跟踪的主题。

对SNS主题策略进行故障排除

以下各节介绍如何对SNS主题策略进行故障排除。

CloudTrail 未向某个地区发送通知

在创建或更新跟踪的过程中创建新主题时,会将所需的权限 CloudTrail 附加到您的主题。主题策略使用服务主体名称"cloudtrail.amazonaws.com",该名称允许 CloudTrail 向所有区域发送通知。

如果 CloudTrail 不是针对某个地区发送通知,则您的主题可能有一个较旧的政策,该政策IDs为每个区域指定了 CloudTrail 账户。此政策仅 CloudTrail 允许向指定区域发送通知。

以下主题策略仅允许 CloudTrail 向指定的九个区域发送通知:

例 带有账号的话题政策 IDs
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::903692715234:root", "arn:aws:iam::035351147821:root", "arn:aws:iam::859597730677:root", "arn:aws:iam::814480443879:root", "arn:aws:iam::216624486486:root", "arn:aws:iam::086441151436:root", "arn:aws:iam::388731089494:root", "arn:aws:iam::284668455005:root", "arn:aws:iam::113285607260:root" ]}, "Action": "SNS:Publish", "Resource": "aws:arn:sns:us-east-1:123456789012:myTopic" }] }

本政策使用基于个人 CloudTrail 账户的权限IDs。要为新区域传送日志,您必须手动更新策略以包含该地区的 CloudTrail账户 ID。例如,由于 CloudTrail 增加了对美国东部(俄亥俄州)地区的支持,因此您必须更新政策才能ARN为该地区添加账户 ID:"arn:aws:iam::475085895292:root"

作为最佳实践,请更新策略以使用 CloudTrail 服务主体的权限。为此,请将账户 ID ARNs 替换为服务主体名称:"cloudtrail.amazonaws.com"

这 CloudTrail 允许发送当前和新区域的通知。以下是前一策略的更新版本:

例 具有服务委托方名称的主题策略
{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-west-2:123456789012:myTopic" }] }

验证策略具有正确的值:

  • Resource 字段中,指定主题所有者的账号。如果主题是由您创建的,请指定您的账号。

  • 为区域和SNS主题名称指定相应的值。

CloudTrail 未为组织中的成员账户发送通知

当具有 AWS Organizations 组织跟踪的成员账户未发送 Amazon SNS 通知时,SNS主题策略的配置可能存在问题。 CloudTrail 即使资源验证失败,也会在成员账户中创建组织跟踪,例如,组织跟踪的SNS主题不包括所有成员账户IDs。如果SNS主题策略不正确,则会发生授权失败。

要检查跟踪的SNS主题策略是否存在授权失败,请执行以下操作:

  • 在 CloudTrail 控制台中,查看跟踪的详细信息页面。如果授权失败,则详细信息页面会显示一条警告,SNS authorization failed并指示修复SNS主题策略。

  • 从中 AWS CLI,运行get-trail-status命令。如果授权失败,则命令输出将包括值为的LastNotificationError字段AuthorizationError

其他 资源

有关SNS主题和订阅主题的更多信息,请参阅《Amazon 简单通知服务开发者指南》