

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

# Amazon SNS 主題標記
<a name="sns-tags"></a>

Amazon SNS 支援 Amazon SNS 主題的標記功能。這可協助您追蹤和管理與主題相關的成本、在 AWS Identity and Access Management (IAM) 政策中提供增強的安全性，並讓您輕鬆搜尋或篩選數千個主題。標記可讓您使用 AWS 資源群組管理 Amazon SNS 主題。如需 Resource Groups 的詳細資訊，請參閱《[AWS Resource Groups 使用者指南](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html)》。

## 為分配成本加上標籤
<a name="tagging-for-cost-allocation"></a>

若要整理並識別 Amazon SNS 主題以分配成本，您可新增標籤來識別主題的用途。擁有許多主題時特別實用。您可以使用成本分配標籤來整理 AWS 帳單，以反映您自己的成本結構。若要這樣做，請註冊以取得 AWS 您的帳戶帳單，以包含標籤索引鍵和值。如需詳細資訊，請參閱《[AWS 帳單與成本管理使用者指南](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/billing-what-is.html)》中的「[設定每月成本分配報告](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/configurecostallocreport.html#allocation-report)」。

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



- **主題 1**
  - **金鑰:** 成本中心 / **值:** 43289
  - **金鑰:** 應用程式 / **值:** 訂單處理

- **主題 2**
  - **金鑰:** 成本中心 / **值:** 43289
  - **金鑰:** 應用程式 / **值:** 付款處理

- **主題 3**
  - **金鑰:** 成本中心 / **值:** 76585
  - **金鑰:** 應用程式 / **值:** 封存



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

## 為存取控制加上標籤
<a name="sns-tagging-for-access-control"></a>

AWS Identity and Access Management 支援根據標籤控制對 資源的存取。標記資源後，請在 IAM 政策的條件元素中提供有關資源標籤的資訊來管理標籤型存取。如需有關如何使用 [Amazon SNS 主控台](sns-tags-configuring.md#list-add-update-remove-tags-for-topic-aws-console)或 [AWS SDK](sns-tags-configuring.md#tag-resource-aws-sdks) 來標記資源的資訊，請參閱[設定標籤](sns-tags-configuring.md)。

您可以限制 IAM 身分的存取。例如，您可以限制 `Publish` 和 `PublishBatch` 對所有包含索引鍵 `environment` 和 值 `production` 的 Amazon SNS 主題的存取，同時卻也可以允許對所有其他 Amazon SNS 主題的存取。在下方範例中，政策會限制發布訊息到標記為 `production` 之主題的能力，同時卻也會允許將消息發布到標記為 `development` 之主題。如需詳細資訊，請參閱《IAM 使用者指南》中的「[使用標籤控制存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)」。

**注意**  
設定 IAM 許可以供 `Publish` 設定 `Publish` 和 `PublishBatch` 這兩者的許可。

------
#### [ JSON ]

****  

```
{
  "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"
      }
    }
  }]
}
```

------

## 為資源搜尋和過濾加上標籤
<a name="sns-tagging-for-searching-filtering"></a>

 AWS 帳戶可以有數萬個 Amazon SNS 主題 （如需詳細資訊，請參閱 [Amazon SNS 配額](https://docs.aws.amazon.com/general/latest/gr/sns.html))。標記主題後，您就可以簡化搜尋或篩選主題的過程。

例如，您可能會有數以百計個與生產環境關聯的主題。您可以查詢具有指定標籤的所有主題，而不必手動搜尋這些主題：

```
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());
    }
}
```