

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

# Fungsi rotasi Lambda
<a name="rotate-secrets_lambda-functions"></a>

Dalam[Rotasi dengan fungsi Lambda](rotate-secrets_lambda.md), AWS Lambda fungsi memutar rahasia. AWS Secrets Manager menggunakan [label pementasan](whats-in-a-secret.md) untuk mengidentifikasi versi rahasia selama rotasi.

Jika AWS Secrets Manager tidak menyediakan [template fungsi rotasi](reference_available-rotation-templates.md) untuk tipe rahasia Anda, Anda dapat membuat fungsi rotasi kustom. Ikuti panduan ini saat menulis fungsi rotasi Anda:

**Praktik terbaik untuk fungsi rotasi kustom**
+ Gunakan [template rotasi generik](reference_available-rotation-templates.md#OTHER_rotation_templates) sebagai titik awal.
+ Berhati-hatilah dengan debugging atau logging statement. Mereka dapat menulis informasi ke Amazon CloudWatch Logs. Pastikan log tidak berisi informasi sensitif.

  Untuk contoh pernyataan log, lihat kode [AWS Secrets Manager templat fungsi rotasi](reference_available-rotation-templates.md) sumber.
+ Untuk keamanan, AWS Secrets Manager hanya memungkinkan fungsi rotasi Lambda untuk memutar rahasia secara langsung. Fungsi rotasi tidak dapat memanggil fungsi Lambda lain untuk memutar rahasia.
+ Untuk panduan debugging, lihat [Menguji dan men-debug aplikasi tanpa server](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-test-and-debug.html).
+ Jika Anda menggunakan binari dan pustaka eksternal, misalnya untuk terhubung ke sumber daya, Anda bertanggung jawab untuk menambal dan memperbaruinya.
+ Package fungsi rotasi Anda dan dependensi apa pun dalam file ZIP, seperti. *my-function.zip*

**Awas**  
Menyetel parameter konkurensi yang disediakan ke nilai yang lebih rendah dari 10 dapat menyebabkan pelambatan karena utas eksekusi yang tidak mencukupi untuk fungsi Lambda. Untuk informasi selengkapnya, lihat [Memahami konkurensi cadangan dan konkurensi yang disediakan di Panduan Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html#reserved-and-provisioned). AWS Lambda AWS Lambda 

## Empat langkah dalam fungsi rotasi
<a name="rotate-secrets_lambda-functions-code"></a>

**Topics**
+ [`createSecret`: Buat versi baru dari rahasia](#w2aac21c11c29c11b5)
+ [**setSecret**: Ubah kredensil dalam database atau layanan](#w2aac21c11c29c11b7)
+ [**testSecret**: Uji versi rahasia baru](#w2aac21c11c29c11b9)
+ [**finishSecret**: Selesaikan rotasi](#w2aac21c11c29c11c11)

### `createSecret`: Buat versi baru dari rahasia
<a name="w2aac21c11c29c11b5"></a>

Metode `createSecret` pertama memeriksa apakah ada rahasia dengan memanggil [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_secret_value)dengan `ClientRequestToken` passed-in. Jika tidak ada rahasia, itu menciptakan rahasia baru dengan [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.create_secret)dan token sebagai`VersionId`. Kemudian menghasilkan nilai rahasia baru dengan [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.get_random_password). Selanjutnya panggilan [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.put_secret_value)untuk menyimpannya dengan label `AWSPENDING` pementasan. Menyimpan nilai rahasia baru `AWSPENDING` membantu memastikan idempotensi. Jika rotasi gagal karena alasan apa pun, Anda dapat merujuk ke nilai rahasia itu dalam panggilan berikutnya. Lihat [Bagaimana cara membuat fungsi Lambda saya idempoten](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-function-idempotent/).

**Kiat untuk menulis fungsi rotasi Anda sendiri**
+ Pastikan nilai rahasia baru hanya mencakup karakter yang valid untuk database atau layanan. Kecualikan karakter dengan menggunakan `ExcludeCharacters` parameter. 
+ Saat Anda menguji fungsi Anda, gunakan AWS CLI untuk melihat tahapan versi: panggil [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/describe-secret.html)dan lihat`VersionIdsToStages`.
+ Untuk Amazon RDS MySQL, dalam rotasi pengguna bergantian, Secrets Manager membuat pengguna kloning dengan nama tidak lebih dari 16 karakter. Anda dapat memodifikasi fungsi rotasi untuk memungkinkan nama pengguna yang lebih panjang. MySQL versi 5.7 dan yang lebih tinggi mendukung nama pengguna hingga 32 karakter, namun Secrets Manager menambahkan “\$1clone” (enam karakter) ke akhir nama pengguna, jadi Anda harus menjaga nama pengguna maksimal 26 karakter.

### **setSecret**: Ubah kredensil dalam database atau layanan
<a name="w2aac21c11c29c11b7"></a>

Metode ini `setSecret` mengubah kredensi dalam database atau layanan untuk mencocokkan nilai rahasia baru dalam `AWSPENDING` versi rahasia. 

**Kiat untuk menulis fungsi rotasi Anda sendiri**
+ Jika Anda meneruskan pernyataan ke layanan yang menafsirkan pernyataan, seperti database, gunakan parameterisasi kueri. Untuk informasi selengkapnya, lihat [Lembar Cheat Parameterisasi Kueri di situs web](https://cheatsheetseries.owasp.org/cheatsheets/Query_Parameterization_Cheat_Sheet.html) *OWASP*.
+ Fungsi rotasi adalah wakil istimewa yang memiliki otorisasi untuk mengakses dan memodifikasi kredensil pelanggan baik dalam rahasia Secrets Manager dan sumber daya target. Untuk mencegah potensi [serangan wakil yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), Anda perlu memastikan bahwa penyerang tidak dapat menggunakan fungsi tersebut untuk mengakses sumber daya lain. Sebelum Anda memperbarui kredensialnya:
  + Periksa apakah kredensi dalam `AWSCURRENT` versi rahasia valid. Jika `AWSCURRENT` kredensialnya tidak valid, tinggalkan upaya rotasi.
  + Periksa apakah nilai `AWSCURRENT` dan `AWSPENDING` rahasia adalah untuk sumber daya yang sama. Untuk nama pengguna dan kata sandi, periksa apakah `AWSPENDING` nama pengguna `AWSCURRENT` dan nama pengguna sama. 
  + Periksa apakah sumber daya layanan tujuan sama. Untuk database, periksa apakah nama `AWSCURRENT` dan `AWSPENDING` host sama.
+ Dalam kasus yang jarang terjadi, Anda mungkin ingin menyesuaikan fungsi rotasi yang ada untuk database. Misalnya, dengan rotasi pengguna bergantian, Secrets Manager membuat pengguna kloning dengan menyalin [parameter konfigurasi runtime](https://www.postgresql.org/docs/8.0/runtime-config.html) dari pengguna pertama. Jika Anda ingin menyertakan lebih banyak atribut, atau mengubah mana yang diberikan kepada pengguna kloning, Anda perlu memperbarui kode dalam `set_secret` fungsi. 

### **testSecret**: Uji versi rahasia baru
<a name="w2aac21c11c29c11b9"></a>

Selanjutnya, fungsi rotasi Lambda menguji `AWSPENDING` versi rahasia dengan menggunakannya untuk mengakses database atau layanan. Fungsi rotasi berdasarkan [Templat fungsi rotasi](reference_available-rotation-templates.md) uji rahasia baru dengan menggunakan akses baca. 

### **finishSecret**: Selesaikan rotasi
<a name="w2aac21c11c29c11c11"></a>

Terakhir, fungsi rotasi Lambda memindahkan label `AWSCURRENT` dari versi rahasia sebelumnya ke versi ini, yang juga menghapus `AWSPENDING` label dalam panggilan API yang sama. Secrets Manager menambahkan label `AWSPREVIOUS` pementasan ke versi sebelumnya, sehingga Anda mempertahankan versi rahasia terakhir yang diketahui. 

Metode ini **finish\$1secret** digunakan [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.update_secret_version_stage)untuk memindahkan label pementasan `AWSCURRENT` dari versi rahasia sebelumnya ke versi rahasia baru. Secrets Manager secara otomatis menambahkan label `AWSPREVIOUS` pementasan ke versi sebelumnya, sehingga Anda mempertahankan versi rahasia terakhir yang diketahui. 

**Kiat untuk menulis fungsi rotasi Anda sendiri**
+ Jangan hapus `AWSPENDING` sebelum titik ini, dan jangan hapus dengan menggunakan panggilan API terpisah, karena itu dapat menunjukkan kepada Secrets Manager bahwa rotasi tidak berhasil diselesaikan. Secrets Manager menambahkan label `AWSPREVIOUS` pementasan ke versi sebelumnya, sehingga Anda mempertahankan versi rahasia terakhir yang diketahui. 

Ketika rotasi berhasil, label `AWSPENDING` pementasan mungkin dilampirkan ke versi yang sama dengan `AWSCURRENT` versi, atau mungkin tidak dilampirkan ke versi apa pun. Jika label `AWSPENDING` pementasan ada tetapi tidak dilampirkan ke versi yang sama dengan`AWSCURRENT`, maka pemanggilan rotasi selanjutnya mengasumsikan bahwa permintaan rotasi sebelumnya masih dalam proses dan mengembalikan kesalahan. Ketika rotasi tidak berhasil, label `AWSPENDING` pementasan mungkin dilampirkan ke versi rahasia kosong. Lihat informasi yang lebih lengkap di [Memecahkan masalah rotasi](troubleshoot_rotation.md).