Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan rahasia Secrets Manager dalam fungsi Lambda
AWS Secrets Manager membantu Anda mengelola kredensi, kunci API, dan rahasia lain yang dibutuhkan fungsi Lambda Anda. Anda memiliki dua pendekatan utama untuk mengambil rahasia dalam fungsi Lambda Anda, keduanya menawarkan kinerja yang lebih baik dan biaya yang lebih rendah dibandingkan dengan mengambil rahasia secara langsung menggunakan SDK: AWS
-
AWS parameter dan rahasia Ekstensi Lambda - Solusi runtime-agnostik yang menyediakan antarmuka HTTP sederhana untuk mengambil rahasia
-
Powertools untuk utilitas AWS Lambda parameter - Solusi terintegrasi kode yang mendukung beberapa penyedia (Secrets Manager, Parameter Store, AppConfig) dengan transformasi bawaan
Kedua pendekatan mempertahankan cache rahasia lokal, menghilangkan kebutuhan fungsi Anda untuk memanggil Secrets Manager untuk setiap pemanggilan. Ketika fungsi Anda meminta rahasia, cache diperiksa terlebih dahulu. Jika rahasianya tersedia dan belum kedaluwarsa, itu segera dikembalikan. Jika tidak, itu diambil dari Secrets Manager, di-cache, dan dikembalikan. Mekanisme caching ini menghasilkan waktu respons yang lebih cepat dan mengurangi biaya dengan meminimalkan panggilan API.
Memilih pendekatan
Pertimbangkan faktor-faktor ini ketika memilih antara ekstensi dan PowerTools:
- Gunakan AWS parameter dan rahasia ekstensi Lambda saat:
-
Anda menginginkan solusi runtime-agnostik yang berfungsi dengan runtime Lambda apa pun
Anda memilih untuk tidak menambahkan dependensi kode ke fungsi Anda
Anda hanya perlu mengambil rahasia dari Secrets Manager atau Parameter Store
- Gunakan Powertools untuk utilitas AWS Lambda parameter saat:
-
Anda menginginkan pengalaman pengembangan terintegrasi dengan kode aplikasi Anda
Anda memerlukan dukungan untuk beberapa penyedia (Secrets Manager, Parameter Store, AppConfig)
Anda ingin transformasi data bawaan (penguraian JSON, decoding base64)
Anda menggunakan runtime Python,, Java TypeScript, atau .NET
Kapan menggunakan Secrets Manager dengan Lambda
Skenario umum untuk menggunakan Secrets Manager dengan Lambda meliputi:
-
Menyimpan kredensi database yang digunakan fungsi Anda untuk terhubung ke Amazon RDS atau database lainnya
-
Mengelola kunci API untuk layanan eksternal yang dipanggil fungsi Anda
-
Menyimpan kunci enkripsi atau data konfigurasi sensitif lainnya
-
Memutar kredensil secara otomatis tanpa perlu memperbarui kode fungsi Anda
Menggunakan AWS parameter dan rahasia ekstensi Lambda
AWS Parameter dan rahasia ekstensi Lambda menggunakan antarmuka HTTP sederhana yang kompatibel dengan runtime Lambda apa pun. Secara default, ini menyimpan rahasia selama 300 detik (5 menit) dan dapat menampung hingga 1.000 rahasia. Anda dapat menyesuaikan pengaturan ini dengan variabel lingkungan.
Gunakan Secrets Manager dalam fungsi Lambda
Bagian ini mengasumsikan bahwa Anda sudah memiliki rahasia Secrets Manager. Untuk membuat rahasia, lihat Membuat AWS Secrets Manager rahasia.
Pilih runtime pilihan Anda dan ikuti langkah-langkah untuk membuat fungsi yang mengambil rahasia dari Secrets Manager. Fungsi contoh mengambil rahasia dari Secrets Manager dan dapat digunakan untuk mengakses kredensi database, kunci API, atau data konfigurasi sensitif lainnya dalam aplikasi Anda.
Buka halaman Fungsi
di konsol Lambda. -
Pilih Buat fungsi.
-
Pilih Penulis dari awal.
-
Untuk Nama fungsi, masukkan
secret-retrieval-demo. -
Pilih Runtime pilihan Anda.
-
Pilih Buat fungsi.
Untuk meng-upload paket deployment
-
Di tab Kode fungsi, pilih Unggah dari dan pilih file.zip (untuk Python dan Node.js) atau file.jar (untuk Java).
-
Unggah paket penerapan yang Anda buat sebelumnya.
-
Pilih Simpan.
Untuk menambahkan ekstensi AWS Parameter dan Rahasia Lambda sebagai lapisan
-
Di tab Code fungsi, gulir ke bawah ke Layers.
-
Pilih Tambahkan lapisan.
-
Pilih AWS layer.
-
Pilih AWS-Parameter-dan-rahasia-Lambda-ekstensi.
-
Pilih versi terbaru.
-
Pilih Tambahkan.
Untuk menambahkan izin Secrets Manager ke peran eksekusi Anda
-
Pilih tab Konfigurasi, lalu pilih Izin.
-
Di bawah Nama peran, pilih tautan ke peran eksekusi Anda. Tautan ini membuka peran di konsol IAM.
-
Pilih Tambahkan izin, lalu pilih Buat kebijakan sebaris.
-
Pilih tab JSON dan tambahkan kebijakan berikut. Untuk
Resource, masukkan ARN rahasia Anda. -
Pilih Berikutnya.
-
Masukkan nama untuk kebijakan.
-
Pilih Buat kebijakan.
Untuk menguji fungsi
-
Kembali ke konsol Lambda.
-
Pilih tab Uji.
-
Pilih Uji. Anda akan melihat tanggapan berikut:
Variabel-variabel lingkungan
Ekstensi AWS Parameter dan Rahasia Lambda menggunakan pengaturan default berikut. Anda dapat mengganti pengaturan ini dengan membuat variabel lingkungan yang sesuai. Untuk melihat pengaturan saat ini untuk suatu fungsi, setel PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL keDEBUG. Ekstensi akan mencatat informasi konfigurasinya ke CloudWatch Log pada awal setiap pemanggilan fungsi.
| Pengaturan | Nilai default | Nilai valid | Variabel lingkungan | Detail |
|---|---|---|---|---|
| Port HTTP | 2773 | 1 - 65535 | PARAMETER_SECRETS_EXTENSION_HTTP_PORT | Port untuk server HTTP lokal |
| Cache diaktifkan | BETUL | TRUE | FALSE | PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED | Aktifkan atau nonaktifkan cache |
| Ukuran cache | 1000 | 0 - 1000 | PARAMETER_SECRETS_EXTENSION_CACHE_SIZE | Setel ke 0 untuk menonaktifkan caching |
| Secrets Manager TTL | 300 detik | 0 - 300 detik | SECRETS_MANAGER_TTL | Time-to-live untuk rahasia cache. Setel ke 0 untuk menonaktifkan caching. Variabel ini diabaikan jika nilai untuk PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE adalah 0. |
| Parameter Toko TTL | 300 detik | 0 - 300 detik | SSM_PARAMETER_STORE_TTL | Time-to-live untuk parameter cache. Setel ke 0 untuk menonaktifkan caching. Variabel ini diabaikan jika nilai untuk PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE adalah 0. |
| Tingkat log | INFO | DEBUG | INFO | PERINGATAN | KESALAHAN | TIDAK ADA | PARAMETER_SECRETS_EXTENSION_LOG_LEVEL | Tingkat detail yang dilaporkan dalam log untuk ekstensi |
| Koneksi maks | 3 | 1 atau lebih | PARAMETER_SECRETS_EXTENSION_MAX_CONNECTIONS | Jumlah maksimum koneksi HTTP untuk permintaan ke Parameter Store atau Secrets Manager |
| Batas waktu Secrets Manager | 0 (tidak ada batas waktu) | Semua bilangan bulat | SECRETS_MANAGER_TIMEOUT_MILLIS | Batas waktu untuk permintaan ke Secrets Manager (dalam milidetik) |
| Batas waktu penyimpanan Parameter | 0 (tidak ada batas waktu) | Semua bilangan bulat | SSM_PARAMETER_STORE_TIMEOUT_MILLIS | Batas waktu untuk permintaan ke Parameter Store (dalam milidetik) |
Bekerja dengan rotasi rahasia
Jika Anda sering memutar rahasia, durasi cache default 300 detik dapat menyebabkan fungsi Anda menggunakan rahasia yang sudah ketinggalan zaman. Anda memiliki dua opsi untuk memastikan fungsi Anda menggunakan nilai rahasia terbaru:
-
Kurangi cache TTL dengan mengatur variabel
SECRETS_MANAGER_TTLlingkungan ke nilai yang lebih rendah (dalam hitungan detik). Misalnya, mengaturnya untuk60memastikan fungsi Anda tidak akan pernah menggunakan rahasia yang berumur lebih dari satu menit. -
Gunakan label
AWSCURRENTatauAWSPREVIOUSpementasan dalam permintaan rahasia Anda untuk memastikan Anda mendapatkan versi spesifik yang Anda inginkan:secretsmanager/get?secretId=YOUR_SECRET_NAME&versionStage=AWSCURRENT
Pilih pendekatan yang paling menyeimbangkan kebutuhan Anda akan kinerja dan kesegaran. TTL yang lebih rendah berarti panggilan yang lebih sering ke Secrets Manager tetapi memastikan Anda bekerja dengan nilai rahasia terbaru.
Menggunakan utilitas parameter dari Powertools untuk AWS Lambda
Utilitas parameter dari Powertools untuk AWS Lambda menyediakan antarmuka terpadu untuk mengambil rahasia dari beberapa penyedia termasuk Secrets Manager, penyimpanan parameter, dan. AppConfig Ini menangani caching, transformasi, dan memberikan pengalaman pengembangan yang lebih terintegrasi dibandingkan dengan pendekatan ekstensi.
Manfaat utilitas parameter
Beberapa penyedia - Ambil parameter dari Secrets Manager, Parameter Store, dan AppConfig menggunakan antarmuka yang sama
Transformasi bawaan - Penguraian JSON otomatis, decoding base64, dan transformasi data lainnya
Caching terintegrasi - Caching yang dapat dikonfigurasi dengan dukungan TTL untuk mengurangi panggilan API
Keamanan tipe - Dukungan pengetikan yang kuat di TypeScript dan runtime lain yang didukung
Penanganan kesalahan - Logika coba ulang bawaan dan penanganan kesalahan
Contoh kode
Contoh berikut menunjukkan cara mengambil rahasia menggunakan utilitas Parameter di runtime yang berbeda:
- Python
-
catatan
Untuk contoh lengkap dan petunjuk penyiapan, lihat dokumentasi utilitas Parameter
. Mengambil rahasia dari Secrets Manager dengan Powertools untuk utilitas AWS Lambda Parameter.
from aws_lambda_powertools import Logger from aws_lambda_powertools.utilities import parameters logger = Logger() def lambda_handler(event, context): try: # Get secret with caching (default TTL: 5 seconds) secret_value = parameters.get_secret("my-secret-name") # Get secret with custom TTL secret_with_ttl = parameters.get_secret("my-secret-name", max_age=300) # Get secret and transform JSON secret_json = parameters.get_secret("my-json-secret", transform="json") logger.info("Successfully retrieved secrets") return { 'statusCode': 200, 'body': 'Successfully retrieved secrets' } except Exception as e: logger.error(f"Error retrieving secret: {str(e)}") return { 'statusCode': 500, 'body': f'Error: {str(e)}' } - TypeScript
-
catatan
Untuk contoh lengkap dan petunjuk penyiapan, lihat dokumentasi utilitas Parameter.
Mengambil rahasia dari Secrets Manager dengan Powertools untuk utilitas AWS Lambda Parameter.
import { Logger } from '@aws-lambda-powertools/logger'; import { getSecret } from '@aws-lambda-powertools/parameters/secrets'; import type { Context } from 'aws-lambda'; const logger = new Logger(); export const handler = async (event: any, context: Context) => { try { // Get secret with caching (default TTL: 5 seconds) const secretValue = await getSecret('my-secret-name'); // Get secret with custom TTL const secretWithTtl = await getSecret('my-secret-name', { maxAge: 300 }); // Get secret and transform JSON const secretJson = await getSecret('my-json-secret', { transform: 'json' }); logger.info('Successfully retrieved secrets'); return { statusCode: 200, body: 'Successfully retrieved secrets' }; } catch (error) { logger.error('Error retrieving secret', { error }); return { statusCode: 500, body: `Error: ${error}` }; } }; - Java
-
catatan
Untuk contoh lengkap dan petunjuk penyiapan, lihat dokumentasi utilitas Parameter
. Mengambil rahasia dari Secrets Manager dengan Powertools untuk utilitas AWS Lambda Parameter.
import software.amazon.lambda.powertools.logging.Logging; import software.amazon.lambda.powertools.parameters.SecretsProvider; import software.amazon.lambda.powertools.parameters.ParamManager; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; public class SecretHandler implements RequestHandler<Object, String> { private final SecretsProvider secretsProvider = ParamManager.getSecretsProvider(); @Logging @Override public String handleRequest(Object input, Context context) { try { // Get secret with caching (default TTL: 5 seconds) String secretValue = secretsProvider.get("my-secret-name"); // Get secret with custom TTL (300 seconds) String secretWithTtl = secretsProvider.withMaxAge(300).get("my-secret-name"); // Get secret and transform JSON MySecret secretJson = secretsProvider.get("my-json-secret", MySecret.class); return "Successfully retrieved secrets"; } catch (Exception e) { return "Error retrieving secret: " + e.getMessage(); } } public static class MySecret { // Define your secret structure here } } - .NET
-
catatan
Untuk contoh lengkap dan petunjuk penyiapan, lihat dokumentasi utilitas Parameter.
Mengambil rahasia dari Secrets Manager dengan Powertools untuk utilitas AWS Lambda Parameter.
using AWS.Lambda.Powertools.Logging; using AWS.Lambda.Powertools.Parameters; using Amazon.Lambda.Core; [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] public class Function { private readonly ISecretsProvider _secretsProvider; public Function() { _secretsProvider = ParametersManager.SecretsProvider; } [Logging] public async Task<string> FunctionHandler(object input, ILambdaContext context) { try { // Get secret with caching (default TTL: 5 seconds) var secretValue = await _secretsProvider.GetAsync("my-secret-name"); // Get secret with custom TTL var secretWithTtl = await _secretsProvider.WithMaxAge(TimeSpan.FromMinutes(5)) .GetAsync("my-secret-name"); // Get secret and transform JSON var secretJson = await _secretsProvider.GetAsync<MySecret>("my-json-secret"); return "Successfully retrieved secrets"; } catch (Exception e) { return $"Error retrieving secret: {e.Message}"; } } public class MySecret { // Define your secret structure here } }
Pengaturan dan izin
Untuk menggunakan utilitas Parameter, Anda perlu:
Instal Powertools AWS Lambda untuk runtime Anda. Lihat perinciannya di Powertools untuk AWS Lambda.
Tambahkan izin IAM yang diperlukan ke peran eksekusi fungsi Anda. Lihat Mengelola izin di AWS Lambda untuk detailnya.
Konfigurasikan pengaturan opsional apa pun melalui variabel lingkungan.
Izin IAM yang diperlukan sama dengan pendekatan ekstensi. Utilitas akan secara otomatis menangani caching dan panggilan API ke Secrets Manager berdasarkan konfigurasi Anda.