

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengelola kunci dan biaya enkripsi Amazon SNS
<a name="sns-key-management"></a>

Bagian berikut ini memberikan informasi tentang bekerja dengan kunci yang terkelola di AWS Key Management Service (AWS KMS).

**catatan**  
Amazon SNS hanya mendukung kunci KMS enkripsi simetris. Anda tidak dapat menggunakan jenis kunci KMS lainnya untuk mengenkripsi sumber daya layanan Anda. Untuk bantuan menentukan apakah kunci KMS adalah kunci enkripsi simetris, lihat [Mengidentifikasi kunci KMS asimetris](https://docs.aws.amazon.com/kms/latest/developerguide/find-symm-asymm.html).

## Memperkirakan biaya AWS KMS
<a name="sse-estimate-kms-usage-costs"></a>

Untuk memprediksi biaya dan lebih memahami AWS tagihan Anda, Anda mungkin ingin tahu seberapa sering Amazon SNS menggunakan tagihan Anda. AWS KMS key

**catatan**  
Meskipun rumus berikut dapat memberikan ide yang sangat baik dari biaya yang diharapkan, biaya yang sebenarnya mungkin lebih tinggi karena sifat terdistribusi Amazon SNS.

Untuk menghitung jumlah permintaan API (`R`) *per topik*gunakan rumus berikut ini:

```
R = B / D * (2 * P)
```

`B` adalah periode penagihan (dalam detik).

`D` adalah periode penggunaan kembali kunci data (dalam hitungan detik—Amazon SNS menggunakan kembali kunci data hingga 5 menit).

`P` adalah jumlah [prinsipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal) penerbitan yang dikirim ke topik Amazon SNS.

Berikut ini adalah contoh perhitungan. Untuk informasi harga sebenranya, lihat [Harga AWS Key Management Service](https://aws.amazon.com/kms/pricing/).

### Contoh 1: Menghitung jumlah panggilan AWS KMS API untuk 1 penerbit dan 1 topik
<a name="example-1-topic-1-publisher"></a>

Contoh ini mengasumsikan sebagai berikut:
+ Periode penagihan adalah 1-31 Januari (2.678.400 detik).
+ Periode penggunaan kembali kunci data adalah 5 menit (300 detik).
+ Ada 1 topik.
+ Ada 1 penerbitan utama.

```
2,678,400 / 300 * (2 * 1) = 17,856
```

### Contoh 2: Menghitung jumlah panggilan AWS KMS API untuk beberapa penerbit dan 2 topik
<a name="example-2-topics-multiple-publishers"></a>

Contoh ini mengasumsikan sebagai berikut:
+ Periode penagihan adalah 1-28 Februari (2.419.200 detik).
+ Periode penggunaan kembali kunci data adalah 5 menit (300 detik).
+ Ada 2 topik.
+ Topik pertama memiliki 3 prinsipal penerbitan.
+ Topik kedua memiliki 5 prinsipal penerbitan.

```
(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024
```

## Mengkonfigurasi izin AWS KMS
<a name="sns-what-permissions-for-sse"></a>

Sebelum Anda dapat menggunakan SSE, Anda harus mengonfigurasi AWS KMS key kebijakan untuk mengizinkan enkripsi topik dan enkripsi dan dekripsi pesan. Untuk contoh dan informasi selengkapnya tentang izin AWS KMS , lihat[Izin API AWS KMS : Tindakan dan Referensi Sumber Daya](https://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html) dalam *Panduan Developer AWS Key Management Service *. Untuk detail tentang cara mengatur topik Amazon SNS dengan enkripsi sisi server, lihat. [Informasi tambahan](sns-enable-encryption-for-topic.md#set-up-topic-with-sse)

**catatan**  
Anda juga dapat mengelola izin untuk kunci KMS enkripsi simetris menggunakan kebijakan IAM. Untuk informasi selengkapnya, lihat [Menggunakan Kebijakan IAM dengan AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html).  
Meskipun Anda dapat mengonfigurasi izin global untuk mengirim dan menerima dari Amazon SNS AWS KMS , memerlukan secara eksplisit penamaan ARN lengkap di wilayah tertentu di KMSs bagian kebijakan IAM. `Resource`

Anda juga harus memastikan bahwa kebijakan utama AWS KMS key mengizinkan izin yang diperlukan. Untuk melakukannya, beri nama utama yang menghasilkan dan menggunakan pesan terenkripsi di Amazon SNS sebagai pengguna dalam kebijakan kunci KMS. 

Atau, Anda dapat menentukan AWS KMS tindakan yang diperlukan dan KMS ARN dalam kebijakan IAM yang ditetapkan ke prinsipal yang menerbitkan dan berlangganan untuk menerima pesan terenkripsi di Amazon SNS. Untuk informasi selengkapnya, lihat [Mengelola Akses ke AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access) dalam *Panduan AWS Key Management Service Pengembang*.

Jika memilih kunci yang dikelola pelanggan untuk topik Amazon SNS Anda dan Anda menggunakan alias untuk mengontrol akses ke kunci KMS menggunakan kebijakan IAM atau kebijakan kunci KMS dengan kunci kondisi`kms:ResourceAliases`, pastikan bahwa kunci yang dikelola pelanggan yang dipilih juga memiliki alias yang terkait. *Untuk informasi selengkapnya tentang penggunaan alias untuk mengontrol akses ke kunci KMS, lihat [Menggunakan alias untuk mengontrol akses ke kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/alias-authorization.html) di Panduan Pengembang.AWS Key Management Service *

### Mengizinkan pengguna untuk mengirim pesan ke topik dengan SSE
<a name="send-to-encrypted-topic"></a>

Penerbit harus memiliki `kms:GenerateDataKey*` dan `kms:Decrypt` izin untuk. AWS KMS key

```
{
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "kms:GenerateDataKey*",
      "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }, {
    "Effect": "Allow",
    "Action": [
      "sns:Publish"
    ],
    "Resource": "arn:aws:sns:*:123456789012:MyTopic"
  }]
}
```

### Aktifkan kompatibilitas antara sumber acara dari AWS layanan dan topik terenkripsi
<a name="compatibility-with-aws-services"></a>

Beberapa AWS layanan mempublikasikan acara ke topik Amazon SNS. Untuk mengizinkan sumber peristiwa tersebut agar bekerja dengan topik terenkripsi, Anda harus melakukan langkah-langkah berikut in.

1. Gunakan kunci yang dikelola pelanggan. Untuk informasi selengkapnya, lihat [Membuat Kunci](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) di *Panduan Developer AWS Key Management Service *.

1. Untuk mengizinkan AWS layanan memiliki `kms:GenerateDataKey*` dan `kms:Decrypt` izin, tambahkan pernyataan berikut ke kebijakan KMS.

   ```
   {
     "Statement": [{
       "Effect": "Allow",
       "Principal": {
         "Service": "service.amazonaws.com"
       },
       "Action": [
         "kms:GenerateDataKey*",
         "kms:Decrypt"
       ],
       "Resource": "*"
     }]
   }
   ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/sns/latest/dg/sns-key-management.html)
**catatan**  
Beberapa sumber acara Amazon SNS mengharuskan Anda untuk memberikan peran IAM (bukan prinsip layanan) dalam kebijakan: AWS KMS key   
[Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ASGettingNotifications.html)
[Amazon Elastic Transcoder](https://docs.aws.amazon.com/elastictranscoder/latest/developerguide/notifications.html)
[AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals.html#approvals-configuration-options)
[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/notifications-for-AWS-Config.html)
[AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.sns.html)
[AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sns-rule.html)
[EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/ibhow-integrations.html#integ-sns-encrypted)

1. Tambahkan kunci `aws:SourceAccount` dan `aws:SourceArn` kondisi ke kebijakan sumber daya KMS untuk lebih melindungi kunci KMS dari serangan [wakil yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Lihat daftar dokumentasi khusus layanan (di atas) untuk detail yang tepat dalam setiap kasus.
**penting**  
Menambahkan `aws:SourceAccount``aws:SourceArn`,, dan `aws:SourceOrgID` ke AWS KMS kebijakan tidak didukung untuk EventBridge-to-encrypted topik.

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

1. [Aktifkan SSE untuk topik Anda](sns-enable-encryption-for-topic.md) menggunakan KMS Anda.

1. Berikan ARN topik terenkripsi ke sumber peristiwa.

## AWS KMS kesalahan
<a name="sse-troubleshooting-errors"></a>

Saat Anda bekerja dengan Amazon SNS dan AWS KMS, Anda mungkin mengalami kesalahan. Daftar berikut ini menjelaskan kesalahan dan solusi pemecahan masalah yang dimungkinkan.

**KMSAccessDeniedException**  
Ciphertext merujuk pada kunci yang tidak ada atau bahwa Anda tidak memiliki akses ke padanya.  
Kode Status HTTP: 400

**KMSDisabledPengecualian**  
Permintaan ditolak karena KMS yang ditentukan tidak diaktifkan.  
Kode Status HTTP: 400

**KMSInvalidStateException**  
Permintaan ditolak karena keadaan sumber daya yang ditentukan tidak valid untuk permintaan ini. Untuk informasi selengkapnya, lihat [Status kunci AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html) dalam *Panduan AWS Key Management Service Pengembang*.  
Kode Status HTTP: 400

**KMSNotFoundException**  
Permintaan ditolak karena entitas atau sumber daya yang ditentukan tidak dapat ditemukan.  
Kode Status HTTP: 400

**KMSOptInRequired**  
ID kunci AWS akses memerlukan langganan untuk layanan ini.  
Kode Status HTTP: 403

**KMSThrottlingPengecualian**  
Permintaan ditolak karena throttling permintaan. *Untuk informasi selengkapnya tentang pembatasan, lihat [Kuota di Panduan Pengembang](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second).AWS Key Management Service *  
Kode Status HTTP: 400