Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Izin Fungsi Web Lambda
Lambda Web Functions use AWS Identity and Access Management (IAM) untuk mengontrol apa yang dapat dilakukan kode aplikasi Anda (peran eksekusi) dan siapa yang dapat mengakses Fungsi Web Anda (kebijakan berbasis sumber daya). Halaman ini menjelaskan cara mengkonfigurasi setiap jenis.
-
Peran eksekusi - Peran IAM yang diasumsikan kode Fungsi Web Anda untuk mengakses AWS layanan seperti Amazon CloudWatch Logs, DynamoDB, atau Amazon S3.
-
Resource-based kebijakan — Kebijakan yang dilampirkan pada Fungsi Web Anda. Ini mendefinisikan prinsip atau AWS layanan IAM mana yang dapat melakukan tindakan Fungsi Web, seperti memanggil titik akhir yang jenis otentikasi, yang berarti Lambda mengautentikasi permintaan dengan IAM.
IamAuthUntuk informasi selengkapnya, lihat Jenis autentikasi. Prinsipal IAM di akun lain juga membutuhkan izin berbasis identitas.
Diagram berikut menunjukkan identitas yang memerlukan izin dan apa yang digunakan masing-masing. Deployer memanggil tindakan dan iam:PassRole kebutuhan manajemen Lambda pada peran eksekusi. Pengunggah kode perlu s3:PutObject pada bucket Amazon S3 berversi, dan Lambda membaca versi objek kode. Lambda dapat mengenkripsi kode Fungsi Web dan variabel lingkungan Anda dengan kunci terkelola pelanggan opsional. AWS KMS Kode Anda berjalan dengan peran eksekusi, yang memberikan akses ke Amazon CloudWatch Logs dan dependensi Anda. Pemanggil endpoint membutuhkan endpoint, atau kredensi aplikasi lambda:InvokeWebFunctionEndpoint untuk IamAuth titik akhir. ApplicationManaged
Peran eksekusi
Peran eksekusi adalah peran IAM yang diasumsikan Lambda saat menjalankan kode Fungsi Web Anda. Aplikasi Anda menggunakan izin peran ini untuk berinteraksi dengan AWS layanan lain. Minimal, Fungsi Web Anda memerlukan izin untuk menulis log ke Amazon CloudWatch Logs sehingga Anda dapat memantau aplikasi Anda. Jika aplikasi Anda membaca dari DynamoDB, menulis ke Amazon S3, atau memanggil layanan AWS lain, Anda menambahkan izin tersebut ke peran eksekusi.
Membuat peran eksekusi
Untuk membuat peran eksekusi untuk Fungsi Web Anda, buat peran IAM dengan kebijakan kepercayaan yang memungkinkan kepala layanan Lambda untuk menerimanya, dan lampirkan kebijakan izin yang memberikan akses yang dibutuhkan aplikasi Anda.
Untuk membuat peran eksekusi (AWS CLI)
-
Buat file bernama
trust-policy.jsondengan kebijakan kepercayaan berikut. Kebijakan ini memungkinkan kepala layanan Lambda untuk mengambil peran atas nama Anda.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
Buat peran.
aws iam create-role \ --role-namemy-web-function-role\ --assume-role-policy-document file://trust-policy.json -
Lampirkan kebijakan terkelola peran eksekusi AWS Lambda dasar. Kebijakan ini memberikan izin untuk membuat grup log, aliran log, dan menulis peristiwa log ke Amazon Logs. CloudWatch
aws iam attach-role-policy \ --role-namemy-web-function-role\ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Jika Anda lebih suka membuat kebijakan izin kustom daripada menggunakan kebijakan terkelola, izin minimum yang dibutuhkan Fungsi Web untuk pencatatan adalah:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/web/my-web-app:*", "arn:aws:logs:*:111122223333:log-group:/aws/lambda/web/my-web-app.local:*" ] } ] }
Kebijakan ini mencakup dua grup log. Lambda menulis log In-region ke grup .local log dan kemudian memusatkannya ke dalam grup log tanpa akhiran di Wilayah beranda. Grup log terpusat ARN menggunakan Wilayah asal. .localARN menggunakan wildcard Wilayah karena Lambda menulis ke grup itu di setiap Wilayah di mana titik akhir melayani lalu lintas. Ini memungkinkan satu peran eksekusi mendukung titik akhir dengan set Wilayah yang berbeda. Jika peran tidak dapat menulis ke grup .local log di Wilayah, Lambda tidak mengirimkan log dari Wilayah tersebut. Jika Anda menggunakan grup log kustom, ganti kedua ARN dengan nama grup log Anda dan nama grup log Anda diikuti oleh.local. Untuk informasi selengkapnya, lihat Grup log.
Menambahkan izin untuk layanan lain
Jika aplikasi Anda mengakses AWS layanan lain, tambahkan izin yang sesuai ke peran eksekusi. Contoh berikut menambahkan akses baca ke tabel DynamoDB dan akses tulis ke bucket Amazon S3.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/web/my-web-app:*", "arn:aws:logs:*:111122223333:log-group:/aws/lambda/web/my-web-app.local:*" ] }, { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:Query" ], "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::my-output-bucket/*" } ] }
Identitas IAM yang membuat Fungsi Web atau revisi menggunakan izinnya sendiri, bukan peran eksekusi. Identitas itu membutuhkan lambda:CreateWebFunction ataulambda:CreateWebFunctionRevision, iam:PassRole pada peran eksekusi, dan baca akses ke paket penerapan di Amazon S3. Untuk izin Amazon S3, lihat. Izin penelepon Jika Anda menggunakan kunci yang dikelola pelanggan untuk mengenkripsi kode Fungsi Web dan variabel lingkungan, identitas itu juga memerlukan AWS KMS izin. Untuk informasi selengkapnya, lihat Enkripsi saat istirahat untuk Fungsi Web.
Resource-based kebijakan
Kebijakan berbasis sumber daya adalah dokumen kebijakan JSON yang Anda lampirkan ke Fungsi Web Anda. Ini dapat memberikan tindakan Fungsi Web apa pun kecuali lambda:CreateWebFunction untuk kepala sekolah atau layanan IAM. AWS Misalnya, dapat memberikan lambda:InvokeWebFunctionEndpoint IamAuth titik akhir. Hal ini juga dapat memberikan tindakan manajemen sepertilambda:GetWebFunction,lambda:CreateWebFunctionRevision, danlambda:UpdateWebFunctionEndpoint.
Lampiran kebijakan dan pernyataannya menggunakan ARN sumber daya yang berbeda:
-
Fungsi Web ARN — Gunakan ARN ini dengan
PutResourcePolicy,GetResourcePolicy, danDeleteResourcePolicy, dan dalamResourceelemen pernyataan yang memberikan tindakan pada Fungsi Web itu sendiri, seperti,, atau.lambda:GetWebFunctionlambda:CreateWebFunctionRevisionlambda:CreateWebFunctionEndpointMisalnya,arn:aws:lambda:us-east-1:111122223333:web-function/my-function. Untuk tindakan pada titik akhir yang ada, sepertilambda:UpdateWebFunctionEndpoint, gunakan ARN endpoint. Untuk tindakan pada revisi yang ada, sepertilambda:DeleteWebFunctionRevision, gunakan ARN revisi. Untuk mencakup semua titik akhir Fungsi Web, gunakanarn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/*. -
Endpoint ARN — Gunakan ARN ini dalam elemen pernyataan
Resourcekebijakan yang memberikan.lambda:InvokeWebFunctionEndpointMisalnya,arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod.
Untuk prinsipal IAM di akun yang sama, kebijakan berbasis identitas kepala sekolah atau kebijakan berbasis sumber daya Fungsi Web dapat memberikan izin. Untuk prinsipal IAM di akun lain, kedua kebijakan harus memberikan izin. Ini berlaku untuk tindakan pemanggilan dan manajemen.
Untuk mengizinkan atau menolak tindakan berdasarkan tag Fungsi Web, gunakan kontrol akses berbasis atribut (ABAC). Untuk kunci kondisi yang didukung, lihatMenandai Fungsi Web.
catatan
Fungsi Web tidak mendukungAddPermission,RemovePermission, atauGetPolicy. Mengelola kebijakan dengan PutResourcePolicyGetResourcePolicy,, dan DeleteResourcePolicy
Gunakan kebijakan berbasis sumber daya saat:
-
Anda ingin memberikan akses pemanggilan ke prinsipal di Akun AWS (pemanggilan lintas akun) yang berbeda.
-
Anda ingin memberikan akses panggilan ke AWS layanan seperti CloudFront.
-
Anda ingin membiarkan prinsipal di lain Akun AWS mengelola Fungsi Web, misalnya untuk membuat revisi atau memperbarui titik akhir.
-
Untuk pemanggilan akun yang sama, Anda tidak dapat mengubah kebijakan IAM pemanggil (misalnya, saat pemanggil dikelola oleh tim lain).
Kebijakan publik tidak diperbolehkan
Anda tidak dapat melampirkan kebijakan berbasis sumber daya publik ke Fungsi Web. Jika kebijakan bersifat publik, permintaan gagal dengan aValidationException.
Di bagian ini, publik menjelaskan kebijakan yang memberikan akses ke seperangkat prinsip yang tidak ditentukan. Ini tidak menggambarkan aksesibilitas jaringan titik akhir atau jenis otentikasi.
Apa yang membuat kebijakan publik
Kebijakan bersifat publik kecuali membatasi siapa yang dapat memanggil sumber daya ke seperangkat prinsip yang ditentukan dengan baik. Lambda berasumsi bahwa kebijakan tersebut bersifat publik dan kemudian mengevaluasi apakah itu memenuhi syarat sebagai non-publik. Kebijakan bersifat publik jika memungkinkan prinsipal yang dapat diasumsikan oleh setiap AWS pelanggan. Kasus yang paling umum adalah prinsipal wildcard yang tidak dibatasi, seperti pada contoh berikut. Lambda menolak kebijakan ini dengan a. ValidationException Jangan gunakan itu.
{ "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-west-2:123456789012:web-function/my-web-function/endpoint/prod" }
Pembatasan berikut tidak membuat kebijakan non-publik:
-
Kondisi alamat IP. Mempersempit
aws:SourceIpke kisaran CIDR tidak cukup. -
Kepala sekolah federasi.
PrincipalBlok yang memberi nama penyedia identitas federasi tidak membatasi akses ke kumpulan identitas yang ditentukan dengan baik. -
Kunci kondisi yang menggambarkan sumber daya. Kunci seperti jenis otentikasi titik akhir menjelaskan bagaimana sumber daya dikonfigurasi, bukan siapa yang memanggil, sehingga mereka tidak dapat membatasi prinsipal.
Ada dua cara untuk membuat kebijakan non-publik.
Tentukan prinsipal di blok Principal
Buat daftar satu atau lebih prinsip yang ditentukan sepenuhnya di blok. Principal Nilai tidak boleh berisi wildcard atau variabel kebijakan. Jumlah kepala sekolah tidak masalah.
{ "Effect": "Allow", "Principal": { "AWS": [ "123456789012", "111122223333" ] }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-west-2:123456789012:web-function/my-web-function/endpoint/prod" }
Prinsipal IAM di akun lain juga memerlukan izin berbasis identitas untuk memanggil titik akhir.
Gunakan kunci kondisi tepercaya
Membatasi salah satu dari kunci kondisi berikut untuk nilai tetap. Kunci ini mengidentifikasi pemanggil yang diautentikasi dan tidak dapat diatur oleh pemohon.
aws:PrincipalAccountaws:PrincipalArnaws:PrincipalOrgIDaws:PrincipalOrgPathsaws:SourceAccountaws:SourceArnaws:SourceOrgIDaws:SourceOrgPathsaws:SourceVpcaws:SourceVpcArnaws:SourceVpceaws:VpceAccountaws:VpceOrgIDaws:VpceOrgPathsaws:Ec2InstanceSourceVpcaws:UserIdaws:PrincipalServiceNameaws:PrincipalServiceNamesListaws:PrincipalIsAWSServicelambda:SourceFunctionArn
Memberi nama kunci tepercaya tidak cukup dengan sendirinya. Anda juga harus membatasi nilainya:
-
Nilai string tidak boleh berisi wildcard atau variabel kebijakan.
-
Nilai ARN tidak boleh berisi wildcard atau variabel kebijakan di lima bidang pertama ARN:
arn, partisi, layanan, Wilayah, dan ID akun. Wildcard di bagian sumber daya diperbolehkan. -
aws:PrincipalIsAWSServiceharus diatur ketrue.
Kebijakan berikut memberi prinsip di organisasi Anda izin berbasis sumber daya yang diperlukan untuk memanggil titik akhir dan tidak dianggap publik. Prinsipal IAM di akun lain juga membutuhkan izin berbasis identitas.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOrgAccess", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-west-2:123456789012:web-function/my-web-function/endpoint/prod", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5" } } } ] }
Cross-account akses
Kebijakan berbasis sumber daya berikut memberikan peran IAM tertentu dalam izin akun lain untuk memanggil satu titik akhir Fungsi Web Anda. Peran tersebut juga membutuhkan izin berbasis identitas untuk memanggil titik akhir.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/caller-role" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }
Agar pemanggilan lintas akun berhasil, semua hal berikut harus benar:
-
Kebijakan berbasis identitas penelepon memberikan izin
lambda:InvokeWebFunctionEndpointpada ARN titik akhir. -
Kebijakan berbasis sumber daya pada Fungsi Web memberikan izin pemanggil (seperti yang ditunjukkan di atas).
-
Endpoint menggunakan
IamAuthotentikasi sehingga Lambda mengevaluasi kredensi pemanggil.
Memberikan akses ke AWS layanan
Kebijakan berbasis sumber daya berikut memberikan izin utama CloudFront layanan untuk menjalankan Fungsi Web Anda. Gunakan kebijakan ini saat Anda mengonfigurasi CloudFront distribusi dengan titik akhir Fungsi Web sebagai asal.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontInvoke", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } ] }
aws:SourceArnKondisi ini membatasi akses ke CloudFront distribusi tertentu. Tanpa kondisi ini, CloudFront distribusi apa pun di akun apa pun dapat memanggil Fungsi Web Anda.
Replikasi dan konsistensi akhirnya
Saat Anda melampirkan atau memperbarui kebijakan berbasis sumber daya pada Fungsi Web yang memiliki atau MultiRegiontitik akhir PerRegion, Lambda mereplikasi kebijakan tersebut ke semua replika tempat titik akhir beroperasi. Wilayah AWS Replikasi ini pada akhirnya konsisten.
Selama jendela replikasi, Lambda mungkin mengevaluasi permintaan di Wilayah replika terhadap versi kebijakan sebelumnya. Ini berarti:
-
Izin yang baru ditambahkan mungkin tidak berlaku di semua Wilayah dengan segera.
-
Lambda mungkin masih menghormati izin yang baru saja dihapus di beberapa Wilayah sampai replikasi selesai.
Tidak ada sinyal penyelesaian yang terlihat pelanggan untuk replikasi kebijakan. Uji perilaku izinkan atau tolak yang diharapkan di setiap Wilayah titik akhir sebelum mengandalkan kebijakan baru. Untuk penahanan darurat, perbarui perutean lalu lintas, atau setel titik akhir throttleConfig.rateLimit 0 untuk memblokir semua lalu lintas saat perubahan kebijakan menyebar. Untuk informasi selengkapnya, lihat Throttling.
Untuk HomeRegiontitik akhir, kebijakan hanya berlaku di Wilayah asal dan tidak memerlukan replikasi Lintas wilayah. Perubahan masih bisa memakan waktu singkat untuk diterapkan.
Izin untuk mengkonfigurasi jaringan
Identitas yang mengonfigurasi jaringan memerlukan izin untuk membuat atau memperbarui sumber daya Lambda yang relevan. Ini juga membutuhkan izin untuk melewati peran dan konektor yang diperlukan. Bergantung pada operasinya, izin meliputi:
lambda:CreateNetworkConnectorlambda:UpdateNetworkConnectorlambda:GetNetworkConnectorlambda:CreateWebFunctionlambda:CreateWebFunctionRevisionlambda:UpdateWebFunctionEndpointlambda:PassNetworkConnectoriam:PassRole
Penelepon harus memiliki lambda:PassNetworkConnector konektor yang direferensikan setiap kali create-web-function-revision panggilan create-web-function atau ditetapkan. egressNetworkConnectorArn Cakupan izin ini ke sumber daya konektor yang disetujui. Cakupan iam:PassRole ke peran eksekusi yang disetujui, yang Anda lewati saat membuat Fungsi Web atau revisi, dan peran operator yang disetujui, yang Anda lewati saat membuat atau memperbarui konektor jaringan. Untuk kebijakan izin peran operator, lihatIzin peran operator.