AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

CloudTrail 的 Amazon SNS 主题策略

CloudTrail 必须具有必要的权限才能将通知发送到 SNS 主题。您在执行以下操作时,CloudTrail 会自动为主题附加必要的权限:

  • 在创建或更新跟踪的过程中通过 CloudTrail 控制台创建 SNS 主题。

  • 通过 AWS CLI create-subscriptionupdate-subscription 命令创建 SNS 主题。

CloudTrail 将在策略中添加以下字段:

  • 允许的 SID。

  • CloudTrail 的服务委托人名称。

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

以下策略允许 CloudTrail 从受支持的区域发送有关传输日志文件的通知。有关更多信息,请参阅CloudTrail支持的区域

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) 与加密主题之间启用兼容性,方法是添加以下语句到客户主密钥 (CMK) 的策略。

CMK 策略

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

有关更多信息,请参阅实现 AWS 服务中的事件源与加密主题之间的兼容性

注意

如果您在 中国(北京)区域 中创建策略,请使用服务委托人名称:"cloudtrail.amazonaws.com.cn"

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

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

手动更新 SNS 主题策略

  1. 通过以下网址打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v2/home

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

  3. 选择 Other topic actions,然后选择 Edit topic policy

  4. 选择 Advanced view,并根据 SNS 主题策略 添加语句,用适当的值替换区域、账户 ID 和主题名称。

  5. 选择 Update policy (更新策略)

  6. 如果您的主题是加密主题,则必须允许 CloudTrail 具有 kms:GenerateDataKey*kms:Decrypt 权限。有关更多信息,请参阅 加密 SNS 主题 CMK 策略

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

SNS 主题策略问题排查

以下部分说明如何对 SNS 主题策略进行问题排查。

SNS 策略配置常见错误

当您在创建或更新跟踪的过程中新建主题时,CloudTrail 会为您的主题附加必要的权限。主题策略使用名为 "cloudtrail.amazonaws.com.cn" 的服务委托方,它允许 CloudTrail 将通知发送到所有区域。

如果 CloudTrail 不能将通知发送到某一区域,可能是您的主题使用较旧的策略,针对每个区域指定了 CloudTrail 账户 ID。这样的策略只允许 CloudTrail 将通知发送到指定区域。

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

例 具有账户 ID 的主题策略

{ "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 账户 ID 来使用权限。要向新区域传输日志,您必须手动更新策略,以包含该区域的 CloudTrail 账户 ID。例如,由于 CloudTrail 新增了对 美国东部(俄亥俄)区域 的支持,您必须更新策略,以添加该区域的账户 ID ARN:"arn:aws:iam::475085895292:root"

更新策略,以使用 CloudTrail 服务委托方的权限,这是最佳做法。为此,请用服务委托方的名称 ("cloudtrail.amazonaws.com.cn") 替换账户 ID ARN。

这样 CloudTrail 就拥有了将通知发送到当前区域和新区域的权限。以下是前一策略的更新版本:

例 具有服务委托方名称的主题策略

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AWSCloudTrailSNSPolicy20131101", "Effect": "Allow", "Principal": {Service": "cloudtrail.amazonaws.com.cn"}, "Action": "SNS:Publish", "Resource": arn:aws-cn:sns:us-east-1:123456789012:myTopic" }] }

验证策略具有正确的值:

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

  • 为区域和 SNS 主题名称指定适当的值。

其他资源

有关 SNS 主题和进行订阅的更多信息,请参阅Amazon Simple Notification Service 开发人员指南