

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

# 適用於 CloudTrail 索的 Amazon SNS 主題政策
<a name="cloudtrail-permissions-for-sns-notifications"></a>

若要將通知傳送給 SNS 主題，CloudTrail 必須具有必要的許可。當您在 CloudTrail 主控台建立或更新線索的過程中建立 Amazon SNS 主題時，CloudTrail 會自動將必要的許可連接到儲存貯體。

**重要**  
作為安全最佳實務，為了限制對 SNS 主題的存取，我們強烈建議您在建立或更新線索以傳送 SNS 通知之後，手動編輯附加至 SNS 主題的 IAM 政策以新增條件金鑰。如需詳細資訊，請參閱此主題中的[SNS 主題政策的安全最佳實務](#cloudtrail-sns-notifications-policy-security)。

CloudTrail 新增以下陳述式到政策為您提供下列欄位：
+ 允許的 SID。
+ CloudTrail 的服務委託人名稱。
+ SNS 主題，包含區域、帳戶 ID 和主題名稱。

下列政策允許 CloudTrail 傳送有關受支援區域之日誌檔案傳遞的通知。如需詳細資訊，請參閱 [CloudTrail 支援的區域](cloudtrail-supported-regions.md)。這是當您建立或更新追蹤並選擇啟用 SNS 通知時，附加至新的或現有的 SNS 主題政策的預設政策。

**SNS 主題政策**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AWSCloudTrailSNSPolicy20131101",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "SNS:Publish",
            "Resource": "arn:aws:sns:us-east-1:111111111111:SNSTopicName"
        }
    ]
}
```

------<a name="kms-key-policy"></a>

若要使用加密的 Amazon SNS 主題來傳送通知，您還必須將下列陳述 AWS KMS式新增至 政策，以啟用事件來源 (CloudTrail) 與加密主題之間的相容性 AWS KMS key。

**KMS 金鑰政策**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------

如需詳細資訊，請參閱[啟用來自 AWS 服務和加密主題的事件來源之間的相容性](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html#compatibility-with-aws-services)。

**Contents**
+ [SNS 主題政策的安全最佳實務](#cloudtrail-sns-notifications-policy-security)
+ [指定用於傳送通知的現有主題](#specifying-an-existing-topic-for-sns-notifications)
+ [針對 SNS 主題政策進行故障診斷](#troubleshooting-sns-topic-policy)
  + [CloudTrail 未傳送區域的通知](#sns-topic-policy-for-multiple-regions)
  + [CloudTrail 不會傳送組織中成員帳戶的通知](#sns-topic-policy-authorization-failure)
+ [其他資源](#cloudtrail-notifications-more-info-5)

## SNS 主題政策的安全最佳實務
<a name="cloudtrail-sns-notifications-policy-security"></a>

根據預設，CloudTrail 附加到 Amazon SNS 主題的 IAM 政策聲明允許 CloudTrail 服務主體發佈到由 ARN 識別的 SNS 主題。若要協助防止攻擊者存取您的 SNS 主題，並代表 CloudTrail 傳送通知給主題收件人，請手動編輯您的 CloudTrail SNS 主題政策，以新增 `aws:SourceArn` 條件金鑰新增至由 CloudTrail 附加的政策聲明。此金鑰的值是線索的 ARN，或是使用 SNS 主題的線索 ARN 陣列。因為其同時包含特定線索 ID 和擁有線索之帳戶的 ID，所以會限制 SNS 主題只能存取那些具有管理線索許可的帳戶。在將條件金鑰新增至 SNS 主題政策之前，請從 CloudTrail 主控台中的線索設定取得 SNS 主題名稱。

亦支援 `aws:SourceAccount` 條件金鑰，但不建議使用。

**新增 `aws:SourceArn` SNS 主題政策的條件金鑰**

1. 在 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 開啟 Amazon SNS 主控台。

1. 在導覽窗格中，選擇**主題**。

1. 選擇線索設定中顯示的 SNS 主題，然後選擇 **Edit **(編輯)。

1. 展開 **Access policy (存取政策)**。

1. 在**存取政策** JSON 編輯器中，尋找類似下列範例的區塊。

   ```
       {
         "Sid": "AWSCloudTrailSNSPolicy20150319",
         "Effect": "Allow",
         "Principal": {
           "Service": "cloudtrail.amazonaws.com"
         },
         "Action": "SNS:Publish",
         "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496"
       }
   ```

1. 為條件新增一個新區塊，`aws:SourceArn`，如下列範例所示。`aws:SourceArn` 的值是您要向 SNS 發送通知的線索的 ARN。

   ```
       {
         "Sid": "AWSCloudTrailSNSPolicy20150319",
         "Effect": "Allow",
         "Principal": {
           "Service": "cloudtrail.amazonaws.com"
         },
         "Action": "SNS:Publish",
         "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496",
         "Condition": {
           "StringEquals": {
             "aws:SourceArn": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail3"
           }
         }
       }
   ```

1. 完成編輯 SNS 主題政策後，請選擇 **Save changes** (儲存變更)。

**新增 `aws:SourceAccount` SNS 主題政策的條件金鑰**

1. 在 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 開啟 Amazon SNS 主控台。

1. 在導覽窗格中，選擇**主題**。

1. 選擇線索設定中顯示的 SNS 主題，然後選擇 **Edit **(編輯)。

1. 展開 **Access policy (存取政策)**。

1. 在**存取政策** JSON 編輯器中，尋找類似下列範例的區塊。

   ```
       {
         "Sid": "AWSCloudTrailSNSPolicy20150319",
         "Effect": "Allow",
         "Principal": {
           "Service": "cloudtrail.amazonaws.com"
         },
         "Action": "SNS:Publish",
         "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496"
       }
   ```

1. 為條件新增一個新區塊，`aws:SourceAccount`，如下列範例所示。`aws:SourceAccount` 的值是擁有 CloudTrail 線索的帳戶 ID。此範例限制只能登入 AWS 帳戶 123456789012 的使用者存取 SNS 主題。

   ```
       {
         "Sid": "AWSCloudTrailSNSPolicy20150319",
         "Effect": "Allow",
         "Principal": {
           "Service": "cloudtrail.amazonaws.com"
         },
         "Action": "SNS:Publish",
         "Resource": "arn:aws:sns:us-west-2:111122223333:aws-cloudtrail-logs-111122223333-61bbe496",
         "Condition": {
           "StringEquals": {
             "aws:SourceAccount": "123456789012"
           }
         }
       }
   ```

1. 完成編輯 SNS 主題政策後，請選擇 **Save changes** (儲存變更)。

## 指定用於傳送通知的現有主題
<a name="specifying-an-existing-topic-for-sns-notifications"></a>

您可以在 Amazon SNS 主控台中將許可手動新增至主題政策，然後在 CloudTrail 主控台中指定主題。

**手動更新 SNS 主題政策**

1. 在 [https://console.aws.amazon.com/sns/v3/home](https://console.aws.amazon.com/sns/v3/home) 開啟 Amazon SNS 主控台。

1. 選擇 **Topics** (主題)，然後選擇主題。

1. 選擇**編輯**，然後向下捲動至**存取政策**。

1. [SNS topic policy](#sns-topic-policy) 使用區域、帳戶 ID 和主題名稱的適當值，從 新增陳述式。

1. 如果您的主題是加密主題，您必須允許 CloudTrail 擁有 `kms:GenerateDataKey*` 和 `kms:Decrypt` 許可。如需詳細資訊，請參閱[Encrypted SNS topic KMS key policy](#kms-key-policy)。

1. 選擇 **Save changes** (儲存變更)。

1. 返回 CloudTrail 主控台，並指定線索的主題。

## 針對 SNS 主題政策進行故障診斷
<a name="troubleshooting-sns-topic-policy"></a>

下列各節說明如何針對 SNS 主題政策進行故障診斷。

**Topics**
+ [CloudTrail 未傳送區域的通知](#sns-topic-policy-for-multiple-regions)
+ [CloudTrail 不會傳送組織中成員帳戶的通知](#sns-topic-policy-authorization-failure)

### CloudTrail 未傳送區域的通知
<a name="sns-topic-policy-for-multiple-regions"></a>

當您在建立或更新線索的過程中建立新的主題時，CloudTrail 會將必要的許可連接至您的主題。主題政策使用服務主體名稱 `"cloudtrail.amazonaws.com"`，允許 CloudTrail 傳送所有區域的通知。

如果 CloudTrail 未傳送某個區域的通知，則可能是您的主題具有為每個區域指定 CloudTrail 帳戶 ID 的舊版政策。這種類型的政策提供 CloudTrail 僅針對指定區域傳送通知的許可。

最佳實務是更新政策以搭配 CloudTrail 服務委託人使用許可。若要執行此作業，請將帳戶 ID ARN 取代成服務主體名稱：`"cloudtrail.amazonaws.com"`。

下列範例政策提供 CloudTrail 許可，以傳送目前和新區域的通知：

**Example 主題政策與服務主體名稱**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "AWSCloudTrailSNSPolicy20131101",
        "Effect": "Allow",
        "Principal": {"Service": "cloudtrail.amazonaws.com"},
        "Action": "SNS:Publish",
        "Resource": "arn:aws:sns:us-west-2:123456789012:myTopic"
    }]
}
```

驗證政策具有正確的值：
+ 在 `Resource` 欄位中，指定主題擁有者的帳戶號碼。對於您建立的主題，指定您的帳戶號碼。
+ 為區域和 SNS 主題名稱指定適當的值。

### CloudTrail 不會傳送組織中成員帳戶的通知
<a name="sns-topic-policy-authorization-failure"></a>

當具有 AWS Organizations 組織追蹤的成員帳戶未傳送 Amazon SNS 通知時，SNS 主題政策的組態可能會發生問題。即使資源驗證失敗，CloudTrail 仍會在成員帳戶中建立組織線索，例如，組織線索的 SNS 主題不包含所有成員帳戶 IDs。如果 SNS 主題政策不正確，則會發生授權失敗。

若要檢查追蹤的 SNS 主題政策是否有授權失敗：
+ 從 CloudTrail 主控台，檢查追蹤的詳細資訊頁面。如果發生授權失敗，詳細資訊頁面會包含警告，`SNS authorization failed`並指示 修正 SNS 主題政策。
+ 從 AWS CLI執行 [https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/get-trail-status.html](https://docs.aws.amazon.com/cli/latest/reference/cloudtrail/get-trail-status.html)命令。如果發生授權失敗，命令輸出會包含值為 `LastNotificationError`的欄位`AuthorizationError`。

## 其他資源
<a name="cloudtrail-notifications-more-info-5"></a>

如需有關 SNS 主題及訂閱方式的詳細資訊，請參閱《[Amazon Simple Notification Service 開發人員指南](https://docs.aws.amazon.com/sns/latest/dg/)》。