

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

# Manajemen Kunci Amazon SQS
<a name="sqs-key-management"></a>

Amazon SQS terintegrasi dengan AWS Key Management Service (KMS) untuk mengelola [kunci](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) KMS untuk enkripsi sisi server (SSE). Lihat [Enkripsi saat istirahat di Amazon SQS](sqs-server-side-encryption.md) untuk informasi SSE dan definisi manajemen kunci. Amazon SQS menggunakan kunci KMS untuk memvalidasi dan mengamankan kunci data yang mengenkripsi dan mendekripsi pesan. Bagian berikut memberikan informasi tentang bekerja dengan kunci KMS dan kunci data di layanan Amazon SQS.

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

Setiap kunci KMS harus memiliki kebijakan kunci. Perhatikan bahwa Anda tidak dapat mengubah kebijakan kunci kunci KMS AWS terkelola untuk Amazon SQS. Kebijakan untuk kunci KMS ini mencakup izin untuk semua prinsipal di akun (yang diizinkan untuk menggunakan Amazon SQS) untuk menggunakan antrian terenkripsi. 

 Amazon SQS membedakan antara penelepon berdasarkan AWS kredensialnya, apakah mereka menggunakan AWS akun yang berbeda, pengguna IAM, atau peran IAM. Selain itu, peran IAM yang sama dengan kebijakan pelingkupan yang berbeda akan diperlakukan sebagai pemohon yang berbeda. Namun, saat menggunakan sesi peran IAM, hanya memvariasikan `RoleSessionName` sementara mempertahankan peran IAM dan kebijakan pelingkupan yang sama tidak akan membuat pemohon yang berbeda. Oleh karena itu, ketika menentukan prinsip kebijakan AWS KMS utama, hindari mengandalkan `RoleSessionName` perbedaan saja, karena sesi ini akan diperlakukan sebagai pemohon yang sama. 

Atau, Anda dapat menentukan izin yang diperlukan dalam kebijakan IAM yang ditetapkan ke prinsipal yang menghasilkan dan menggunakan pesan terenkripsi. Untuk informasi selengkapnya, lihat [Menggunakan Kebijakan IAM dengan AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html) *Panduan AWS Key Management Service Pengembang*.

**catatan**  
Meskipun Anda dapat mengonfigurasi izin global untuk mengirim dan menerima dari Amazon SQS AWS KMS , memerlukan penamaan ARN lengkap kunci KMS secara eksplisit di wilayah tertentu di bagian kebijakan IAM. `Resource`

### Konfigurasikan izin KMS untuk layanan AWS
<a name="compatibility-with-aws-services"></a>

Beberapa AWS layanan bertindak sebagai sumber acara yang dapat mengirim acara ke antrian Amazon SQS. Agar sumber peristiwa ini dapat bekerja dengan antrian terenkripsi, Anda harus membuat kunci KMS yang dikelola pelanggan dan menambahkan izin dalam kebijakan kunci agar layanan dapat menggunakan metode API yang diperlukan. AWS KMS Lakukan langkah-langkah berikut untuk mengonfigurasi izin.

**Awas**  
Saat mengubah kunci KMS untuk mengenkripsi pesan Amazon SQS Anda, ketahuilah bahwa pesan yang ada yang dienkripsi dengan kunci KMS lama akan tetap dienkripsi dengan kunci itu. Untuk mendekripsi pesan ini, Anda harus menyimpan kunci KMS lama dan memastikan bahwa kebijakan utamanya memberikan Amazon SQS izin untuk dan. `kms:Decrypt` `kms:GenerateDataKey` Setelah memperbarui ke kunci KMS baru untuk mengenkripsi pesan baru, pastikan semua pesan yang ada dienkripsi dengan kunci KMS lama diproses dan dihapus dari antrian sebelum menghapus atau menonaktifkan kunci KMS lama.

1. Buat kunci KMS 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 sumber peristiwa AWS layanan menggunakan metode `kms:Decrypt` dan `kms:GenerateDataKey` API, tambahkan pernyataan berikut ke kebijakan kunci KMS.

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

****  

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

------

   Ganti “layanan” pada contoh di atas dengan *nama Layanan* dari sumber acara. Sumber acara termasuk layanan berikut.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)

1.  [Konfigurasikan antrian SSE yang ada](sqs-configure-sse-existing-queue.md) menggunakan ARN kunci KMS Anda.

1. Berikan ARN dari antrian terenkripsi ke sumber acara.

### Konfigurasikan AWS KMS izin untuk produsen
<a name="send-to-encrypted-queue"></a>

Ketika [periode penggunaan kembali kunci data](#sqs-how-does-the-data-key-reuse-period-work) berakhir, panggilan berikutnya produsen ke `SendMessage` atau `SendMessageBatch` juga memicu panggilan ke dan. `kms:Decrypt` `kms:GenerateDataKey` Panggilan `kms:Decrypt` untuk memverifikasi integritas kunci data baru sebelum menggunakannya. Oleh karena itu, produsen harus memiliki `kms:Decrypt` dan `kms:GenerateDataKey` izin untuk kunci KMS. 

Tambahkan pernyataan berikut ke kebijakan IAM produsen. Ingatlah untuk menggunakan nilai ARN yang benar untuk sumber daya kunci dan sumber daya antrian.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-2:123456789012:key/111112222233333"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sqs:SendMessage"
            ],
            "Resource": "arn:aws:sqs:*:123456789012:MyQueue"
        }
    ]
}
```

------

### Konfigurasikan AWS KMS izin untuk konsumen
<a name="receive-from-encrypted-queue"></a>

Ketika periode penggunaan kembali kunci data berakhir, panggilan konsumen berikutnya `ReceiveMessage` juga memicu panggilan ke`kms:Decrypt`, untuk memverifikasi integritas kunci data baru sebelum menggunakannya. Oleh karena itu, konsumen harus memiliki `kms:Decrypt` izin untuk kunci KMS apa pun yang digunakan untuk mengenkripsi pesan dalam antrian yang ditentukan. Jika antrian bertindak sebagai [antrian huruf mati](sqs-dead-letter-queues.md), konsumen juga harus memiliki `kms:Decrypt` izin untuk setiap kunci KMS yang digunakan untuk mengenkripsi pesan dalam antrian sumber. Tambahkan pernyataan berikut ke kebijakan IAM konsumen. Ingatlah untuk menggunakan nilai ARN yang benar untuk sumber daya kunci dan sumber daya antrian.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-2:123456789012:key/111112222233333"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sqs:ReceiveMessage"
            ],
            "Resource": "arn:aws:sqs:*:123456789012:MyQueue"
        }
    ]
}
```

------

### Konfigurasikan AWS KMS izin dengan perlindungan wakil yang membingungkan
<a name="sqs-adding-confused-deputy-protection"></a>

Ketika prinsipal dalam pernyataan kebijakan kunci adalah [prinsipal AWS layanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-services), Anda dapat menggunakan [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)atau kunci kondisi [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)global untuk melindungi dari [skenario wakil yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Untuk menggunakan kunci kondisi ini, tetapkan nilai ke Amazon Resource Name (ARN) dari sumber daya yang sedang dienkripsi. Jika Anda tidak tahu ARN sumber daya, gunakan `aws:SourceAccount` sebagai gantinya. 

Dalam kebijakan kunci KMS ini, sumber daya tertentu dari *layanan* yang dimiliki oleh akun `111122223333` diizinkan untuk memanggil KMS `Decrypt` dan `GenerateDataKey` tindakan, yang terjadi selama penggunaan SSE Amazon SQS.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "sqs.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": [
                        "arn:aws:sqs:us-west-1:111122223333:resource"
                    ]
                }
            }
        }
    ]
}
```

------

Saat menggunakan antrian Amazon SQS yang diaktifkan SSE, layanan berikut mendukung: `aws:SourceArn`
+ Amazon SNS
+ Amazon S3
+ CloudWatch Acara
+ AWS Lambda
+ CodeBuild
+ Amazon Connect Customer Profiles
+ AWS Auto Scaling
+ Amazon Chime

## Memahami periode penggunaan kembali kunci data
<a name="sqs-how-does-the-data-key-reuse-period-work"></a>

[Periode penggunaan kembali kunci data](sqs-server-side-encryption.md#sqs-sse-key-terms) menentukan durasi maksimum Amazon SQS untuk menggunakan kembali kunci data yang sama. Ketika periode penggunaan kembali kunci data berakhir, Amazon SQS menghasilkan kunci data baru. Perhatikan pedoman berikut tentang periode penggunaan kembali.
+ Periode penggunaan kembali yang lebih pendek memberikan keamanan yang lebih baik tetapi menghasilkan lebih banyak panggilan ke AWS KMS, yang mungkin dikenakan biaya di luar Tingkat Gratis.
+ Meskipun kunci data di-cache secara terpisah untuk enkripsi dan dekripsi, periode penggunaan kembali berlaku untuk kedua salinan kunci data.
+ Ketika periode penggunaan kembali kunci data berakhir, panggilan berikutnya ke `SendMessage` atau `SendMessageBatch` biasanya memicu panggilan ke AWS KMS `GenerateDataKey` metode untuk mendapatkan kunci data baru. Juga, panggilan berikutnya ke `SendMessage` dan masing-masing `ReceiveMessage` akan memicu panggilan AWS KMS `Decrypt` untuk memverifikasi integritas kunci data sebelum menggunakannya.
+ [Prinsipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal) (Akun AWS atau pengguna) tidak berbagi kunci data (pesan yang dikirim oleh prinsipal unik selalu mendapatkan kunci data unik). Oleh karena itu, volume panggilan ke AWS KMS adalah kelipatan dari jumlah prinsipal unik yang digunakan selama periode penggunaan kembali kunci data.

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

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

**catatan**  
Meskipun rumus berikut dapat memberi Anda gambaran yang sangat baik tentang biaya yang diharapkan, biaya sebenarnya mungkin lebih tinggi karena sifat terdistribusi Amazon SQS.

Untuk menghitung jumlah permintaan API (`R`) *per antrian*, gunakan rumus berikut:

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

`B` adalah periode penagihan (dalam detik).

`D`adalah [periode penggunaan kembali kunci data](sqs-server-side-encryption.md#sqs-sse-key-terms) (dalam detik).

`P`adalah jumlah [prinsipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Principal) produksi yang mengirim ke antrian Amazon SQS.

`C`adalah jumlah prinsipal konsumsi yang menerima dari antrian Amazon SQS.

**penting**  
Secara umum, prinsipal produksi dikenakan biaya dua kali lipat biaya konsumsi prinsipal. Untuk informasi selengkapnya, lihat [Memahami periode penggunaan kembali kunci data](#sqs-how-does-the-data-key-reuse-period-work).  
Jika produsen dan konsumen memiliki pengguna yang berbeda, biayanya meningkat.

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 2 prinsipal dan 1 antrian
<a name="example-1-queue-2-principals"></a>

Contoh ini mengasumsikan sebagai berikut:
+ Periode penagihan adalah 1-31 Januari (2.678.400 detik).
+ Periode penggunaan kembali kunci data diatur ke 5 menit (300 detik).
+ Ada 1 antrian.
+ Ada 1 pokok produksi dan 1 pokok konsumsi.

```
(2,678,400 / 300) * (2 * 1 + 1) = 26,784
```

### Contoh 2: Menghitung jumlah panggilan AWS KMS API untuk beberapa produsen dan konsumen dan 2 antrian
<a name="example-2-queues-multiple-principals"></a>

Contoh ini mengasumsikan sebagai berikut:
+ Periode penagihan adalah 1-28 Februari (2.419.200 detik).
+ Periode penggunaan kembali kunci data diatur ke 24 jam (86.400 detik).
+ Ada 2 antrian.
+ Antrian pertama memiliki 3 prinsip produksi dan 1 pokok konsumsi.
+ Antrian kedua memiliki 5 prinsip produksi dan 2 prinsip konsumsi.

```
(2,419,200 / 86,400 * (2 * 3 + 1)) + (2,419,200 / 86,400 * (2 * 5 + 2)) = 532
```

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

Saat Anda bekerja dengan Amazon SQS dan AWS KMS, Anda mungkin mengalami kesalahan. Referensi berikut menjelaskan kesalahan dan kemungkinan solusi pemecahan masalah.
+ [AWS KMS Kesalahan umum](https://docs.aws.amazon.com/kms/latest/APIReference/CommonErrors.html)
+ [AWS KMS Mendekripsi kesalahan](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html#API_Decrypt_Errors)
+ [AWS KMS GenerateDataKey kesalahan](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html#API_GenerateDataKey_Errors)