

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

# 使用伺服器端加密設定 Amazon SNS 主題加密
<a name="sns-enable-encryption-for-topic"></a>

Amazon SNS 支援伺服器端加密 (SSE)，以使用 AWS Key Management Service () 保護訊息的內容AWS KMS。請依照下列指示，使用 Amazon SNS 主控台或 CDK 啟用 SSE。

## 選項 1：使用 啟用加密 AWS 管理主控台
<a name="enable-encryption-console"></a>

1. 登入 [Amazon SNS 主控台](https://console.aws.amazon.com/sns/home)。

1. 導覽至**主題**頁面，選取您的**主題**，然後選擇**編輯**。

1. 展開 **Encryption** (加密) 區段並執行下列動作：
   + 將加密切換為**啟用**。
   + 選取 **AWS 受管SNS金鑰** (alias/aws/sns) 做為加密金鑰。預設會選取此項。

1. 選擇**儲存變更**。

**注意**  
如果 不存在， AWS 受管金鑰 則會自動建立 。
如果您沒有看到金鑰或許可不足，請向管理員詢問 `kms:ListAliases`和 `kms:DescribeKey`。

## 選項 2：使用 啟用加密 AWS CDK
<a name="enable-encryption-cdk"></a>

若要在 CDK 應用程式中使用 AWS 受管SNS 金鑰，請新增下列程式碼片段：

```
import software.amazon.awscdk.services.sns.*;
import software.amazon.awscdk.services.kms.*;
import software.amazon.awscdk.core.*;

public class SnsEncryptionExample extends Stack {
    public SnsEncryptionExample(final Construct scope, final String id) {
        super(scope, id);

        // Define the managed SNS key
        IKey snsKey = Alias.fromAliasName(this, "helloKey", "alias/aws/sns");

        // Create the SNS Topic with encryption enabled
        Topic.Builder.create(this, "MyEncryptedTopic")
            .masterKey(snsKey)
            .build();
    }
}
```

## 其他資訊
<a name="set-up-topic-with-sse"></a>
+ **自訂 KMS 金鑰** – 您可以視需要指定自訂金鑰。在 Amazon SNS 主控台中，從清單中選擇您的自訂 KMS 金鑰或輸入 ARN。
+ **自訂 KMS 金鑰的許可** – 如果使用自訂 KMS 金鑰，請在金鑰政策中包含下列項目，以允許 Amazon SNS 加密和解密訊息：

```
{ 
    "Effect": "Allow", 
    "Principal": { 
        "Service": "sns.amazonaws.com" 
     },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
    ],
    "Resource": "*",
    "Condition": {
        "ArnLike": { 
            "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type/customer-resource-id" 
        },
        "StringEquals": { 
            "kms:EncryptionContext:aws:sns:topicArn": "arn:aws:sns:your_region:customer-account-id:your_sns_topic_name" 
        }
    }
}
```

## 對消費者的影響
<a name="enable-encryption-impact-on-consumers"></a>

啟用 SSE 不會變更訂閱者以透明方式使用 message. AWS manages 加密和解密的方式。訊息會保持靜態加密，並在交付給訂閱者之前自動解密。為了獲得最佳安全性， AWS 建議為所有端點啟用 HTTPS，以確保訊息的安全傳輸。