

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

# Memecahkan masalah rotasi AWS Secrets Manager
<a name="troubleshoot_rotation"></a>

Untuk banyak layanan, Secrets Manager menggunakan fungsi Lambda untuk memutar rahasia. Untuk informasi selengkapnya, lihat [Rotasi dengan fungsi Lambda](rotate-secrets_lambda.md). Fungsi rotasi Lambda berinteraksi dengan database atau layanan rahasianya serta Secrets Manager. Ketika rotasi tidak bekerja seperti yang Anda harapkan, Anda harus terlebih dahulu memeriksa CloudWatch log.

**catatan**  
Beberapa layanan dapat mengelola rahasia untuk Anda, termasuk mengelola rotasi otomatis. Untuk informasi selengkapnya, lihat [Rotasi terkelola untuk AWS Secrets Manager rahasia](rotate-secrets_managed.md).

**Topics**
+ [Cara memecahkan masalah kegagalan rotasi rahasia dalam fungsi AWS Lambda](#troubleshooting-secret-rotation-failures)
+ [Tidak ada aktivitas setelah “Menemukan kredensyal dalam variabel lingkungan”](#troubleshoot_rotation_timing-out)
+ [Tidak ada aktivitas setelah “createSecret”](#troubleshoot_rotation_createSecret)
+ [Kesalahan: “Akses ke KMS tidak diizinkan”](#troubleshoot_rotation_kms-key)
+ [Kesalahan: “Kunci hilang dari JSON rahasia”](#tshoot-lambda-mismatched-secretvalue)
+ [Kesalahan: “setSecret: Tidak dapat masuk ke database”](#troubleshoot_rotation_setSecret)
+ [Kesalahan: “Tidak dapat mengimpor modul 'lambda\$1function'”](#tshoot-python-version)
+ [Tingkatkan fungsi rotasi yang ada dari Python 3.7 ke 3.9](#troubleshoot_rotation_python39)
+ [Tingkatkan fungsi rotasi yang ada dari Python 3.9 ke 3.10](#troubleshoot_rotation_python_310)
+ [AWS Lambda rotasi rahasia dengan `PutSecretValue` gagal](#troubleshoot_rotation_putsecretvalue)
+ [Kesalahan: “Kesalahan saat menjalankan lambda *<arn>* selama *<a rotation>* langkah”](#concurrency-related-failures)

## Cara memecahkan masalah kegagalan rotasi rahasia dalam fungsi AWS Lambda
<a name="troubleshooting-secret-rotation-failures"></a>

Jika Anda mengalami kegagalan rotasi rahasia dengan fungsi Lambda Anda, gunakan langkah-langkah berikut untuk memecahkan masalah dan menyelesaikan masalah.

### Kemungkinan penyebab
<a name="possible-causes"></a>
+ Eksekusi bersamaan yang tidak memadai untuk fungsi Lambda
+ Kondisi balapan karena beberapa panggilan API selama rotasi
+ Logika fungsi Lambda salah
+ Masalah jaringan antara fungsi Lambda dan database

### Langkah-langkah pemecahan masalah umum
<a name="general-troubleshooting-steps"></a>

1. Menganalisis CloudWatch log:
   + Cari pesan kesalahan tertentu atau perilaku tak terduga di log fungsi Lambda
   + Verifikasi bahwa semua langkah rotasi (**CreateSecret****SetSecret**,**TestSecret**,,**FinishSecret**) sedang dicoba

1. Tinjau panggilan API selama rotasi:
   + Hindari membuat panggilan API yang bermutasi pada rahasia selama rotasi Lambda
   + Pastikan tidak ada kondisi balapan antara **RotateSecret** dan **PutSecretValue** panggilan

1. Verifikasi logika fungsi Lambda:
   + Konfirmasikan bahwa Anda menggunakan kode AWS sampel terbaru untuk rotasi rahasia
   + Jika menggunakan kode khusus, tinjau untuk penanganan yang tepat dari semua langkah rotasi

1. Periksa konfigurasi jaringan:
   + Verifikasi aturan grup keamanan memungkinkan fungsi Lambda mengakses database
   + Pastikan titik akhir VPC atau akses titik akhir publik yang tepat untuk Secrets Manager

1. Uji versi rahasia:
   + Verifikasi bahwa AWSCURRENT versi rahasia memungkinkan akses database
   + Periksa apakah AWSPREVIOUS atau AWSPENDING versi valid

1. Hapus rotasi yang tertunda:
   + Jika rotasi gagal secara konsisten, kosongkan label AWSPENDING pementasan dan coba lagi rotasi

1. Periksa pengaturan konkurensi Lambda:
   + Verifikasi bahwa pengaturan konkurensi sesuai untuk beban kerja Anda
   + Jika Anda mencurigai adanya masalah konkurensi, lihat bagian “Memecahkan masalah kegagalan rotasi terkait kesepakatan”

## Tidak ada aktivitas setelah “Menemukan kredensyal dalam variabel lingkungan”
<a name="troubleshoot_rotation_timing-out"></a>

Jika tidak ada aktivitas setelah “Ditemukan kredensial dalam variabel lingkungan”, dan durasi tugas panjang, misalnya batas waktu Lambda default 30000ms, maka fungsi Lambda mungkin habis waktu saat mencoba mencapai titik akhir Secrets Manager.

Fungsi rotasi Lambda Anda harus dapat mengakses titik akhir Secrets Manager. Jika fungsi Lambda Anda dapat mengakses internet, maka Anda dapat menggunakan titik akhir publik. Untuk menemukan titik akhir, lihat[AWS Secrets Manager titik akhir](asm_access.md#endpoints).

Jika fungsi Lambda Anda berjalan di VPC yang tidak memiliki akses internet, kami sarankan Anda mengonfigurasi titik akhir pribadi layanan Secrets Manager dalam VPC Anda. VPC Anda kemudian dapat mencegat permintaan yang ditujukan ke titik akhir regional publik dan mengarahkannya ke titik akhir pribadi. Untuk informasi selengkapnya, lihat [Titik akhir VPC (AWS PrivateLink)](vpc-endpoint-overview.md).

Atau, Anda dapat mengaktifkan fungsi Lambda Anda untuk mengakses titik akhir publik Secrets Manager dengan menambahkan gateway [NAT atau gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) [internet ke](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html) VPC Anda, yang memungkinkan lalu lintas dari VPC Anda mencapai titik akhir publik. Ini membuat VPC Anda berisiko lebih besar karena alamat IP untuk gateway dapat diserang dari Internet publik.

## Tidak ada aktivitas setelah “createSecret”
<a name="troubleshoot_rotation_createSecret"></a>

Berikut ini adalah masalah yang dapat menyebabkan rotasi berhenti setelah createSecret:

**Jaringan VPC ACLs tidak mengizinkan lalu lintas HTTPS masuk dan keluar.**  
Untuk informasi selengkapnya, lihat [Mengontrol lalu lintas ke subnet menggunakan Jaringan ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) di Panduan *Pengguna Amazon VPC*.

**Konfigurasi batas waktu fungsi Lambda terlalu pendek untuk melakukan tugas. **  
Untuk informasi selengkapnya, lihat [Mengonfigurasi opsi fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html) di Panduan *AWS Lambda Pengembang.*

**Endpoint VPC Secrets Manager tidak mengizinkan VPC CIDRs masuk dalam grup keamanan yang ditetapkan. **  
Untuk informasi selengkapnya, lihat [Mengontrol lalu lintas ke sumber daya menggunakan grup keamanan](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) di *Panduan Pengguna Amazon VPC*.

**Kebijakan titik akhir VPC Secrets Manager tidak mengizinkan Lambda menggunakan titik akhir VPC. **  
Untuk informasi selengkapnya, lihat [Menggunakan titik akhir AWS Secrets Manager VPC](vpc-endpoint-overview.md).

**Rahasianya menggunakan rotasi pengguna bergantian, rahasia superuser dikelola oleh Amazon RDS, dan fungsi Lambda tidak dapat mengakses RDS API.**  
Untuk [rotasi pengguna bergantian](rotation-strategy.md#rotating-secrets-two-users) di mana rahasia superuser [dikelola oleh AWS layanan lain](service-linked-secrets.md), fungsi rotasi Lambda harus dapat memanggil titik akhir layanan untuk mendapatkan informasi koneksi database. Kami menyarankan Anda mengonfigurasi titik akhir VPC untuk layanan database. Untuk informasi lebih lanjut, lihat:  
+  [Amazon RDS API dan titik akhir VPC antarmuka](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/vpc-interface-endpoints.html) di Panduan Pengguna *Amazon* RDS.
+ [Bekerja dengan titik akhir VPC](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-working-with-endpoints.html) di Panduan Manajemen Pergeseran Merah *Amazon*.

## Kesalahan: “Akses ke KMS tidak diizinkan”
<a name="troubleshoot_rotation_kms-key"></a>

Jika Anda lihat`ClientError: An error occurred (AccessDeniedException) when calling the GetSecretValue operation: Access to KMS is not allowed`, fungsi rotasi tidak memiliki izin untuk mendekripsi rahasia menggunakan kunci KMS yang digunakan untuk mengenkripsi rahasia. Mungkin ada kondisi dalam kebijakan izin yang membatasi konteks enkripsi ke rahasia tertentu. Untuk informasi tentang izin yang diperlukan, lihat[Pernyataan kebijakan untuk kunci yang dikelola pelanggan](rotating-secrets-required-permissions-function.md#rotating-secrets-required-permissions-function-cust-key-example).

## Kesalahan: “Kunci hilang dari JSON rahasia”
<a name="tshoot-lambda-mismatched-secretvalue"></a>

Fungsi rotasi Lambda membutuhkan nilai rahasia berada dalam struktur JSON tertentu. Jika Anda melihat kesalahan ini, maka JSON mungkin kehilangan kunci yang coba diakses oleh fungsi rotasi. Untuk informasi tentang struktur JSON untuk setiap jenis rahasia, lihat[Struktur rahasia JSON AWS Secrets Manager](reference_secret_json_structure.md).

## Kesalahan: “setSecret: Tidak dapat masuk ke database”
<a name="troubleshoot_rotation_setSecret"></a>

Berikut ini adalah masalah yang dapat menyebabkan kesalahan ini:

**Fungsi rotasi tidak dapat mengakses database.**  
Jika durasi tugas panjang, misalnya lebih dari 5000 ms, maka fungsi rotasi Lambda mungkin tidak dapat mengakses database melalui jaringan.   
Jika database atau layanan Anda berjalan pada instans Amazon EC2 di VPC, sebaiknya Anda mengonfigurasi fungsi Lambda agar berjalan di VPC yang sama. Kemudian fungsi rotasi dapat berkomunikasi langsung dengan layanan Anda. Untuk informasi selengkapnya, lihat [Mengonfigurasi akses VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-configuring).  
Untuk mengizinkan fungsi Lambda mengakses database atau layanan, Anda harus memastikan bahwa grup keamanan yang dilampirkan ke fungsi rotasi Lambda Anda memungkinkan koneksi keluar ke database atau layanan. Anda juga harus memastikan bahwa grup keamanan yang dilampirkan ke database atau layanan Anda mengizinkan koneksi masuk dari fungsi rotasi Lambda. 

**Kredensi dalam rahasia tidak benar.**  
Jika durasi tugas pendek, maka fungsi rotasi Lambda mungkin tidak dapat mengautentikasi dengan kredensyal dalam rahasia. Periksa kredensyal dengan masuk secara manual dengan informasi dalam `AWSCURRENT` dan `AWSPREVIOUS` versi rahasia menggunakan perintah. AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html)

**Database digunakan `scram-sha-256` untuk mengenkripsi kata sandi.**  
Jika database Anda adalah Aurora PostgreSQL versi 13 atau yang lebih baru dan digunakan `scram-sha-256` untuk mengenkripsi kata sandi, tetapi fungsi rotasi menggunakan `libpq` versi 9 atau lebih lama yang tidak mendukung`scram-sha-256`, maka fungsi rotasi tidak dapat terhubung ke database.   

**Untuk menentukan pengguna database mana yang menggunakan `scram-sha-256` enkripsi**
+ Lihat *Memeriksa pengguna dengan kata sandi non-Scram* di blog [Otentikasi SCRAM di RDS](https://aws.amazon.com/blogs/database/scram-authentication-in-rds-for-postgresql-13/) untuk PostgreSQL 13.

**Untuk menentukan versi fungsi rotasi `libpq` Anda yang digunakan**

1. Di komputer berbasis Linux, di konsol Lambda, navigasikan ke fungsi rotasi Anda dan unduh bundel penerapan. Buka kompres file zip ke direktori kerja.

1. Pada baris perintah, di direktori kerja, jalankan:

   `readelf -a libpq.so.5 | grep RUNPATH`

1. Jika Anda melihat string*`PostgreSQL-9.4.x`*, atau versi utama kurang dari 10, maka fungsi rotasi tidak mendukung`scram-sha-256`.
   + Output untuk fungsi rotasi yang tidak mendukung`scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/PostgreSQL-9.4.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]`
   + Output untuk fungsi rotasi yang mendukung`scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild-a1b2c/workspace/build/PostgreSQL/PostgreSQL-10.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild-a1b2c/workspace/src/PostgreSQL/build/private/install/lib]`
   + Output untuk fungsi rotasi yang mendukung`scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c /workspace/build/PostgreSQL/PostgreSQL-14.x_client_only. 123456 .0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil-path/build.libfarm/lib:/local/p4clients/pkgbuild- a1b2c /workspace/src/PostgreSQL/build/private/install/lib]`
   + Output untuk fungsi rotasi yang mendukung`scram-sha-256`:

     `0x000000000000001d (RUNPATH) Library runpath: [/local/p4clients/pkgbuild- a1b2c/workspace/build/PostgreSQL/PostgreSQL- 14.x_client_only.123456.0/AL2_x86_64/DEV.STD.PTHREAD/build/private/tmp/brazil- path/build.libfarm/lib:/local/p4clients/pkgbuild- a1b2c/workspace/src/PostgreSQL/build/private/install/lib]`
Jika Anda mengatur rotasi rahasia otomatis sebelum 30 Desember 2021, fungsi rotasi Anda menggabungkan versi sebelumnya `libpq` yang tidak mendukung`scram-sha-256`. Untuk mendukung`scram-sha-256`, Anda perlu [membuat ulang fungsi rotasi Anda](rotate-secrets_turn-on-for-db.md). 

**Database membutuhkan SSL/TLS akses.**  
Jika database Anda memerlukan SSL/TLS koneksi, tetapi fungsi rotasi menggunakan koneksi yang tidak terenkripsi, maka fungsi rotasi tidak dapat terhubung ke database. Fungsi rotasi untuk Amazon RDS (kecuali Oracle dan Db2) dan Amazon DocumentDB secara otomatis menggunakan Secure Socket Layer (SSL) atau Transport Layer Security (TLS) untuk terhubung ke database Anda, jika tersedia. Jika tidak, mereka menggunakan koneksi yang tidak terenkripsi.  
Jika Anda mengatur rotasi rahasia otomatis sebelum 20 Desember 2021, fungsi rotasi Anda mungkin didasarkan pada templat sebelumnya yang tidak mendukungSSL/TLS. To support connections that use SSL/TLS, Anda perlu [membuat ulang fungsi rotasi Anda](rotate-secrets_turn-on-for-db.md). 

**Untuk menentukan kapan fungsi rotasi Anda dibuat**

1. Di konsol Secrets Manager [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/), buka rahasia Anda. Di bagian **konfigurasi Rotasi**, di bawah **fungsi rotasi Lambda, Anda melihat fungsi** **Lambda ARN**, misalnya,. `arn:aws:lambda:aws-region:123456789012:function:SecretsManagerMyRotationFunction ` Salin nama fungsi dari akhir ARN, dalam contoh ini. ` SecretsManagerMyRotationFunction ` 

1. Di AWS Lambda konsol [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), di bawah **Fungsi**, tempel nama fungsi Lambda Anda di kotak pencarian, pilih Enter, lalu pilih fungsi Lambda. 

1. Di halaman detail fungsi, pada tab **Konfigurasi**, di bawah **Tag**, salin nilai di sebelah kunci **aws:cloudformation:stack-name**. 

1. Di AWS CloudFormation konsol [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/), di bawah **Tumpukan**, tempel nilai kunci di kotak pencarian, lalu pilih Enter.

1. Daftar tumpukan menyaring sehingga hanya tumpukan yang membuat fungsi rotasi Lambda yang muncul. Di kolom **Tanggal dibuat**, lihat tanggal tumpukan dibuat. Ini adalah tanggal fungsi rotasi Lambda dibuat.

## Kesalahan: “Tidak dapat mengimpor modul 'lambda\$1function'”
<a name="tshoot-python-version"></a>

Anda mungkin menerima kesalahan ini jika Anda menjalankan fungsi Lambda sebelumnya yang secara otomatis ditingkatkan dari Python 3.7 ke versi Python yang lebih baru. Untuk mengatasi kesalahan, Anda dapat mengubah versi fungsi Lambda kembali ke Python 3.7, dan kemudian. [Tingkatkan fungsi rotasi yang ada dari Python 3.7 ke 3.9](#troubleshoot_rotation_python39) Untuk informasi selengkapnya, lihat [Mengapa rotasi fungsi Secrets Manager Lambda saya gagal dengan kesalahan “modul pg tidak ditemukan”](https://repost.aws/knowledge-center/secrets-manager-lambda-rotation)? di *AWS re:post*.

## Tingkatkan fungsi rotasi yang ada dari Python 3.7 ke 3.9
<a name="troubleshoot_rotation_python39"></a>

Beberapa fungsi rotasi yang dibuat sebelum November 2022 menggunakan Python 3.7. AWS SDK untuk Python berhenti mendukung Python 3.7 pada Desember 2023. Untuk informasi selengkapnya, lihat [Pembaruan kebijakan dukungan Python untuk AWS SDKs dan Alat](https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/). Untuk beralih ke fungsi rotasi baru yang menggunakan Python 3.9, Anda dapat menambahkan properti runtime ke fungsi rotasi yang ada atau membuat ulang fungsi rotasi.

**Untuk menemukan fungsi rotasi Lambda mana yang menggunakan Python 3.7**

1. Masuk ke Konsol Manajemen AWS dan buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Dalam daftar **Fungsi**, filter untuk**SecretsManager**.

1. Dalam daftar fungsi yang difilter, di bawah **Runtime**, cari Python 3.7.

**Topics**
+ [Opsi 1: Buat ulang fungsi rotasi menggunakan CloudFormation](#update-python-opt-1)
+ [Opsi 2: Perbarui runtime untuk fungsi rotasi yang ada menggunakan CloudFormation](#update-python-opt-2)
+ [Opsi 3: Untuk AWS CDK pengguna, tingkatkan perpustakaan CDK](#update-python-opt-3)

### Opsi 1: Buat ulang fungsi rotasi menggunakan CloudFormation
<a name="update-python-opt-1"></a>

Saat Anda menggunakan konsol Secrets Manager untuk mengaktifkan rotasi, Secrets Manager menggunakan CloudFormation untuk membuat sumber daya yang diperlukan, termasuk fungsi rotasi Lambda. Jika Anda menggunakan konsol untuk mengaktifkan rotasi, atau Anda membuat fungsi rotasi menggunakan CloudFormation tumpukan, Anda dapat menggunakan CloudFormation tumpukan yang sama untuk membuat ulang fungsi rotasi dengan nama baru. Fungsi baru menggunakan versi Python yang lebih baru.

**Untuk menemukan CloudFormation tumpukan yang menciptakan fungsi rotasi**
+ **Pada halaman detail fungsi Lambda, pada tab **Konfigurasi**, pilih Tag.** **Lihat ARN di sebelah aws:cloudformation:stack-id.**

  Nama tumpukan disematkan di ARN, seperti yang ditunjukkan pada contoh berikut.
  + ARN: `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nama tumpukan: **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Untuk membuat ulang fungsi rotasi ()CloudFormation**

1. Di CloudFormation, cari tumpukan berdasarkan nama, lalu pilih **Perbarui**. 

   Jika kotak dialog muncul merekomendasikan Anda memperbarui tumpukan root, pilih **Buka tumpukan root**, lalu pilih **Perbarui**.

1. Pada halaman **Update stack**, di bawah **Siapkan template**, pilih **Edit di Application Composer**, dan kemudian di bawah **Edit template di Application Composer**, pilih tombol **Edit di Application** Composer.

1. Di Application Composer, lakukan hal berikut:

   1. Dalam kode template, di`SecretRotationScheduleHostedRotationLambda`, ganti nilai untuk `"functionName": "SecretsManagerTestRotationRDS"` dengan nama fungsi baru, misalnya di JSON, `"functionName": "SecretsManagerTestRotationRDSupdated"` 

   1. Pilih **Perbarui template**.

   1. Di kotak CloudFormation dialog **Lanjutkan ke**, pilih **Konfirmasi dan lanjutkan ke CloudFormation**.

1. Lanjutkan melalui alur kerja CloudFormation tumpukan dan kemudian pilih **Kirim**.

### Opsi 2: Perbarui runtime untuk fungsi rotasi yang ada menggunakan CloudFormation
<a name="update-python-opt-2"></a>

Saat Anda menggunakan konsol Secrets Manager untuk mengaktifkan rotasi, Secrets Manager menggunakan CloudFormation untuk membuat sumber daya yang diperlukan, termasuk fungsi rotasi Lambda. Jika Anda menggunakan konsol untuk mengaktifkan rotasi, atau Anda membuat fungsi rotasi menggunakan CloudFormation tumpukan, Anda dapat menggunakan CloudFormation tumpukan yang sama untuk memperbarui runtime untuk fungsi rotasi.

**Untuk menemukan CloudFormation tumpukan yang menciptakan fungsi rotasi**
+ **Pada halaman detail fungsi Lambda, pada tab **Konfigurasi**, pilih Tag.** **Lihat ARN di sebelah aws:cloudformation:stack-id.**

  Nama tumpukan disematkan di ARN, seperti yang ditunjukkan pada contoh berikut.
  + ARN: `arn:aws:cloudformation:us-west-2:408736277230:stack/SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda-3CUDHZMDMBO8/79fc9050-2eef-11ed-80f0-021fb13c0537`
  + Nama tumpukan: **SecretsManagerRDSMySQLRotationSingleUser5c2-SecretRotationScheduleHostedRotationLambda**

**Untuk memperbarui runtime untuk fungsi rotasi ()CloudFormation**

1. Di CloudFormation, cari tumpukan berdasarkan nama, lalu pilih **Perbarui**. 

   Jika kotak dialog muncul merekomendasikan Anda memperbarui tumpukan root, pilih **Buka tumpukan root**, lalu pilih **Perbarui**.

1. Pada halaman **Update stack**, di bawah **Siapkan template**, pilih **Edit di Application Composer**, dan kemudian di bawah **Edit template di Application Composer**, pilih tombol **Edit di Application** Composer.

1. Di Application Composer, lakukan hal berikut:

   1. Dalam template JSON, untuk, di bawah`SecretRotationScheduleHostedRotationLambda`, di bawah `Properties``Parameters`, tambahkan**"runtime": "python3.9"**.

   1. Pilih **Perbarui template**.

   1. Di kotak CloudFormation dialog **Lanjutkan ke**, pilih **Konfirmasi dan lanjutkan ke CloudFormation**.

1. Lanjutkan melalui alur kerja CloudFormation tumpukan dan kemudian pilih **Kirim**.

### Opsi 3: Untuk AWS CDK pengguna, tingkatkan perpustakaan CDK
<a name="update-python-opt-3"></a>

Jika Anda menggunakan versi AWS CDK sebelumnya v2.94.0 untuk mengatur rotasi rahasia Anda, Anda dapat memperbarui fungsi Lambda dengan memutakhirkan ke v2.94.0 atau yang lebih baru. Untuk informasi selengkapnya, lihat [Panduan Pengembang AWS Cloud Development Kit (AWS CDK) v2](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

## Tingkatkan fungsi rotasi yang ada dari Python 3.9 ke 3.10
<a name="troubleshoot_rotation_python_310"></a>

Secrets Manager beralih dari Python 3.9 ke 3.10 untuk fungsi rotasi Lambda. Untuk beralih ke fungsi rotasi baru yang menggunakan Python 3.10, Anda harus mengikuti jalur pemutakhiran berdasarkan metode penerapan Anda. Gunakan prosedur berikut untuk memutakhirkan versi Python dan dependensi yang mendasarinya.

**Untuk menemukan fungsi rotasi Lambda mana yang menggunakan Python 3.9**

1. Masuk ke Konsol Manajemen AWS dan buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Dalam daftar **Fungsi**, filter untuk**SecretsManager**.

1. Dalam daftar fungsi yang difilter, di bawah **Runtime**, cari**Python 3.9**.

### Perbarui jalur dengan metode penerapan
<a name="update-python-3.9-paths"></a>

Fungsi rotasi Lambda yang diidentifikasi dalam daftar ini dapat digunakan melalui konsol Secrets Manager, AWS Serverless Application Repository aplikasi, atau transformasi. CloudFormation Masing-masing strategi penyebaran ini memiliki jalur pembaruan yang berbeda. 

Gunakan salah satu prosedur berikut untuk memperbarui fungsi rotasi Lambda Anda, tergantung pada bagaimana fungsi Anda diterapkan.

------
#### [ AWS Secrets Manager console-deployed functions ]

Fungsi Lambda baru harus diterapkan melalui AWS Secrets Manager konsol karena Anda tidak dapat memperbarui dependensi secara manual untuk fungsi Lambda yang ada.

Gunakan prosedur berikut untuk memutakhirkan fungsi yang digunakan AWS Secrets Manager konsol.

1. Buka konsol Secrets Manager di [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/).

1. Di bawah **AWS Secrets Manager**, pilih **Rahasia**. Pilih rahasia yang menggunakan fungsi Lambda yang ingin Anda perbarui.

1. Arahkan ke tab **Rotasi** dan pilih opsi **Perbarui konfigurasi rotasi.**

1. Di bawah **Fungsi rotasi**, pilih **Buat fungsi baru**, dan masukkan nama baru untuk fungsi rotasi Lambda.

   1. (Opsional) Setelah pembaruan selesai, Anda dapat menguji fungsi Lambda yang diperbarui untuk mengonfirmasi bahwa pembaruan berfungsi seperti yang diharapkan. Di bawah tab **Rotasi**, pilih **Putar Rahasia Segera** untuk memulai rotasi langsung.

   1. (Opsional) Anda dapat melihat log fungsi dan versi Python yang digunakan saat runtime di Amazon. CloudWatch Untuk informasi selengkapnya, lihat [Melihat CloudWatch Log untuk fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-view.html#monitoring-cloudwatchlogs-console) di Panduan *AWS Lambda Pengembang*.

1. Setelah fungsi rotasi baru diatur, Anda dapat menghapus fungsi rotasi lama.

------
#### [ AWS Serverless Application Repository deployments ]

Prosedur berikut menunjukkan cara memutakhirkan AWS Serverless Application Repository penerapan. Fungsi Lambda yang digunakan melalui AWS Serverless Application Repository memiliki spanduk yang menyatakan `This function belongs to an application. Click here to manage it.` yang mencakup tautan ke aplikasi Lambda tempat fungsi tersebut berada.

**penting**  
AWS Serverless Application Repository ketersediaan Wilayah AWS tergantung.

Gunakan prosedur berikut untuk memperbarui fungsi yang AWS Serverless Application Repository diterapkan.

1. Buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Arahkan ke tab **Konfigurasi** fungsi Lambda yang perlu diperbarui.

   1. Anda akan memerlukan informasi berikut tentang fungsi Anda saat memperbarui AWS Serverless Application Repository aplikasi yang diterapkan. Anda dapat menemukan informasi ini di konsol Lambda.
     + **Nama aplikasi Lambda**
       + Nama aplikasi Lambda dapat ditemukan dengan menggunakan tautan di spanduk. Misalnya, spanduk menyatakan hal berikut`serverlessrepo-SecretsManagerRedshiftRotationSingleUser`. Nama dalam contoh ini adalah`SecretsManagerRedshiftRotationSingleUser`.
     + **Nama fungsi rotasi Lambda**
     + **Titik akhir Secrets Manager**
       + **Titik akhir dapat ditemukan di bawah tab **Konfigurasi** dan **variabel Lingkungan yang ditetapkan ke variabel** SECRETS\$1MANAGER\$1ENDPOINT.**

1. Untuk meng-upgrade Python, Anda harus memperbarui versi semantik dari aplikasi tanpa server. Lihat [Memperbarui Aplikasi](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-how-to-consume-new-version.html#update-applications) di *Panduan AWS Serverless Application Repository Pengembang*.

------
#### [ Custom Lambda rotation functions ]

Jika Anda membuat fungsi rotasi Lambda kustom, Anda harus memutakhirkan setiap dependensi paket dan runtime untuk fungsi-fungsi ini. Untuk informasi selengkapnya, lihat [Upgrade runtime fungsi Lambda ke](https://repost.aws/knowledge-center/lambda-upgrade-function-runtime) versi terbaru.

------
#### [ AWS::SecretsManager-2024-09-16 transform macro ]

Jika fungsi Lambda diterapkan melalui transformasi ini, [memperbarui tumpukan menggunakan template yang ada akan memungkinkan Anda menggunakan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html) runtime Lambda yang diperbarui. 

Gunakan prosedur berikut untuk memperbarui CloudFormation tumpukan menggunakan template yang ada.

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Pada halaman **Stacks**, pilih tumpukan yang ingin Anda perbarui.

1. Pilih **Perbarui** pada panel detail tumpukan.

1. Untuk **Pilih metode pembaruan templat**, pilih **Pembaruan langsung**.

1. Pada halaman **Tentukan template**, pilih **Gunakan template yang ada**.

1. Simpan semua opsi lain pada nilai defaultnya, lalu pilih **Perbarui tumpukan**.

Jika Anda mengalami masalah saat memperbarui tumpukan, lihat [Menentukan penyebab kegagalan tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) di *Panduan CloudFormation Pengguna*.

------
#### [ AWS::SecretsManager-2020-07-23 transform macro ]

Kami menyarankan Anda bermigrasi ke versi transformasi yang lebih baru jika Anda menggunakan. `AWS::SecretsManager-2020-07-23` Lihat [Memperkenalkan versi AWS Secrets Manager transformasi yang disempurnakan:: AWS: SecretsManager -2024-09-16](https://aws.amazon.com/blogs/security/introducing-an-enhanced-version-of-the-aws-secrets-manager-transform-awssecretsmanager-2024-09-16/) di Blog *AWS Keamanan* untuk informasi selengkapnya. Jika Anda terus menggunakan`AWS::SecretsManager-2020-07-23`, Anda dapat mengalami kesalahan ketidakcocokan antara versi runtime Anda dan artefak kode fungsi Lambda. Untuk informasi selengkapnya, lihat [AWS::SecretsManager:: RotationSchedule HostedRotationLambda](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-runtime) di *Referensi CloudFormation Template*. 

Jika Anda mengalami masalah saat memperbarui tumpukan, [Tentukan penyebab kegagalan tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/determine-root-cause-for-stack-failures.html) di *Panduan CloudFormation Pengguna*.

------

**Verifikasi peningkatan Python**  
**Untuk memverifikasi peningkatan Python, buka konsol Lambda ([https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/)) dan akses halaman Fungsi.** Pilih fungsi yang Anda perbarui. Di bawah bagian **Sumber kode**, tinjau file yang disertakan dalam direktori dan pastikan file Python .so adalah versi. `3.10`

## AWS Lambda rotasi rahasia dengan `PutSecretValue` gagal
<a name="troubleshoot_rotation_putsecretvalue"></a>

Jika Anda menggunakan peran yang diasumsikan atau rotasi lintas akun dengan Secrets Manager dan Anda menemukan **RotationFailed** acara CloudTrail dengan pesan: Versi rahasia tertunda *VERSION\$1ID * untuk Rahasia tidak *SECRET\$1ARN * dibuat oleh *LAMBDA\$1ARN.* Lambda Hapus `AWSPENDING` label pementasan dan mulai ulang rotasi, maka Anda perlu memperbarui fungsi Lambda Anda untuk menggunakan parameter. `RotationToken`<a name="troubleshoot_rotation_procedure"></a>

## Perbarui fungsi rotasi Lambda untuk disertakan `RotationToken`
<a name="troubleshoot_rotation_procedure"></a>

1. Unduh kode fungsi Lambda
   + Buka konsol Lambda
   + **Di panel navigasi, pilih Fungsi**
   + **Pilih fungsi rotasi rahasia Lambda Anda untuk nama Fungsi**
   + **Untuk **Download**, pilih salah satu **Kode fungsi.zip**, **AWS SAM file, Keduanya****
   + Pilih **OK** untuk menyimpan fungsi pada mesin lokal Anda.

1. Sunting `Lambda_handler`

   Sertakan parameter rotation\$1token dalam langkah create\$1secret untuk rotasi lintas akun:

   ```
   def lambda_handler(event, context):
       """Secrets Manager Rotation Template
   
       This is a template for creating an AWS Secrets Manager rotation lambda
   
       Args:
           event (dict): Lambda dictionary of event parameters. These keys must include the following:
               - SecretId: The secret ARN or identifier
               - ClientRequestToken: The ClientRequestToken of the secret version
               - Step: The rotation step (one of createSecret, setSecret, testSecret, or finishSecret)
               - RotationToken: the rotation token to put as parameter for PutSecretValue call
   
           context (LambdaContext): The Lambda runtime information
   
       Raises:
           ResourceNotFoundException: If the secret with the specified arn and stage does not exist
   
           ValueError: If the secret is not properly configured for rotation
   
           KeyError: If the event parameters do not contain the expected keys
   
       """
       arn = event['SecretId']
       token = event['ClientRequestToken']
       step = event['Step']
       # Add the rotation token
       rotation_token = event['RotationToken']
   
       # Setup the client
       service_client = boto3.client('secretsmanager', endpoint_url=os.environ['SECRETS_MANAGER_ENDPOINT'])
   
       # Make sure the version is staged correctly
       metadata = service_client.describe_secret(SecretId=arn)
       if not metadata['RotationEnabled']:
           logger.error("Secret %s is not enabled for rotation" % arn)
           raise ValueError("Secret %s is not enabled for rotation" % arn)
       versions = metadata['VersionIdsToStages']
       if token not in versions:
           logger.error("Secret version %s has no stage for rotation of secret %s." % (token, arn))
           raise ValueError("Secret version %s has no stage for rotation of secret %s." % (token, arn))
       if "AWSCURRENT" in versions[token]:
           logger.info("Secret version %s already set as AWSCURRENT for secret %s." % (token, arn))
           return
       elif "AWSPENDING" not in versions[token]:
           logger.error("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn))
           raise ValueError("Secret version %s not set as AWSPENDING for rotation of secret %s." % (token, arn))
       # Use rotation_token
       if step == "createSecret":
           create_secret(service_client, arn, token, rotation_token)
   
       elif step == "setSecret":
           set_secret(service_client, arn, token)
       
       elif step == "testSecret":
           test_secret(service_client, arn, token)
           
       elif step == "finishSecret":
           finish_secret(service_client, arn, token)
           
       else:
           raise ValueError("Invalid step parameter")
   ```

1. Edit `create_secret` kode

   Merevisi `create_secret` fungsi untuk menerima dan menggunakan `rotation_token` parameter:

   ```
   # Add rotation_token to the function
   def create_secret(service_client, arn, token, rotation_token):
   """Create the secret
   
   This method first checks for the existence of a secret for the passed in token. If one does not exist, it will generate a
   new secret and put it with the passed in token.
   
   Args:
   service_client (client): The secrets manager service client
   
   arn (string): The secret ARN or other identifier
   
   token (string): The ClientRequestToken associated with the secret version
   
   rotation_token (string): the rotation token to put as parameter for PutSecretValue call
   
   Raises:
   ResourceNotFoundException: If the secret with the specified arn and stage does not exist
   
   """
   # Make sure the current secret exists
   service_client.get_secret_value(SecretId=arn, VersionStage="AWSCURRENT")
   
   # Now try to get the secret version, if that fails, put a new secret
   try:
   service_client.get_secret_value(SecretId=arn, VersionId=token, VersionStage="AWSPENDING")
   logger.info("createSecret: Successfully retrieved secret for %s." % arn)
   except service_client.exceptions.ResourceNotFoundException:
   # Get exclude characters from environment variable
   exclude_characters = os.environ['EXCLUDE_CHARACTERS'] if 'EXCLUDE_CHARACTERS' in os.environ else '/@"\'\\'
   # Generate a random password
   passwd = service_client.get_random_password(ExcludeCharacters=exclude_characters)
   
   # Put the secret, using rotation_token
   service_client.put_secret_value(SecretId=arn, ClientRequestToken=token, SecretString=passwd['RandomPassword'], VersionStages=['AWSPENDING'], RotationToken=rotation_token)
   logger.info("createSecret: Successfully put secret for ARN %s and version %s." % (arn, token))
   ```

1. Unggah kode fungsi Lambda yang diperbarui

   Setelah memperbarui kode fungsi Lambda Anda, [unggah untuk memutar rahasia Anda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-update).

## Kesalahan: “Kesalahan saat menjalankan lambda *<arn>* selama *<a rotation>* langkah”
<a name="concurrency-related-failures"></a>

Jika Anda mengalami kegagalan rotasi rahasia intermiten dengan fungsi Lambda Anda macet dalam satu lingkaran set, misalnya antara **CreateSecret** dan**SetSecret**, masalahnya mungkin terkait dengan pengaturan konkurensi.

### Langkah pemecahan masalah konkurensi
<a name="concurrency-troubleshooting-steps"></a>

**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 

1. Periksa dan sesuaikan pengaturan konkurensi Lambda:
   + Verifikasi `reserved_concurrent_executions` bahwa tidak disetel terlalu rendah (misalnya, 1)
   + Jika menggunakan konkurensi cadangan, setel ke setidaknya 10
   + Pertimbangkan untuk menggunakan konkurensi tanpa syarat untuk lebih banyak fleksibilitas

1. Untuk konkurensi yang disediakan:
   + Jangan setel parameter konkurensi yang disediakan secara eksplisit (misalnya, di Terraform).
   + Jika Anda harus mengaturnya, gunakan nilai minimal 10.
   + Uji secara menyeluruh untuk memastikan nilai yang dipilih berfungsi untuk kasus penggunaan Anda.

1. Pantau dan sesuaikan konkurensi:
   + Hitung konkurensi menggunakan rumus ini: Concurrency = (permintaan rata-rata per detik) \$1 (durasi permintaan rata-rata dalam detik). Untuk informasi selengkapnya, lihat [Memperkirakan konkurensi cadangan](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#estimating-reserved-concurrency).
   + Amati dan catat nilai selama rotasi untuk menentukan pengaturan konkurensi yang sesuai.
   + Hati-hati saat menetapkan nilai konkurensi rendah. Mereka dapat menyebabkan pelambatan jika tidak ada cukup utas eksekusi yang tersedia.

Untuk informasi selengkapnya tentang mengonfigurasi konkurensi Lambda, [lihat Mengonfigurasi konkurensi cadangan dan Mengonfigurasi konkurensi yang disediakan](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) [di Panduan Pengembang.](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html) AWS Lambda 