Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memberikan fungsi Lambda akses ke sumber daya di Amazon VPC
Dengan Amazon Virtual Private Cloud (AmazonVPC), Anda dapat membuat jaringan pribadi di sumber daya host Anda Akun AWS seperti instans Amazon Elastic Compute Cloud (AmazonEC2), instans Amazon Relational Database Service (AmazonRDS), dan instans Amazon. ElastiCache Anda dapat memberikan fungsi Lambda Anda akses ke sumber daya yang dihosting di Amazon VPC dengan melampirkan fungsi Anda ke VPC melalui subnet pribadi yang berisi sumber daya. Ikuti petunjuk di bagian berikut untuk melampirkan fungsi Lambda ke Amazon VPC menggunakan konsol Lambda, AWS Command Line Interface ()AWS CLI, atau. AWS SAM
catatan
Setiap fungsi Lambda berjalan di dalam VPC yang dimiliki dan dikelola oleh layanan Lambda. Ini VPCs dikelola secara otomatis oleh Lambda dan tidak terlihat oleh pelanggan. Mengonfigurasi fungsi Anda untuk mengakses AWS sumber daya lain di Amazon tidak VPC berpengaruh pada fungsi yang dikelola Lambda VPC yang dijalankan di dalamnya.
Bagian-bagian
- Diperlukan izin IAM
- Melampirkan fungsi Lambda ke Amazon VPC di Anda Akun AWS
- Akses internet saat dilampirkan ke VPC
- IPv6dukungan
- Praktik terbaik untuk menggunakan Lambda dengan Amazon VPCs
- Memahami Antarmuka Jaringan Elastis Hyperplane () ENIs
- Menggunakan tombol IAM kondisi untuk VPC pengaturan
- VPCtutorial
Diperlukan izin IAM
Untuk melampirkan fungsi Lambda ke Amazon VPC di Anda, Akun AWS Lambda memerlukan izin untuk membuat dan mengelola antarmuka jaringan yang digunakannya untuk memberikan fungsi Anda akses ke sumber daya di. VPC
Antarmuka jaringan yang dibuat Lambda dikenal sebagai Hyperplane Elastic Network Interfaces, atau Hyperplane. ENIs Untuk mempelajari lebih lanjut tentang antarmuka jaringan ini, lihatMemahami Antarmuka Jaringan Elastis Hyperplane () ENIs.
Anda dapat memberikan fungsi izin yang dibutuhkan dengan melampirkan kebijakan AWS terkelola AWSLambdaVPCAccessExecutionRoleke peran eksekusi fungsi Anda. Saat Anda membuat fungsi baru di konsol Lambda dan melampirkannya ke, VPC Lambda secara otomatis menambahkan kebijakan izin ini untuk Anda.
Jika Anda lebih suka membuat kebijakan IAM izin sendiri, pastikan untuk menambahkan semua izin berikut:
-
EC2: CreateNetworkInterface
-
ec2: DescribeNetworkInterfaces — Tindakan ini hanya berfungsi jika diizinkan di semua sumber daya (
"Resource": "*"
). -
EC2: DescribeSubnets
-
ec2: DeleteNetworkInterface — Jika Anda tidak menentukan ID sumber daya untuk DeleteNetworkInterfacedalam peran eksekusi, fungsi Anda mungkin tidak dapat mengakses. VPC Entah menentukan ID sumber daya yang unik, atau sertakan semua sumber dayaIDs, misalnya,
"Resource": "arn:aws:ec2:us-west-2:123456789012:*/*"
. -
EC2: AssignPrivateIpAddresses
-
EC2: UnassignPrivateIpAddresses
Perhatikan bahwa peran fungsi Anda hanya memerlukan izin ini untuk membuat antarmuka jaringan, bukan untuk memanggil fungsi Anda. Anda masih dapat menjalankan fungsi dengan sukses saat dilampirkan ke AmazonVPC, meskipun Anda menghapus izin ini dari peran eksekusi fungsi Anda.
Untuk melampirkan fungsi Anda keVPC, Lambda juga perlu memverifikasi sumber daya jaringan menggunakan peran IAM pengguna Anda. Pastikan peran pengguna Anda memiliki IAM izin berikut:
-
EC2: DescribeSecurityGroups
-
EC2: DescribeSubnets
-
EC2: DescribeVpcs
catatan
EC2Izin Amazon yang Anda berikan untuk peran eksekusi fungsi Anda digunakan oleh layanan Lambda untuk melampirkan fungsi Anda ke file. VPC Namun, Anda juga secara implisit memberikan izin ini ke kode fungsi Anda. Ini berarti bahwa kode fungsi Anda dapat melakukan EC2 API panggilan Amazon ini. Untuk saran tentang mengikuti praktik terbaik keamanan, lihatPraktik terbaik keamanan.
Melampirkan fungsi Lambda ke Amazon VPC di Anda Akun AWS
Lampirkan fungsi Anda ke Amazon VPC di Anda Akun AWS dengan menggunakan konsol Lambda, atau. AWS CLI AWS SAM Jika Anda menggunakan AWS CLI atau AWS SAM, atau melampirkan fungsi yang ada ke VPC menggunakan konsol Lambda, pastikan bahwa peran eksekusi fungsi Anda memiliki izin yang diperlukan yang tercantum di bagian sebelumnya.
Fungsi Lambda tidak dapat terhubung langsung ke a VPC dengan penyewaan instans khusus. Untuk terhubung ke sumber daya dalam dedicatedVPC, mengintip ke detik VPC dengan penyewaan default
Akses internet saat dilampirkan ke VPC
Secara default, fungsi Lambda memiliki akses ke internet publik. Ketika Anda melampirkan fungsi Anda ke aVPC, itu hanya dapat mengakses sumber daya yang tersedia di dalamnyaVPC. Untuk memberikan akses fungsi Anda ke internet, Anda juga perlu mengkonfigurasi VPC untuk memiliki akses internet. Untuk mempelajari selengkapnya, lihat Aktifkan akses internet untuk fungsi VPC Lambda yang terhubung.
IPv6dukungan
Fungsi Anda dapat terhubung ke sumber daya dalam VPC subnet dual-stack over. IPv6 Opsi ini dimatikan secara default. Untuk mengizinkan IPv6 lalu lintas keluar, gunakan konsol atau --vpc-config Ipv6AllowedForDualStack=true
opsi dengan fungsi atau perintah buat. update-function-configuration
catatan
Untuk memungkinkan IPv6 lalu lintas keluar di aVPC, semua subnet yang terhubung ke fungsi harus subnet dual-stack. Lambda tidak mendukung IPv6 koneksi keluar untuk subnet IPv6 -only di aVPC, IPv6 koneksi keluar untuk fungsi yang tidak terhubung keVPC, atau koneksi masuk menggunakan endpoint (). IPv6 VPC AWS PrivateLink
Anda dapat memperbarui kode fungsi Anda untuk secara eksplisit terhubung ke sumber daya subnet. IPv6 Contoh Python berikut membuka soket dan menghubungkan ke server. IPv6
contoh — Connect ke IPv6 server
def connect_to_server(event, context): server_address = event['host'] server_port = event['port'] message = event['message'] run_connect_to_server(server_address, server_port, message) def run_connect_to_server(server_address, server_port, message): sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0) try: # Send data sock.connect((server_address, int(server_port), 0, 0)) sock.sendall(message.encode()) BUFF_SIZE = 4096 data = b'' while True: segment = sock.recv(BUFF_SIZE) data += segment # Either 0 or end of data if len(segment) < BUFF_SIZE: break return data finally: sock.close()
Praktik terbaik untuk menggunakan Lambda dengan Amazon VPCs
Untuk memastikan bahwa VPC konfigurasi Lambda Anda memenuhi pedoman praktik terbaik, ikuti saran di bagian berikut.
Praktik terbaik keamanan
Untuk melampirkan fungsi Lambda Anda ke aVPC, Anda perlu memberikan peran eksekusi fungsi Anda sejumlah izin AmazonEC2. Izin ini diperlukan untuk membuat antarmuka jaringan yang digunakan fungsi Anda untuk mengakses sumber daya di. VPC Namun, izin ini juga secara implisit diberikan ke kode fungsi Anda. Ini berarti bahwa kode fungsi Anda memiliki izin untuk melakukan EC2 API panggilan Amazon ini.
Untuk mengikuti prinsip akses hak istimewa paling rendah, tambahkan kebijakan penolakan seperti contoh berikut ke peran eksekusi fungsi Anda. Kebijakan ini mencegah fungsi Anda melakukan panggilan ke Amazon EC2 APIs yang digunakan layanan Lambda untuk melampirkan fungsi Anda ke file. VPC
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface", "ec2:AssignPrivateIpAddresses", "ec2:UnassignPrivateIpAddresses", ], "Resource": [ "*" ], "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": [ "arn:aws:lambda:us-west-2:123456789012:function:my_function" ] } } } ] }
AWS menyediakan grup keamanan dan Daftar Kontrol Akses jaringan (ACLs) untuk meningkatkan keamanan di jaringan AndaVPC. Grup keamanan mengontrol lalu lintas masuk dan keluar untuk sumber daya Anda, dan jaringan ACLs mengontrol lalu lintas masuk dan keluar untuk subnet Anda. Grup keamanan menyediakan kontrol akses yang cukup untuk sebagian besar subnet. Anda dapat menggunakan jaringan ACLs jika Anda menginginkan lapisan keamanan tambahan untuk AndaVPC. Untuk panduan umum tentang praktik terbaik keamanan saat menggunakan AmazonVPCs, lihat Praktik terbaik keamanan untuk Anda VPC di Panduan Pengguna Amazon Virtual Private Cloud.
Praktik terbaik kinerja
Ketika Anda melampirkan fungsi Anda keVPC, Lambda memeriksa untuk melihat apakah ada sumber daya jaringan yang tersedia (HyperplaneENI) yang dapat digunakan untuk terhubung. Hyperplane ENIs dikaitkan dengan kombinasi tertentu dari kelompok keamanan dan VPC subnet. Jika Anda telah melampirkan satu fungsi ke aVPC, menentukan subnet dan grup keamanan yang sama saat Anda melampirkan fungsi lain berarti Lambda dapat berbagi sumber daya jaringan dan menghindari kebutuhan untuk membuat Hyperplane baru. ENI Untuk informasi selengkapnya tentang Hyperplane ENIs dan siklus hidupnya, lihat. Memahami Antarmuka Jaringan Elastis Hyperplane () ENIs
Memahami Antarmuka Jaringan Elastis Hyperplane () ENIs
Hyperplane ENI adalah sumber daya terkelola yang bertindak sebagai antarmuka jaringan antara fungsi Lambda Anda dan sumber daya yang Anda inginkan untuk terhubung ke fungsi Anda. Layanan Lambda membuat dan mengelola ini ENIs secara otomatis ketika Anda melampirkan fungsi Anda ke file. VPC
Hyperplane ENIs tidak langsung terlihat oleh Anda, dan Anda tidak perlu mengkonfigurasi atau mengelolanya. Namun, mengetahui cara kerjanya dapat membantu Anda memahami perilaku fungsi Anda saat Anda melampirkannya ke fileVPC.
Pertama kali Anda melampirkan fungsi ke VPC menggunakan subnet tertentu dan kombinasi grup keamanan, Lambda membuat Hyperplane. ENI Fungsi lain di akun Anda yang menggunakan kombinasi subnet dan grup keamanan yang sama juga dapat menggunakan iniENI. Jika memungkinkan, Lambda menggunakan kembali yang ada ENIs untuk mengoptimalkan pemanfaatan sumber daya dan meminimalkan pembuatan yang baru. ENIs Setiap Hyperplane ENI mendukung hingga 65.000 koneksi/port. Jika jumlah koneksi melebihi batas ini, Lambda menskalakan jumlah secara ENIs otomatis berdasarkan lalu lintas jaringan dan persyaratan konkurensi.
Untuk fungsi baru, saat Lambda membuat HyperplaneENI, fungsi Anda tetap dalam status Pending dan Anda tidak dapat memanggilnya. Fungsi Anda beralih ke status Aktif hanya ketika Hyperplane ENI siap, yang dapat memakan waktu beberapa menit. Untuk fungsi yang ada, Anda tidak dapat melakukan operasi tambahan yang menargetkan fungsi, seperti membuat versi atau memperbarui kode fungsi, tetapi Anda dapat terus memanggil versi fungsi sebelumnya.
catatan
Jika fungsi Lambda tetap menganggur selama 30 hari, Lambda merebut kembali ENIs Hyperplane yang tidak digunakan dan menyetel status fungsi ke idle. Upaya pemanggilan berikutnya akan gagal, dan fungsi memasuki kembali status Pending sampai Lambda menyelesaikan pembuatan atau alokasi Hyperplane. ENI Untuk informasi selengkapnya tentang status fungsi Lambda, lihat. Status fungsi Lambda
Menggunakan tombol IAM kondisi untuk VPC pengaturan
Anda dapat menggunakan kunci kondisi khusus Lambda untuk VPC pengaturan guna memberikan kontrol izin tambahan untuk fungsi Lambda Anda. Misalnya, Anda dapat mengharuskan semua fungsi di organisasi Anda terhubung ke fileVPC. Anda juga dapat menentukan subnet dan grup keamanan yang dapat dan tidak dapat digunakan oleh pengguna fungsi.
Lambda mendukung kunci kondisi berikut dalam IAM kebijakan:
-
lambda: VpcIds — Izinkan atau tolak satu atau lebihVPCs.
-
lambda: SubnetIds — Izinkan atau tolak satu atau lebih subnet.
-
lambda: SecurityGroupIds — Izinkan atau tolak satu atau lebih grup keamanan.
APIOperasi Lambda CreateFunctiondan UpdateFunctionConfigurationmendukung kunci kondisi ini. Untuk informasi selengkapnya tentang menggunakan kunci kondisi dalam IAM kebijakan, lihat Elemen IAM JSON Kebijakan: Kondisi dalam Panduan IAM Pengguna.
Tip
Jika fungsi Anda sudah menyertakan VPC konfigurasi dari API permintaan sebelumnya, Anda dapat mengirim UpdateFunctionConfiguration
permintaan tanpa VPC konfigurasi.
Contoh kebijakan dengan tombol kondisi untuk VPC pengaturan
Contoh berikut menunjukkan cara menggunakan tombol kondisi untuk VPC pengaturan. Setelah Anda membuat pernyataan kebijakan dengan batasan yang diinginkan, tambahkan pernyataan kebijakan untuk pengguna atau peran target.
Pastikan bahwa pengguna hanya menerapkan fungsi VPC -connected
Untuk memastikan bahwa semua pengguna hanya menerapkan fungsi VPC -connected, Anda dapat menolak operasi pembuatan dan pembaruan fungsi yang tidak menyertakan ID yang validVPC.
Perhatikan bahwa VPC ID bukan parameter input untuk UpdateFunctionConfiguration
permintaan CreateFunction
atau. Lambda mengambil nilai VPC ID berdasarkan parameter subnet dan grup keamanan.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceVPCFunction", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "Null": { "lambda:VpcIds": "true" } } } ] }
Menolak akses pengguna ke grup tertentuVPCs, subnet, atau keamanan
Untuk menolak akses pengguna ke spesifikVPCs, gunakan StringEquals
untuk memeriksa nilai lambda:VpcIds
kondisi. Contoh berikut menolak akses pengguna ke vpc-1
dan vpc-2
.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceOutOfVPC", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "StringEquals": { "lambda:VpcIds": ["vpc-1", "vpc-2"] } } }
Untuk menolak akses pengguna ke subnet tertentu, gunakan StringEquals
untuk memeriksa nilai syarat lambda:SubnetIds
. Contoh berikut menolak akses pengguna ke subnet-1
dan subnet-2
.
{ "Sid": "EnforceOutOfSubnet", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }
Untuk menolak akses pengguna ke grup keamanan tertentu, gunakan StringEquals
untuk memeriksa nilai syarat lambda:SecurityGroupIds
. Contoh berikut menolak akses pengguna ke sg-1
dan sg-2
.
{ "Sid": "EnforceOutOfSecurityGroups", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Deny", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }
Izinkan pengguna untuk membuat dan memperbarui fungsi dengan VPC pengaturan tertentu
Untuk memungkinkan pengguna mengakses spesifikVPCs, gunakan StringEquals
untuk memeriksa nilai lambda:VpcIds
kondisi. Contoh berikut mengizinkan pengguna mengakses vpc-1
dan vpc-2
.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceStayInSpecificVpc", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "lambda:VpcIds": ["vpc-1", "vpc-2"] } } }
Untuk mengizinkan pengguna mengakses subnet tertentu, gunakan StringEquals
untuk memeriksa nilai syarat lambda:SubnetIds
. Contoh berikut mengizinkan pengguna mengakses subnet-1
dan subnet-2
.
{ "Sid": "EnforceStayInSpecificSubnets", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SubnetIds": ["subnet-1", "subnet-2"] } } }
Untuk mengizinkan pengguna mengakses grup keamanan tertentu, gunakan StringEquals
untuk memeriksa nilai syarat lambda:SecurityGroupIds
. Contoh berikut mengizinkan pengguna mengakses sg-1
dan sg-2
.
{ "Sid": "EnforceStayInSpecificSecurityGroup", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Effect": "Allow", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "lambda:SecurityGroupIds": ["sg-1", "sg-2"] } } } ] }
VPCtutorial
Dalam tutorial berikut, Anda menghubungkan fungsi Lambda ke sumber daya di Anda. VPC