本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
适用于 Amazon SNS 的主题政策 CloudTrail
要向 SNS 主题发送通知, CloudTrail 必须具有所需的权限。 CloudTrail当您在控制台中创建或更新跟踪时创建 Amazon SNS 主题时,会自动为该 CloudTrail 主题附加所需的权限。
重要
作为安全最佳实践,为了限制对 SNS 主题的访问,强烈建议您在创建或更新跟踪以发送 SNS 通知后,手动编辑附加到 SNS 主题的 IAM policy 以添加条件键。有关更多信息,请参阅本主题中的SNS 主题策略的安全最佳实践。
CloudTrail 为您在策略中添加以下语句,其中包含以下字段:
-
允许的 SIDs。
-
的服务主体名称 CloudTrail。
-
SNS 主题,包括区域、账户 ID 和主题名称。
以下策略 CloudTrail 允许从支持的区域发送有关日志文件传输的通知。有关更多信息,请参阅 CloudTrail 支持的区域。这是在创建或更新跟踪并选择启用 SNS 通知时附加到新的或现有 SNS 主题策略的默认策略。
SNS 主题策略
要使用 Amazon KMS加密的 Amazon SNS 主题发送通知,您还必须通过在的策略中添加以下声明来启用事件源 CloudTrail () 和加密主题之间的兼容性。 Amazon KMS key
KMS 密钥策略
有关更多信息,请参阅启用来自 Amazon 服务的事件源和加密主题之间的兼容性。
SNS 主题策略的安全最佳实践
默认情况下, CloudTrail 附加到您的 Amazon SNS 主题的 IAM 政策声明允许 CloudTrail 服务委托人向由 ARN 标识的 SNS 主题发布内容。为帮助防止攻击者访问您的 SNS 主题并代表主题收件人发送通知, CloudTrail 请手动编辑您的 CloudTrail SNS 主题策略,以便在所附的策略声明中添加aws:SourceArn
条件密钥。 CloudTrail此键的值是跟踪的 ARN,或者是使用 SNS 主题 ARNs 的跟踪数组。因为它既包括特定跟踪记录 ID,也包括拥有该跟踪记录的账户的 ID,所以它将 SNS 主题限制为仅可访问那些有权限管理该跟踪记录的账户。在向 SNS 主题策略添加条件密钥之前,请从控制台的跟踪设置中获取 SNS 主题名称。 CloudTrail
aws:SourceAccount
支持条件密钥,但不建议使用。
将 aws:SourceArn
条件键添加到您的 SNS 主题策略
在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/
-
在导航窗格中,选择 Topics(主题)。
-
选择跟踪设置中显示的 SNS 主题,然后选择 Edit(编辑)。
-
展开 Access policy (访问策略)。
-
在 Access policy(访问策略)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" }
-
为条件添加新数据块
aws:SourceArn
,如以下示例中所示。值aws:SourceArn
是您要向 SNS 发送通知的跟踪的 ARN。{ "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" } } }
-
完成 SNS 主题策略的编辑后,选择 Save changes(保存更改)。
将 aws:SourceAccount
条件键添加到您的 SNS 主题策略
在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/
-
在导航窗格中,选择 Topics(主题)。
-
选择跟踪设置中显示的 SNS 主题,然后选择 Edit(编辑)。
-
展开 Access policy (访问策略)。
-
在 Access policy(访问策略)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" }
-
为条件添加新数据块
aws:SourceAccount
,如以下示例中所示。的值aws:SourceAccount
是拥有 CloudTrail 跟踪的账户的 ID。此示例限制只有能够登录 Amazon 账户 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" } } }
-
完成 SNS 主题策略的编辑后,选择 Save changes(保存更改)。
指定要发送通知的现有主题
您可以在 Amazon SNS 控制台中手动将 Amazon SNS 主题的权限添加到您的主题策略中,然后在控制台中指定该主题。 CloudTrail
手动更新 SNS 主题策略
在 v3/home 上打开亚马逊 SNS 控制台。https://console.aws.amazon.com/sns/
-
选择 Topics,然后选择主题。
-
选择编辑,然后向下滚动到访问策略。
-
添加 SNS topic policy 中的语句,并为区域、账户 ID 和主题名称提供适当的值。
-
如果您的主题是加密主题,则必须 CloudTrail 允许拥有
kms:GenerateDataKey*
和kms:Decrypt
权限。有关更多信息,请参阅 Encrypted SNS topic KMS key policy。 -
选择保存更改。
-
返回 CloudTrail 控制台并指定跟踪的主题。
SNS 主题策略问题排查
以下部分说明如何对 SNS 主题策略进行问题排查。
CloudTrail 未发送某个地区的通知
在创建或更新跟踪的过程中创建新主题时,会将所需的权限 CloudTrail 附加到您的主题。主题策略使用服务主体名称"cloudtrail.amazonaws.com"
,该名称允许 CloudTrail 向所有区域发送通知。
如果 CloudTrail 不是针对某个地区发送通知,则您的主题可能有 IDs 针对每个区域指定 CloudTrail 账户的旧政策。此类策略仅 CloudTrail 允许向指定区域发送通知。
作为最佳实践,请更新策略以使用 CloudTrail 服务主体的权限。为此,请将账户 ID ARNs 替换为服务主体名称:"cloudtrail.amazonaws.com"
。
以下示例策略 CloudTrail 允许为当前和新区域发送通知:
例 具有服务委托方名称的主题策略
验证策略具有正确的值:
-
在
Resource
字段中,指定主题所有者的账号。如果主题是由您创建的,请指定您的账号。 -
为区域和 SNS 主题名称指定适当的值。
CloudTrail 未为组织中的成员账户发送通知
当具有 Amazon Organizations 组织跟踪的成员账户未发送 Amazon SNS 通知时,SNS 主题策略的配置可能存在问题。 CloudTrail 即使资源验证失败,也会在成员账户中创建组织跟踪,例如,组织跟踪的 SNS 主题不包括所有成员账户 IDs。如果 SNS 主题策略不正确,则会导致授权失败。
要检查跟踪的 SNS 主题策略是否存在授权失败,请执行以下操作:
-
在 CloudTrail 控制台中,查看跟踪的详细信息页面。如果授权失败,则详细信息页面会包含一条警告
SNS authorization failed
,并指示修复 SNS 主题策略。 -
从中 Amazon CLI,运行get-trail-status命令。如果授权失败,则命令输出将包括值为
AuthorizationError
的LastNotificationError
字段。
其他资源
有关 SNS 主题和订阅这些主题的更多信息,请参阅 Amazon Simple Notification Service 开发人员指南。