本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon SNS 支持对 Amazon SNS 主题进行标记。这可以帮助您跟踪和管理与主题相关的费用,增强 AWS 身份和访问管理 (IAM) 策略的安全性,并允许您轻松搜索或筛选成千上万个主题。通过添加标签,您可以使用 Resource G AWS roups 管理您的 Amazon SNS 主题。有关资源组的更多信息,请参阅AWS 资源组用户指南。
成本分配的标记
要组织并标识您的 Amazon SNS 主题以进行成本分配,您可以添加用于标识主题目标的标签。这在您拥有许多主题时尤其有用。您可以使用成本分配标签来整理 AWS 账单,以反映您自己的成本结构。为此,请注册以获取包含标签密钥和值的 AWS 账户账单。有关更多信息,请参阅 AWS 账单和成本管理用户指南中的设置月度成本分配报告。
例如,您可以添加表示 Amazon SNS 主题的成本中心和用途的标签,如下所示:
资源 | 键 | 值 |
---|---|---|
主题 1 | 成本中心 | 43289 |
应用程序 | 订单处理 | |
主题 2 | 成本中心 | 43289 |
应用程序 | 支付处理 | |
主题 3 | 成本中心 | 76585 |
应用程序 | 存档 |
此标记方案可让您将执行相关任务的两个主题分组到同一成本中心,并使用不同的成本分配标签来标记不相关的活动。
访问控制的标记
AWS Identity and Access Management 支持根据标签控制对资源的访问权限。在标记资源之后,请在 IAM 策略的条件元素中提供与资源标签相关的信息,以管理基于标签的访问。有关如何使用 Amazon SNS 控制台或 AWS SDK 标记资源的信息,请参阅配置标签。
您可以限制 IAM 身份的访问。例如,您可以限制对包含键 environment
和值 production
的标签的所有 Amazon SNS 主题的 Publish
和 PublishBatch
访问,同时允许访问所有其他 Amazon SNS 主题。在下面的示例中,该策略限制了将消息发布到标记为的主题的能力production
,同时允许将消息发布到标记为的主题development
。有关更多信息,请参阅《IAM 用户指南》中的使用标签控制访问。
注意
为 Publish
和 PublishBatch
设置 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"
}
}
}]
}
进行标记以便进行资源搜索和筛选
一个 AWS 账户可以有成千上万个亚马逊 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());
}
}