Peran eksekusi Lambda - AWS Lambda

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

Peran eksekusi Lambda

Peran eksekusi fungsi Lambda adalah peran AWS Identity and Access Management (IAM) yang memberikan izin fungsi untuk mengakses layanan dan sumber daya AWS. Misalnya, Anda dapat membuat peran eksekusi yang memiliki izin untuk mengirim log ke Amazon CloudWatch dan mengunggah data pelacakanAWS X-Ray. Halaman ini memberikan informasi tentang cara membuat, melihat, dan mengelola peran eksekusi fungsi Lambda.

Anda memberikan peran eksekusi saat membuat fungsi. Ketika Anda memanggil fungsi Anda, Lambda secara otomatis menyediakan fungsi Anda dengan kredensi sementara dengan mengasumsikan peran ini. Anda tidak perlu memanggil sts:AssumeRole kode fungsi Anda.

Agar Lambda dapat mengambil peran eksekusi Anda dengan benar, kebijakan kepercayaan peran harus menentukan prinsip layanan Lambda (lambda.amazonaws.com) sebagai layanan tepercaya.

Untuk melihat peran eksekusi fungsi
  1. Buka Halaman fungsi di konsol Lambda.

  2. Pilih nama sebuah fungsi.

  3. Pilih Konfigurasi, lalu pilih Izin.

  4. Di bawah Ringkasan sumber daya, tinjau layanan dan sumber daya yang dapat diakses fungsi.

  5. Pilih layanan dari daftar pilihan menurun untuk melihat izin terkait layanan tersebut.

Anda dapat menambahkan atau menghapus izin dari peran eksekusi fungsi kapan saja, atau mengonfigurasi fungsi Anda untuk menggunakan peran yang berbeda. Tambahkan izin untuk layanan apa pun yang fungsi Anda panggil dengan AWS SDK, dan untuk layanan yang digunakan Lambda untuk mengaktifkan fitur opsional.

Saat Anda menambahkan izin ke fungsi Anda, perbarui kode atau konfigurasinya juga. Ini memaksa instance menjalankan fungsi Anda, yang memiliki kredensialnya yang sudah ketinggalan zaman, untuk berhenti dan diganti.

Membuat peran eksekusi di konsol IAM

Secara default, Lambda membuat peran eksekusi dengan izin minimal saat Anda membuat fungsi di konsol Lambda. Anda juga dapat membuat peran eksekusi di konsol IAM.

Untuk membuat peran eksekusi di konsol IAM
  1. Buka Halaman peran di konsol IAM.

  2. Pilih Buat peran.

  3. Di bawah Kasus penggunaan, pilih Lambda.

  4. Pilih Berikutnya.

  5. Pilih kebijakan AWS terkelola AWSLambdaBasicExecutionRoledan AWSXRayDaemonWriteAccess.

  6. Pilih Berikutnya.

  7. Masukkan nama Peran lalu pilih Buat peran.

Untuk instruksi terperinci, lihat Membuat peran untuk layanan AWS (konsol) dalam Panduan Pengguna IAM.

Berikan akses hak istimewa paling rendah ke peran eksekusi Lambda Anda

Ketika Anda pertama kali membuat IAM role untuk fungsi Lambda Anda selama tahap pengembangan, Anda mungkin terkadang memberikan izin di luar apa yang diperlukan. Sebelum memublikasikan fungsi Anda di lingkungan produksi, sebagai praktik terbaik, sesuaikan kebijakan agar hanya menyertakan izin yang diperlukan. Untuk informasi selengkapnya, lihat Menerapkan izin hak istimewa paling sedikit di Panduan Pengguna IAM.

Menggunakan IAM Access Analyzer untuk membantu mengidentifikasi izin yang diperlukan untuk kebijakan peran eksekusi IAM. IAM Access Analyzer meninjau log AWS CloudTrail Anda atas rentang tanggal yang Anda tentukan dan menghasilkan templat kebijakan dengan hanya dengan izin yang digunakan fungsi tersebut selama waktu tersebut. Anda dapat menggunakan templat untuk membuat kebijakan terkelola dengan izin terperinci, lalu melampirkannya ke IAM role. Dengan begitu, Anda hanya memberikan izin yang diperlukan peran untuk berinteraksi dengan sumber daya AWS untuk kasus penggunaan spesifik Anda.

Untuk informasi selengkapnya, lihat Menghasilkan kebijakan berdasarkan aktivitas akses di Panduan Pengguna IAM.

Mengelola peran dengan API IAM

Untuk membuat peran eksekusi dengan AWS Command Line Interface (AWS CLI), gunakan perintah create-role. Saat menggunakan perintah ini, Anda dapat menentukan kebijakan kepercayaan sebaris. Kebijakan kepercayaan peran memberikan izin kepada prinsipal yang ditentukan untuk mengambil peran tersebut. Dalam contoh berikut, Anda memberikan izin kepada kepala layanan Lambda untuk mengambil peran Anda. Perhatikan bahwa persyaratan untuk menghindari tanda kutip dalam string JSON dapat bervariasi tergantung pada shell Anda.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

Anda juga dapat menentukan kebijakan kepercayaan untuk peran tersebut menggunakan file JSON terpisah. Dalam contoh berikut, trust-policy.json adalah file dalam direktori saat ini.

contoh trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json

Anda akan melihat output berikut:

{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
catatan

Lambda secara otomatis mengasumsikan peran eksekusi Anda ketika Anda memanggil fungsi Anda. Anda harus menghindari panggilan sts:AssumeRole secara manual dalam kode fungsi Anda. Jika kasus penggunaan Anda mengharuskan peran tersebut mengasumsikan dirinya sendiri, Anda harus memasukkan peran itu sendiri sebagai prinsipal tepercaya dalam kebijakan kepercayaan peran Anda. Untuk informasi selengkapnya tentang cara mengubah kebijakan kepercayaan peran, lihat Memodifikasi kebijakan kepercayaan peran (konsol) di Panduan Pengguna IAM.

Untuk menambahkan izin peran, gunakan perintah attach-policy-to-role. Mulai dengan menambahkan kebijakan yang dikelola AWSLambdaBasicExecutionRole.

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Durasi sesi untuk kredensyal keamanan sementara

Lambda mengasumsikan peran eksekusi yang terkait dengan fungsi Anda untuk mengambil kredenal keamanan sementara yang kemudian tersedia sebagai variabel lingkungan selama pemanggilan fungsi. Jika Anda menggunakan kredensi sementara ini di luar Lambda, seperti untuk membuat URL Amazon S3 yang telah ditetapkan sebelumnya, Anda tidak dapat mengontrol durasi sesi. Pengaturan durasi sesi maksimum IAM tidak berlaku untuk sesi yang diasumsikan oleh AWS layanan seperti Lambda. Gunakan AssumeRole tindakan sts: jika Anda memerlukan kontrol atas durasi sesi.

Kebijakan yang dikelola AWS untuk fitur Lambda

Kebijakan AWS terkelola berikut memberikan izin yang diperlukan untuk menggunakan fitur Lambda.

Perubahan Deskripsi Tanggal

AWSLambdaMSKExecutionRole— Lambda menambahkan izin kafka: DescribeCluster V2 ke kebijakan ini.

AWSLambdaMSKExecutionRolememberikan izin untuk membaca dan mengakses catatan dari kluster Amazon Managed Streaming for Apache Kafka (Amazon MSK), mengelola antarmuka jaringan elastis (ENI), dan menulis ke Log. CloudWatch

Juni 17, 2022

AWSLambdaBasicExecutionRole— Lambda mulai melacak perubahan pada kebijakan ini.

AWSLambdaBasicExecutionRolememberikan izin untuk mengunggah log ke. CloudWatch

14 Februari 2022

AWSLambdaDynamoDBExecutionRole— Lambda mulai melacak perubahan pada kebijakan ini.

AWSLambdaDynamoDBExecutionRolememberikan izin untuk membaca catatan dari aliran Amazon DynamoDB dan menulis ke Log. CloudWatch

14 Februari 2022

AWSLambdaKinesisExecutionRole— Lambda mulai melacak perubahan pada kebijakan ini.

AWSLambdaKinesisExecutionRolememberikan izin untuk membaca peristiwa dari aliran data Amazon Kinesis dan menulis ke Log. CloudWatch

14 Februari 2022

AWSLambdaMSKExecutionRole— Lambda mulai melacak perubahan pada kebijakan ini.

AWSLambdaMSKExecutionRolememberikan izin untuk membaca dan mengakses catatan dari kluster Amazon Managed Streaming for Apache Kafka (Amazon MSK), mengelola antarmuka jaringan elastis (ENI), dan menulis ke Log. CloudWatch

14 Februari 2022

AWSLambdaSQSQueueExecutionRole— Lambda mulai melacak perubahan pada kebijakan ini.

AWSLambdaSQSQueueExecutionRolememberikan izin untuk membaca pesan dari antrian Amazon Simple Queue Service (Amazon SQS) dan menulis ke Log. CloudWatch

14 Februari 2022

AWSLambdaVPCAccessExecutionRole— Lambda mulai melacak perubahan pada kebijakan ini.

AWSLambdaVPCAccessExecutionRolememberikan izin untuk mengelola ENI dalam VPC Amazon dan menulis ke Log. CloudWatch

14 Februari 2022

AWSXRayDaemonWriteAccess— Lambda mulai melacak perubahan pada kebijakan ini.

AWSXRayDaemonWriteAccessmemberikan izin untuk mengunggah data jejak ke X-Ray.

14 Februari 2022

CloudWatchLambdaInsightsExecutionRolePolicy— Lambda mulai melacak perubahan pada kebijakan ini.

CloudWatchLambdaInsightsExecutionRolePolicymemberikan izin untuk menulis metrik runtime ke Lambda Insights. CloudWatch

14 Februari 2022

AmazonS3 - ObjectLambdaExecutionRolePolicy Lambda mulai melacak perubahan pada kebijakan ini.

AmazonS3ObjectLambdaExecutionRolePolicymemberikan izin untuk berinteraksi dengan objek Amazon Simple Storage Service (Amazon S3) Lambda dan menulis ke Log. CloudWatch

14 Februari 2022

Untuk beberapa fitur, konsol Lambda mencoba menambahkan izin yang hilang ke peran eksekusi Anda dalam kebijakan yang dikelola pelanggan. Kebijakan ini dapat menjadi beberapa. Untuk menghindari pembuatan kebijakan tambahan, tambahkan kebijakan yang dikelola AWS yang relevan ke peran eksekusi Anda sebelum mengaktifkan fitur.

Saat Anda menggunakan pemetaan sumber peristiwa untuk mengaktifkan fungsi Anda, Lambda menggunakan peran eksekusi untuk membaca data peristiwa. Misalnya, pemetaan sumber peristiwa untuk Kinesis membaca peristiwa dari aliran data dan mengirimnya ke fungsi Anda dalam beberapa batch.

Saat layanan mengambil peran di akun Anda, Anda dapat menyertakan kunci konteks kondisi aws:SourceArn global aws:SourceAccount dan global dalam kebijakan kepercayaan peran untuk membatasi akses ke peran hanya pada permintaan yang dihasilkan oleh sumber daya yang diharapkan. Untuk informasi lebih lanjut, lihat Pencegahan wakil kebingungan lintas layanan untuk AWS Security Token Service.

Anda dapat menggunakan pemetaan sumber peristiwa dengan layanan berikut ini:

Selain kebijakan yang dikelola AWS, konsol Lambda menyediakan templat untuk membuat kebijakan kustom dengan izin untuk penggunaan tambahan. Saat Anda membuat fungsi di konsol Lambda, Anda dapat memilih untuk membuat peran eksekusi baru dengan izin dari satu templat atau lebih. Templat ini juga diterapkan secara otomatis ketika Anda membuat fungsi dari cetak biru, atau ketika Anda mengonfigurasi opsi yang memerlukan akses ke layanan lain. Contoh templat tersedia dalam repositori GitHub panduan ini.

Bekerja dengan kredensyal lingkungan eksekusi Lambda

Biasanya kode fungsi Lambda Anda membuat permintaan API ke layanan lainAWS. Untuk membuat permintaan ini, Lambda menghasilkan seperangkat kredensial singkat dengan mengasumsikan peran eksekusi fungsi Anda. Kredensyal ini tersedia sebagai variabel lingkungan selama pemanggilan fungsi Anda. Saat bekerja dengan AWS SDK, Anda tidak perlu memberikan kredensi untuk SDK secara langsung dalam kode. Secara default, rantai penyedia kredensi secara berurutan memeriksa setiap tempat di mana Anda dapat menyetel kredensialnya dan memilih yang pertama tersedia—biasanya variabel lingkungan (,, dan). AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

Lambda menyuntikkan ARN fungsi sumber ke dalam konteks kredensial jika permintaan tersebut adalah permintaan AWS API yang berasal dari dalam lingkungan eksekusi Anda. Lambda juga menyuntikkan ARN fungsi sumber untuk AWS permintaan API berikut yang dibuat Lambda atas nama Anda di luar lingkungan eksekusi Anda:

Layanan Tindakan Alasan
CloudWatch Log CreateLogGroup, CreateLogStream, PutLogEvents

Untuk menyimpan log ke dalam grup CloudWatch log Log

X-Ray PutTraceSegments

Untuk mengirim data jejak ke X-Ray

Amazon EFS ClientMount

Untuk menghubungkan fungsi Anda ke sistem file Amazon Elastic File System (Amazon EFS)

Panggilan AWS API lain yang dilakukan Lambda di luar lingkungan eksekusi Anda atas nama Anda menggunakan peran eksekusi yang sama tidak mengandung ARN fungsi sumber. Contoh panggilan API tersebut di luar lingkungan eksekusi meliputi:

Dengan fungsi sumber ARN dalam konteks kredensial, Anda dapat memverifikasi apakah panggilan ke sumber daya Anda berasal dari kode fungsi Lambda tertentu. Untuk memverifikasi ini, gunakan kunci lambda:SourceFunctionArn kondisi dalam kebijakan berbasis identitas IAM atau kebijakan kontrol layanan (SCP).

catatan

Anda tidak dapat menggunakan kunci lambda:SourceFunctionArn kondisi dalam kebijakan berbasis sumber daya.

Dengan kunci kondisi ini dalam kebijakan berbasis identitas atau SCP, Anda dapat menerapkan kontrol keamanan untuk tindakan API yang dibuat kode fungsi Anda ke layanan lain. AWS Ini memiliki beberapa aplikasi keamanan utama, seperti membantu Anda mengidentifikasi sumber kebocoran kredensi.

catatan

Kunci lambda:SourceFunctionArn kondisi berbeda dari tombol lambda:FunctionArn dan aws:SourceArn kondisi. Kunci lambda:FunctionArn kondisi hanya berlaku untuk pemetaan sumber peristiwa dan membantu menentukan fungsi mana yang dapat dipanggil sumber acara Anda. Kunci aws:SourceArn kondisi hanya berlaku untuk kebijakan di mana fungsi Lambda Anda adalah sumber daya target, dan membantu menentukan AWS layanan dan sumber daya lain mana yang dapat menjalankan fungsi tersebut. Kunci lambda:SourceFunctionArn kondisi dapat diterapkan pada kebijakan berbasis identitas atau SCP apa pun untuk menentukan fungsi Lambda tertentu yang memiliki izin untuk melakukan panggilan API tertentu ke sumber daya lain. AWS

Untuk digunakan lambda:SourceFunctionArn dalam polis Anda, sertakan sebagai syarat dengan salah satu operator kondisi ARN. Nilai kunci harus berupa ARN yang valid.

Misalnya, misalkan kode fungsi Lambda Anda membuat s3:PutObject panggilan yang menargetkan bucket Amazon S3 tertentu. Anda mungkin ingin mengizinkan hanya satu fungsi Lambda tertentu untuk s3:PutObject mengakses bucket itu. Dalam hal ini, peran eksekusi fungsi Anda harus memiliki kebijakan yang dilampirkan yang terlihat seperti ini:

contoh kebijakan yang memberikan akses fungsi Lambda tertentu ke sumber daya Amazon S3
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleSourceFunctionArn", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::lambda_bucket/*", "Condition": { "ArnEquals": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

Kebijakan ini hanya mengizinkan s3:PutObject akses jika sumbernya adalah fungsi Lambda dengan ARN. arn:aws:lambda:us-east-1:123456789012:function:source_lambda Kebijakan ini tidak mengizinkan s3:PutObject akses ke identitas panggilan lainnya. Ini benar bahkan jika fungsi atau entitas yang berbeda membuat s3:PutObject panggilan dengan peran eksekusi yang sama.

catatan

Kunci lambda:SourceFunctionARN kondisi tidak mendukung versi fungsi Lambda atau alias fungsi. Jika Anda menggunakan ARN untuk versi atau alias fungsi tertentu, fungsi Anda tidak akan memiliki izin untuk mengambil tindakan yang Anda tentukan. Pastikan untuk menggunakan ARN yang tidak memenuhi syarat untuk fungsi Anda tanpa versi atau akhiran alias.

Anda juga dapat menggunakan lambda:SourceFunctionArn dalam kebijakan kontrol layanan. Misalnya, Anda ingin membatasi akses ke bucket ke kode fungsi Lambda tunggal atau panggilan dari Amazon Virtual Private Cloud (VPC) tertentu. SCP berikut menggambarkan hal ini.

contoh kebijakan yang menolak akses ke Amazon S3 dalam kondisi tertentu
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::lambda_bucket/*", "Effect": "Deny", "Condition": { "StringNotEqualsIfExists": { "aws:SourceVpc": [ "vpc-12345678" ] }, "ArnNotEqualsIfExists": { "lambda:SourceFunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:source_lambda" } } } ] }

Kebijakan ini menolak semua tindakan S3 kecuali berasal dari fungsi Lambda tertentu dengan ARNarn:aws:lambda:*:123456789012:function:source_lambda, atau kecuali berasal dari VPC yang ditentukan. StringNotEqualsIfExistsOperator memberitahu IAM untuk memproses kondisi ini hanya jika aws:SourceVpc kunci ada dalam permintaan. Demikian pula, IAM menganggap ArnNotEqualsIfExists operator hanya jika lambda:SourceFunctionArn ada.