Memecahkan masalah rotasi AWS Secrets Manager - AWS Secrets Manager

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

Untuk banyak layanan, Secrets Manager menggunakan fungsi Lambda untuk memutar rahasia. Untuk informasi selengkapnya, lihat Rotasi oleh fungsi Lambda. 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.

Cara memecahkan masalah kegagalan rotasi rahasia dalam fungsi AWS Lambda

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

Kemungkinan penyebab

  • 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

  1. Menganalisis CloudWatch log:

    • Cari pesan kesalahan tertentu atau perilaku tak terduga di log fungsi Lambda

    • Verifikasi bahwa semua langkah rotasi (CreateSecretSetSecret,TestSecret,,FinishSecret) sedang dicoba

  2. 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

  3. 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

  4. 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

  5. Uji versi rahasia:

    • Verifikasi bahwa AWSCURRENT versi rahasia memungkinkan akses database

    • Periksa apakah AWSPREVIOUS atau AWSPENDING versi valid

  6. Hapus rotasi yang tertunda:

    • Jika rotasi gagal secara konsisten, kosongkan label AWSPENDING pementasan dan coba lagi rotasi

  7. 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”

Jika tidak ada aktivitas setelah “Menemukan kredensil 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, lihatAWS Secrets Manager titik akhir.

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).

Atau, Anda dapat mengaktifkan fungsi Lambda Anda untuk mengakses titik akhir publik Secrets Manager dengan menambahkan gateway NAT atau gateway internet ke 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”

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 di Panduan Pengguna Amazon VPC.

Konfigurasi batas waktu fungsi Lambda terlalu pendek untuk melakukan tugas.

Untuk informasi selengkapnya, lihat Mengonfigurasi opsi fungsi Lambda 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 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.

Rahasianya menggunakan rotasi pengguna bergantian, rahasia superuser dikelola oleh Amazon RDS, dan fungsi Lambda tidak dapat mengakses RDS API.

Untuk rotasi pengguna bergantian di mana rahasia superuser dikelola oleh AWS layanan lain, 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 selengkapnya, lihat:

Kesalahan: “Akses ke KMS tidak diizinkan”

Jika Anda lihatClientError: 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, lihatPernyataan kebijakan untuk kunci yang dikelola pelanggan.

Kesalahan: “Kunci hilang dari JSON rahasia”

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, lihatStruktur rahasia JSON AWS Secrets Manager.

Kesalahan: “setSecret: Tidak dapat masuk ke database”

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 EC2 instans Amazon 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.

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 get-secret-value

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 mendukungscram-sha-256, maka fungsi rotasi tidak dapat terhubung ke database.

Untuk menentukan pengguna database mana yang menggunakan scram-sha-256 enkripsi
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.

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

    readelf -a libpq.so.5 | grep RUNPATH

  3. Jika Anda melihat stringPostgreSQL-9.4.x, atau versi mayor kurang dari 10, maka fungsi rotasi tidak mendukungscram-sha-256.

    • Output untuk fungsi rotasi yang tidak mendukungscram-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 mendukungscram-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 mendukungscram-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 mendukungscram-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]

catatan

Jika Anda mengatur rotasi rahasia otomatis sebelum 30 Desember 2021, fungsi rotasi Anda menggabungkan versi sebelumnya libpq yang tidak mendukungscram-sha-256. Untuk mendukungscram-sha-256, Anda perlu membuat ulang fungsi rotasi Anda.

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.

catatan

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.

Untuk menentukan kapan fungsi rotasi Anda dibuat
  1. Di konsol Secrets Manager 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

  2. Di AWS Lambda konsol https://console.aws.amazon.com/lambda/, di bawah Fungsi, tempel nama fungsi Lambda Anda di kotak pencarian, pilih Enter, lalu pilih fungsi Lambda.

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

  4. Di AWS CloudFormation konsol https://console.aws.amazon.com/cloudformation, di bawah Tumpukan, tempel nilai kunci di kotak pencarian, lalu pilih Enter.

  5. 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_function'”

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 Untuk informasi selengkapnya, lihat Mengapa rotasi fungsi Secrets Manager Lambda saya gagal dengan kesalahan “modul pg tidak ditemukan”? di AWS re:post.

Tingkatkan fungsi rotasi yang ada dari Python 3.7 ke 3.9

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. 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 AWS Management Console dan buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  2. Dalam daftar Fungsi, filter untukSecretsManager.

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

Opsi 1: Buat ulang fungsi rotasi menggunakan AWS CloudFormation

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

Untuk menemukan AWS 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 ()AWS CloudFormation
  1. Di AWS CloudFormation, cari tumpukan berdasarkan nama, lalu pilih Perbarui.

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

  2. 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.

  3. Di Application Composer, lakukan hal berikut:

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

    2. Pilih Perbarui template.

    3. Di kotak AWS CloudFormation dialog Lanjutkan ke, pilih Konfirmasi dan lanjutkan ke AWS CloudFormation.

  4. Lanjutkan melalui alur kerja AWS CloudFormation tumpukan dan kemudian pilih Kirim.

Opsi 2: Perbarui runtime untuk fungsi rotasi yang ada menggunakan AWS CloudFormation

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

Untuk menemukan AWS 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 ()AWS CloudFormation
  1. Di AWS CloudFormation, cari tumpukan berdasarkan nama, lalu pilih Perbarui.

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

  2. 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.

  3. Di Application Composer, lakukan hal berikut:

    1. Dalam template JSON, untuk, di bawahSecretRotationScheduleHostedRotationLambda, di bawah PropertiesParameters, tambahkan"runtime": "python3.9".

    2. Pilih Perbarui template.

    3. Di kotak AWS CloudFormation dialog Lanjutkan ke, pilih Konfirmasi dan lanjutkan ke AWS CloudFormation.

  4. Lanjutkan melalui alur kerja AWS CloudFormation tumpukan dan kemudian pilih Kirim.

Opsi 3: Untuk AWS CDK pengguna, tingkatkan perpustakaan CDK

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.

Tingkatkan fungsi rotasi yang ada dari Python 3.9 ke 3.10

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 AWS Management Console dan buka AWS Lambda konsol di https://console.aws.amazon.com/lambda/.

  2. Dalam daftar Fungsi, filter untukSecretsManager.

  3. Dalam daftar fungsi yang difilter, di bawah Runtime, cariPython 3.9.

Perbarui jalur dengan metode penerapan

Fungsi rotasi Lambda yang diidentifikasi dalam daftar ini dapat digunakan melalui konsol Secrets Manager, AWS Serverless Application Repository aplikasi, atau transformasi. AWS 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/.

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

  3. Arahkan ke tab Rotasi dan pilih opsi Perbarui konfigurasi rotasi.

  4. 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.

    2. (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 di Panduan AWS Lambda Pengembang.

  5. 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/.

  2. 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 berikutserverlessrepo-SecretsManagerRedshiftRotationSingleUser. Nama dalam contoh ini adalahSecretsManagerRedshiftRotationSingleUser.

      • Nama fungsi rotasi Lambda

      • Titik akhir Secrets Manager

        • Titik akhir dapat ditemukan di bawah tab Konfigurasi dan variabel Lingkungan yang ditetapkan ke variabel SECRETS_MANAGER_ENDPOINT.

  3. Untuk meng-upgrade Python, Anda harus memperbarui versi semantik dari aplikasi tanpa server. Lihat Memperbarui Aplikasi 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 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 runtime Lambda yang diperbarui.

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

  1. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  2. Pada halaman Stacks, pilih tumpukan yang ingin Anda perbarui.

  3. Pilih Perbarui pada panel detail tumpukan.

  4. Untuk Pilih metode pembaruan templat, pilih Pembaruan langsung.

  5. Pada halaman Tentukan template, pilih Gunakan template yang ada.

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

Jika Anda mengalami masalah saat memperbarui tumpukan, lihat Menentukan penyebab kegagalan tumpukan di Panduan AWS 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 di Blog AWS Keamanan untuk informasi selengkapnya. Jika Anda terus menggunakanAWS::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 di Referensi AWS CloudFormation Template.

Jika Anda mengalami masalah saat memperbarui tumpukan, Tentukan penyebab kegagalan tumpukan di Panduan AWS CloudFormation Pengguna.

Verifikasi peningkatan Python

Untuk memverifikasi peningkatan Python, buka konsol 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

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_ID untuk Rahasia tidak SECRET_ARN dibuat oleh LAMBDA_ARN. Lambda Hapus AWSPENDING label pementasan dan mulai ulang rotasi, maka Anda perlu memperbarui fungsi Lambda Anda untuk menggunakan parameter. RotationToken

Perbarui fungsi rotasi Lambda untuk disertakan RotationToken

  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.

  2. Sunting Lambda_handler

    Sertakan parameter rotation_token dalam langkah create_secret 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")
  3. 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))
  4. Unggah kode fungsi Lambda yang diperbarui

    Setelah memperbarui kode fungsi Lambda Anda, unggah untuk memutar rahasia Anda.

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

Langkah pemecahan masalah konkurensi

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

  2. 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.

  3. Pantau dan sesuaikan konkurensi:

    • Hitung konkurensi menggunakan rumus ini: Concurrency = (permintaan rata-rata per detik) * (durasi permintaan rata-rata dalam detik). Untuk informasi selengkapnya, lihat Memperkirakan konkurensi cadangan.

    • 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 di Panduan Pengembang. AWS Lambda