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

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

Amazon SNS 话题标记

亚马逊SNS支持为亚马逊SNS话题添加标签。这可以帮助您跟踪和管理与主题相关的成本,增强您的 Ident Amazon ity and Access Management (IAM) 策略的安全性,并允许您轻松搜索或筛选数千个主题。通过添加标签,您可以使用 Amazon 资源组(Resource Groups)管理您的亚马逊SNS主题。有关资源组的更多信息,请参阅Amazon 资源组用户指南

成本分配的标记

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

例如,您可以添加代表成本中心和亚马逊SNS主题目的的标签,如下所示:

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

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

访问控制的标记

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

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

注意

为设置IAM权限将同时Publish设置Publish和的权限PublishBatch

{ "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 账户可以有成千上万的亚马逊SNS话题(详情请参阅亚马逊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()); } }