View a markdown version of this page

Kontrol akses titik akhir Fungsi Web Lambda - AWS Lambda

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

Kontrol akses titik akhir Fungsi Web Lambda

Anda dapat mengontrol akses ke titik akhir Fungsi AWS Lambda Web Anda menggunakan yang AuthType Anda tetapkan pada setiap titik akhir. Bergantung pada jenis autentikasi, Anda juga dapat melampirkan kebijakan berbasis sumber daya ke Fungsi Web untuk mengontrol siapa yang dapat memanggil titik akhir.

Saat Anda mengonfigurasi titik akhir, Anda menentukan salah satu AuthType opsi berikut:

IamAuth

Dengan jenis otentikasi ini, Lambda AWS Identity and Access Management menggunakan (IAM) untuk mengautentikasi dan mengotorisasi permintaan berdasarkan kebijakan identitas pemanggil dan kebijakan berbasis sumber daya Fungsi Web. Baik pemanggil menandatangani permintaan secara langsung dengan AWS Signature Version 4 (SigV4), atau dengan Sigv4a Sigv4a (Sigv4a) untuk MultiRegion titik akhir, atau tanda tangan CloudFront Amazon atas nama mereka saat berada di depan titik akhir (lihat). Layanan AWS CloudFront integrasi Pilih opsi ini ketika Anda ingin Lambda menerapkan kontrol IAM-based akses pada titik akhir Anda.

ApplicationManaged

Lambda tidak mengautentikasi atau mengotorisasi permintaan. Setiap permintaan mencapai fungsi Anda, dan kode fungsi Anda bertanggung jawab atas otentikasi apa pun. Pilih opsi ini untuk titik akhir publik, atau saat Anda menangani otentikasi dalam kode Anda sendiri.

Tindakan IAM untuk memanggil titik akhir adalah. lambda:InvokeWebFunctionEndpoint

Anda menetapkan jenis otentikasi endpoint dengan --auth-type parameter saat Anda membuat endpoint (create-web-function-endpoint), dan Anda dapat mengubahnya nanti dengan. update-web-function-endpoint Untuk perintah create, lihatMembuat titik akhir. Untuk properti yang dapat Anda ubah, lihatMemperbarui titik akhir.

Menggunakan jenis IamAuthotentikasi

Jika Anda memilih jenis IamAuth otentikasi, penelepon harus menandatangani setiap permintaan dengan SigV4 (Sigv4a untuk titik akhir) dan harus diizinkan untuk memanggil MultiRegion titik akhir. Bergantung pada siapa yang membuat permintaan, Anda memberikan izin ini dengan kebijakan berbasis sumber daya pada Fungsi Web, kebijakan berbasis identitas pada pemanggil, atau keduanya.

Jika pemanggil Akun AWS sama dengan Fungsi Web, mereka dapat diberikan lambda:InvokeWebFunctionEndpoint melalui kebijakan berbasis identitas atau kebijakan berbasis sumber daya fungsi. Jika penelepon berada di akun yang berbeda, mereka memerlukan kebijakan berbasis identitas yang memberikan tindakan dan kebijakan berbasis sumber daya pada fungsi yang memungkinkan mereka.

Resource-based kebijakan dilampirkan ke Fungsi Web, tetapi setiap pernyataan dapat mencakup Resource ke titik akhir ARN tertentu. Kebijakan berbasis sumber daya berikut memungkinkan InvokeRole peran dalam akun 222233334444 untuk memanggil titik akhir: prod my-function

contoh Cross-account kebijakan berbasis sumber daya
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222233334444:role/InvokeRole" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }

Untuk melampirkan kebijakan berbasis sumber daya, gunakan put-resource-policy dengan fungsi ARN (bukan ARN titik akhir):

aws lambda-web put-resource-policy \ --resource-arn "arn:aws:lambda:us-east-1:111122223333:web-function/my-function" \ --policy file://policy.json \ --region us-east-1

Anda dapat meninjau atau menghapus kebijakan dengan get-resource-policy dandelete-resource-policy.

Fungsi Web memiliki satu kebijakan berbasis sumber daya, dan menggantikannya. put-resource-policy Untuk menambahkan pernyataan, seperti CloudFront pernyataan diCloudFront integrasi, dapatkan kebijakan saat iniget-resource-policy, tambahkan pernyataan ke Statement array, dan teruskan revisionId dengan yang dikembalikan--revision-id. Jika seseorang mengubah kebijakan setelah Anda membacanya, permintaan gagal dengan a ConflictException alih-alih menimpa perubahan mereka.

Untuk mengizinkan pemanggilan semua titik akhir fungsi, gunakan wildcard di ARN sumber daya:

"Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/*"

Ganti Region, ID akun, dan nama fungsi dengan nilai Anda sendiri. Tetap endpoint/* di akhir.

Memberikan izin pemanggilan kepada kepala sekolah

Penelepon lambda:InvokeWebFunctionEndpoint perlu memanggil titik akhir. Untuk pemanggil di akun yang sama dengan Fungsi Web, pemberian tindakan ini dalam kebijakan berbasis identitas pemanggil sudah cukup. Tidak diperlukan kebijakan berbasis sumber daya. Untuk pemanggil di akun lain, kebijakan berbasis identitas ini diperlukan selain kebijakan berbasis sumber daya pada fungsi yang memungkinkan mereka.

Lampirkan kebijakan berikut ke peran IAM atau pengguna yang akan memanggil titik akhir:

contoh Identity-based kebijakan untuk memanggil titik akhir
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }

Menandatangani permintaan

Lambda tidak menyediakan SDK khusus untuk memanggil titik akhir. Anda mengirim permintaan HTTP standar dan menandatanganinya sendiri dengan SigV4 atau Sigv4a, menggunakan nama layanan. lambda Perhatikan hal-hal berikut:

  • Setiap permintaan yang ditandatangani harus menyertakan X-Amz-Content-SHA256 header, termasuk permintaan tanpa isi. Lambda tidak membaca isi permintaan saat memvalidasi tanda tangan, jadi Lambda menggunakan nilai header ini sebagai hash payload. Permintaan tanpa itu ditolak dengan403 Forbidden.

  • Jika Anda tidak menandatangani isi (misalnya, saat streaming), gunakan nilai literal UNSIGNED-PAYLOAD untukX-Amz-Content-SHA256. Lambda tidak mendukung penandatanganan chunked body.

  • Lambda tidak memeriksa isi permintaan terhadap nilainya. X-Amz-Content-SHA256 Tanda tangan mencakup nilai header, bukan isi isi. Jika Anda membutuhkan perlindungan integritas tubuh di luar TLS, terapkan dalam aplikasi Anda.

  • Titik akhir regional (HomeRegion,PerRegion) menggunakan SigV4 dengan Region titik akhir. MultiRegiontitik akhir menggunakan AWS Signature Version 4a (Sigv4a), yang menandatangani satu set Wilayah, bukan satu Wilayah. Gunakan set Wilayah*.

  • Jika IamAuth permintaan muncul403 Forbidden, periksa apakah permintaan ditandatangani dengan SigV4 (atau Sigv4a), menyertakan X-Amz-Content-SHA256 header, dan menggunakan kredenal yang belum kedaluwarsa, dan kebijakan Anda mengizinkan ARN titik akhir. lambda:InvokeWebFunctionEndpoint

Untuk informasi selengkapnya tentang permintaan penandatanganan, lihat Menandatangani permintaan AWS API.

Setelah Lambda memvalidasi tanda tangan Sigv4 atau Sigv4a, Lambda akan menghapus Authorization header sebelum meneruskan permintaan ke fungsi Anda. Jika Anda ingin fungsi Anda menerima Authorization header pada IamAuth titik akhir, kirim permintaan melalui CloudFront, yang menandatanganinya atas nama Anda (lihatCloudFront integrasi).

CloudFront integrasi

Anda dapat menggunakan Amazon CloudFront Origin Access Control (OAC) untuk menempatkan CloudFront distribusi di depan titik IamAuth akhir. Dengan OAC, CloudFront tandatangani setiap permintaan asal atas nama pemirsa, sehingga penelepon tidak menandatangani permintaan sendiri. CloudFront tidak menggunakan Authorization header untuk menandatangani permintaan asal, sehingga dapat meneruskan Authorization header Anda ke fungsi.

Lambda menghapus Authorization nilai apa pun yang merupakan AWS tanda tangan (nilai yang dimulai denganAWS4-). Ini memungkinkan Anda menyimpan otentikasi aplikasi Anda (misalnya, JWT atau cookie) sambil CloudFront menandatangani setiap permintaan asal. Untuk melakukan ini, konfigurasikan distribusi untuk meneruskan Authorization header. Untuk informasi selengkapnya, lihat Membatasi akses ke AWS asal.

Domain endpoint tetap dapat dijangkau di internet, dan Lambda juga menerima permintaan langsung yang ditandatangani dari prinsipal mana pun yang diizinkan oleh kebijakan Anda.

Ini membutuhkan jenis otentikasi titik akhir. IamAuth Buat kontrol akses asal dengan tipe asal lambda dan perilaku penandatangananalways-amz-auth. CloudFront menolak perilaku penandatanganan lain untuk asal Fungsi Web.

catatan

Lambda tidak mengautentikasi permintaan ke ApplicationManaged titik akhir atau mengevaluasi kebijakan berbasis sumber daya Fungsi Web untuk permintaan tersebut. Titik akhir seperti itu tetap dapat dijangkau publik di domainnya sendiri, bahkan di belakang. CloudFront

Untuk memungkinkan CloudFront untuk memanggil titik akhir, lampirkan kebijakan berbasis sumber daya ke Fungsi Web yang memberikan prinsip layanan () tindakan. CloudFront cloudfront.amazonaws.com lambda:InvokeWebFunctionEndpoint Gunakan aws:SourceArn kondisi untuk hanya mengizinkan distribusi spesifik Anda:

contoh Resource-based Kebijakan untuk CloudFront OAC
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontOACAccess", "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": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/<distribution-id>" } } } ] }

Menggunakan jenis ApplicationManagedotentikasi

Ketika jenis otentikasi endpoint adalahApplicationManaged, siapa pun dengan domain endpoint dapat memanggil fungsi Anda. Lambda tidak melakukan otentikasi atau otorisasi.

Pilih ApplicationManaged kapan titik akhir Anda dapat dijangkau oleh publik, misalnya, untuk melayani permintaan langsung dari browser web. Anda juga dapat memilihnya saat menangani otentikasi dalam kode Anda sendiri, seperti OAuth 2.0, OpenID Connect, atau skema token khusus.

Dengan jenis otentikasi ini:

  • Lambda memungkinkan semua penelepon untuk memanggil titik akhir. Itu tidak mengevaluasi kebijakan berbasis sumber daya untuk permintaan ini.

  • Lambda meneruskan Authorization header pemanggil ke fungsi Anda, sehingga kode Anda dapat memvalidasinya. Jika header berisi tanda tangan AWS Signature Version 4 (SigV4), Lambda menghapusnya, bersama dengan X-Amz-Security-Token header apa pun, sehingga AWS kredensi tidak diteruskan ke kode fungsi Anda.

  • Fungsi Anda bertanggung jawab atas semua otentikasi dan otorisasi.

catatan

Untuk ApplicationManaged titik akhir, Lambda tidak mengevaluasi kebijakan berbasis sumber daya Fungsi Web untuk permintaan pemanggilan. Anda tidak dapat menggunakan kebijakan berbasis sumber daya untuk membatasi siapa yang memanggil titik akhir. ApplicationManaged Untuk membatasi pemanggilan, gunakan sebagai gantinya. IamAuth Kebijakan berbasis sumber daya masih berlaku untuk tindakan manajemen. Misalnya, dapat memberikan izin akun lain untuk memperbarui titik akhir. Untuk informasi selengkapnya, lihat Resource-based kebijakan.

Tata kelola dan kontrol akses

Anda dapat mengontrol siapa yang dapat mengonfigurasi titik akhir.

Lambda mendukung tindakan IAM berikut untuk mengelola titik akhir:

  • lambda:CreateWebFunction— Buat Fungsi Web dan konfigurasikan titik akhir awalnya, termasuk miliknyaAuthType.

  • lambda:CreateWebFunctionEndpoint— Buat titik akhir dan atur. AuthType

  • lambda:UpdateWebFunctionEndpoint— Perbarui titik akhir, termasuk. AuthType

  • lambda:GetWebFunctionEndpoint— Lihat konfigurasi titik akhir.

  • lambda:ListWebFunctionEndpoints— Daftar titik akhir dari Fungsi Web.

  • lambda:DeleteWebFunctionEndpoint— Hapus titik akhir.

Untuk mengizinkan atau menolak tindakan berdasarkan jenis otentikasi, gunakan kunci kondisi. lambda:Request/WebFunctionAuthTypeberlaku untukCreateWebFunction,CreateWebFunctionEndpoint, danUpdateWebFunctionEndpoint. lambda:Resource/WebFunctionAuthTypeberlaku untuk InvokeWebFunctionEndpoint (pada IamAuth titik akhir),, UpdateWebFunctionEndpointGetWebFunctionEndpoint, danDeleteWebFunctionEndpoint. Lihat perinciannya di Kunci syarat.

Membatasi titik akhir publik dalam suatu organisasi

Jika Anda mengelola AWS Organisasi dan ingin mencegah pengembang membuat titik akhir publik, gunakan kebijakan kontrol layanan (SCP) yang menolak membuat atau memperbarui titik akhir dengan jenis otentikasi. ApplicationManaged Gunakan tombol lambda:Request/WebFunctionAuthType kondisi, yang mencerminkan jenis otentikasi dalam permintaan:

contoh SCP menyangkal titik akhir publik
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:CreateWebFunction", "lambda:CreateWebFunctionEndpoint", "lambda:UpdateWebFunctionEndpoint" ], "Resource": "*", "Condition": { "StringEquals": { "lambda:Request/WebFunctionAuthType": "ApplicationManaged" } } } ] }

Kebijakan termasuk lambda:CreateWebFunction karena operasi tersebut membuat titik akhir awal dari permintaan. endpointConfig Dengan kebijakan ini, aws lambda-web deploy gagal dengan kesalahan akses ditolak kecuali pengembang menambahkan--auth-type IamAuth. Secara default, perintah membuat ApplicationManaged titik akhir.

Kunci syarat

Untuk kontrol akses berbutir halus, Lambda mendukung kunci konteks kondisi berikut:

  • lambda:Request/WebFunctionAuthType— Jenis otentikasi yang ditentukan dalam permintaan. Tersedia selamaCreateWebFunction,CreateWebFunctionEndpoint, danUpdateWebFunctionEndpoint. Gunakan untuk mengontrol jenis otentikasi mana yang dapat dikonfigurasi.

  • lambda:Resource/WebFunctionAuthType— Jenis otentikasi yang saat ini dikonfigurasi pada titik akhir, dengan nilai IamAuth dan. ApplicationManaged Tersedia selamaInvokeWebFunctionEndpoint,UpdateWebFunctionEndpoint,DeleteWebFunctionEndpoint, danGetWebFunctionEndpoint. UntukInvokeWebFunctionEndpoint, Lambda mengevaluasi kunci hanya pada titik akhir, karena permintaan ke IamAuth titik akhir tidak diotorisasi dengan ApplicationManaged IAM.

  • aws:ResourceTag/${TagKey}— Memfilter akses dengan tag pada Fungsi Web. Titik akhir dan revisi mewarisi tag fungsi induk, sehingga Anda dapat menggunakan ABAC untuk mengontrol akses pemanggilan.

contoh Izinkan pemanggilan hanya pada titik akhir dari fungsi yang ditandai
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/*/endpoint/prod", "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "Production" } } } ] }