Amazon SNS 主题标记 - Amazon Simple Notification Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon SNS 主题标记

Amazon SNS 支持对 Amazon SNS 主题进行标记。这可帮助您跟踪和管理与主题关联的成本,在 Amazon Identity and Access Management (IAM) 策略中提供增强安全性,并让您从数千个主题中轻松进行搜索或筛选。通过标记,您可以使用 Amazon 资源组管理 Amazon SNS 主题。有关资源组的更多信息,请参阅Amazon资源组用户指南

成本分配的标记

要组织并标识您的 Amazon SNS 主题以进行成本分配,您可以添加用于标识主题目标的标签。这在您拥有许多主题时尤其有用。您可以使用成本分配标签组织 Amazon 账单,以反映您自己的成本结构。要执行此操作,请注册以获取 Amazon 账户账单来包含标签键和值。有关更多信息,请参阅 Amazon 账单和成本管理用户指南中的设置月度成本分配报告

例如,您可以添加表示 Amazon SNS 主题的成本中心和用途的标签,如下所示:

资源 密钥
主题 1 成本中心 43289
应用程序 订单处理
主题 2 成本中心 43289
应用程序 支付处理
主题 3 成本中心 76585
应用程序 存档

此标记方案可让您将执行相关任务的两个主题分组到同一成本中心,并使用不同的成本分配标签来标记不相关的活动。

访问控制的标记

Amazon Identity and Access Management 支持基于标签控制对资源的访问。在标记资源之后,请在 IAM 策略的条件元素中提供与资源标签相关的信息,以管理基于标签的访问。有关如何使用 Amazon SNS 控制台Amazon SDK 标记资源的信息,请参阅配置标签

您可以限制 IAM 身份的访问。例如,您可以限制对包含键 environment 和值 production 的标签的所有 Amazon SNS 主题的 PublishPublishBatch 访问,同时允许访问所有其他 Amazon SNS 主题。在下面的示例中,该策略限制了将消息发布到标记为的主题的能力production,同时允许将消息发布到标记为的主题development. 有关更多信息,请参阅《IAM 用户指南》中的使用标签控制访问

注意

PublishPublishBatch 设置 Publish 集权限的 IAM 权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:*:*", "Condition": { "StringEquals": { "aws:ResourceTag/environment": "production" } } }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:*:*", "Condition": { "StringEquals": { "aws:ResourceTag/environment": "development" } } }] }

进行标记以便进行资源搜索和筛选

Amazon 账户可以拥有数万个 Amazon SNS 主题(有关详细信息,请参阅 Amazon SNS 配额)。通过标记主题,您可以简化搜索或筛选主题的过程。

例如,您可以拥有数百个与您的生产环境相关的主题。您可以通过给定标签查询所有主题,而不必手动搜索这些主题:

import com.amazonaws.services.resourcegroups.AWSResourceGroups; import com.amazonaws.services.resourcegroups.AWSResourceGroupsClientBuilder; import com.amazonaws.services.resourcegroups.model.QueryType; import com.amazonaws.services.resourcegroups.model.ResourceQuery; import com.amazonaws.services.resourcegroups.model.SearchResourcesRequest; import com.amazonaws.services.resourcegroups.model.SearchResourcesResult; public class Example { public static void main(String[] args) { // Query Amazon SNS Topics with tag "keyA" as "valueA" final String QUERY = "{\"ResourceTypeFilters\":[\"AWS::SNS::Topic\"],\"TagFilters\":[{\"Key\":\"keyA\", \"Values\":[\"valueA\"]}]}"; // Initialize ResourceGroup client AWSResourceGroups awsResourceGroups = AWSResourceGroupsClientBuilder .standard() .build(); // Query all resources with certain tags from ResourceGroups SearchResourcesResult result = awsResourceGroups.searchResources( new SearchResourcesRequest().withResourceQuery( new ResourceQuery() .withType(QueryType.TAG_FILTERS_1_0) .withQuery(QUERY) )); System.out.println("SNS Topics with certain tags are " + result.getResourceIdentifiers()); } }