Amazon SNS 主題標記 - Amazon Simple Notification Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon SNS 主題標記

Amazon SNS 支援 Amazon SNS 主題的標記功能。這可協助您追蹤和管理主題相關的成本、在您的 AWS Identity and Access Management (IAM) 政策中提供更高的安全性,並且讓您輕鬆搜尋或篩選數以千計的主題。標記功能可讓您使用 AWS Resource Groups 來管理 Amazon SNS。如需 Resource Groups 的詳細資訊,請參閱《AWS Resource Groups 使用者指南》。

為分配成本加上標籤

若要整理並識別 Amazon SNS 主題以分配成本,您可新增標籤來識別主題的用途。擁有許多主題時特別實用。您可以使用成本分配標籤來整理您的 AWS 帳單,以反映您自己的成本結構。若要這麼做,請註冊取得 AWS 帳戶帳單,以納入標籤索引鍵和鍵值。如需詳細資訊,請參閱《AWS 帳單與成本管理使用者指南》中的「設定每月成本分配報告」。

例如,您可以新增代表成本中心和 Amazon SNS 主題之用途的標籤,如下所示:

資源 索引鍵
主題 1 成本中心 43289
應用 訂單處理
主題 2 成本中心 43289
應用 付款處理
主題 3 成本中心 76585
應用 存檔

這種標記機制可讓您將同一個成本中心內執行相關任務的兩個主題歸為同一組,並且使用不同的成本分配標籤來標記不相關的活動。

為存取控制加上標籤

AWS Identity and Access Management 支援以標籤控制資源的存取。標記資源後,請在 IAM 政策的條件元素中提供有關資源標籤的資訊來管理標籤型存取。如需有關如何使用 Amazon SNS 主控台AWS SDK 來標記資源的資訊,請參閱設定標籤

您可以限制 IAM 身分的存取。例如,您可以限制 PublishPublishBatch 對所有包含索引鍵 environment 和 值 production 的 Amazon SNS 主題的存取,同時卻也可以允許對所有其他 Amazon SNS 主題的存取。在下方範例中,政策會限制發布訊息到標記為 production 之主題的能力,同時卻也會允許將消息發布到標記為 development 之主題。如需詳細資訊,請參閱《IAM 使用者指南》中的「使用標籤控制存取」。

注意

設定 IAM 許可以供 Publish 設定 PublishPublishBatch 這兩者的許可。

{ "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 帳戶可能會有成千上萬個 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()); } }