View a markdown version of this page

Membatasi akses ke AWS Lambda Asal Fungsi Web - Amazon CloudFront

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

Membatasi akses ke AWS Lambda Asal Fungsi Web

Anda dapat menggunakan kontrol akses asal (OAC) untuk membatasi akses ke asal Fungsi AWS Lambda Web. Fungsi Web Lambda menyediakan titik akhir HTTPS regional atau globalnya sendiri, yang Anda gunakan sebagai domain asal untuk distribusi Anda. CloudFront Untuk informasi selengkapnya tentang Fungsi Web Lambda, lihat Fungsi AWS Lambda Web di Panduan AWS Lambda Pengembang.

catatan

OAC dengan Fungsi Web Lambda tidak didukung untuk titik akhir global yang mencakup Wilayah keikutsertaan. Jika titik akhir merutekan permintaan ke Wilayah keikutsertaan, CloudFront tidak dapat menandatangani permintaan untuk Wilayah tersebut. Asal kemudian mengembalikan kesalahan HTTP 403 (Forbidden). Semua Wilayah yang terkait dengan titik akhir global harus merupakan Wilayah yang diaktifkan secara default.

Untuk informasi tentang penggunaan OAC dengan asal URL fungsi Lambda, lihat. Membatasi akses ke AWS Lambda fungsi asal URL

Prasyarat

Sebelum Anda membuat dan mengatur OAC, Anda harus memiliki CloudFront distribusi dengan Fungsi Web Lambda sebagai asal. Nama domain asal adalah nama host dari titik akhir Fungsi Web Lambda. CloudFront mengidentifikasi jenis titik akhir dari nama host:

  • Titik akhir regional (HomeRegiondan tipe PerRegion titik akhir) - Nama host berakhir dengan .lambda-web.AWS-Region.on.aws

  • Titik akhir global (tipe MultiRegion titik akhir) - Nama host diakhiri dengan .lambda-web.global.on.aws

Konfigurasi Anda juga harus memenuhi persyaratan berikut:

  • Jenis autentikasi titik akhir - Jenis autentikasi titik akhir harus. IamAuth DenganIamAuth, titik akhir menggunakan AWS Identity and Access Management (IAM) untuk mengautentikasi dan mengotorisasi permintaan. Untuk permintaan dari CloudFront, otorisasi didasarkan pada kebijakan berbasis sumber daya Fungsi Web Lambda. CloudFront menandatangani permintaan atas nama pemirsa, dan titik akhir memvalidasi tanda tangan. Untuk informasi selengkapnya, lihat CloudFront integrasi di Panduan AWS Lambda Pengembang.

  • Kebijakan cache - Jika Fungsi Web Lambda Anda menggunakan Authorization header penampil, Anda harus menambahkan header ke kebijakan cache. Persyaratan ini berlaku untuk setiap perilaku cache yang menggunakan asal. Untuk GET dan HEAD permintaan, CloudFront menghapus Authorization header sebelum meneruskan permintaan kecuali header ada dalam kebijakan cache. Untuk informasi selengkapnya, lihat Header dan CloudFront perilaku permintaan HTTP (asal kustom dan Amazon S3).

  • Kebijakan permintaan asal — Gunakan kebijakan permintaan asal yang mengecualikan Host header pemirsa. Endpoint Lambda Web Function mengharapkan Host header berisi nama domain asal, bukan nama domain distribusi. CloudFront Jika Host header berisi nama domain distribusi, titik akhir mengembalikan kesalahan HTTP 404 (Tidak Ditemukan). Jika Anda menggunakan kebijakan permintaan asal terkelola, gunakanAllViewerExceptHostHeader, bukanAllViewer. Untuk informasi selengkapnya, lihat AllViewerExceptHostHeader.

catatan

Permintaan asal Lambda @Edge dan pemicu respons asal tidak didukung pada perilaku cache yang menggunakan asal Fungsi Web Lambda dengan OAC. Ini berlaku untuk titik akhir regional dan global, dan untuk asal-usul yang diakses secara langsung atau melalui grup asal. CloudFront menolak konfigurasi distribusi yang berisi keduanya.

Berikan CloudFront izin untuk mengakses Fungsi Web Lambda

Lampirkan kebijakan berbasis sumber daya ke Lambda Web Function yang memungkinkan CloudFront service principal () cloudfront.amazonaws.com untuk memanggil endpoint. Tindakan IAM untuk memanggil titik akhir adalah. lambda:InvokeWebFunctionEndpoint Kebijakan ini dilampirkan ke Fungsi Web Lambda, tetapi setiap pernyataan dapat mencakup ARN Resource titik akhir tertentu. Gunakan Condition elemen CloudFront untuk memungkinkan mengakses titik akhir hanya jika permintaan atas nama CloudFront distribusi yang berisi asal.

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/EDFDVBD6EXAMPLE" } } } ] }

Untuk melampirkan kebijakan berbasis sumber daya, gunakan put-resource-policy perintah 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 delete-resource-policy perintah get-resource-policy dan.

catatan

Untuk titik akhir yang menjangkau lebih dari satu Wilayah, Lambda mereplikasi perubahan kebijakan ke semua Wilayah yang melayani titik akhir. Kebijakan baru atau yang diperbarui dapat memakan waktu singkat untuk diterapkan di setiap Wilayah. Untuk informasi selengkapnya, lihat Replikasi dan konsistensi akhirnya di Panduan AWS Lambda Pengembang.

Buat kontrol akses asal

Untuk membuat kontrol akses asal (OAC), Anda dapat menggunakan Konsol Manajemen AWS CloudFormation, AWS CLI, atau CloudFront API.

Console
Untuk membuat kontrol akses asal
  1. Masuk ke Konsol Manajemen AWS dan buka CloudFront konsol dihttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Di panel navigasi, pilih Akses asal.

  3. Pilih Buat pengaturan kontrol.

  4. Pada formulir pengaturan Create control, lakukan hal berikut:

    1. Di panel Detail, masukkan Nama dan (opsional) Deskripsi untuk kontrol akses asal.

    2. Pilih Lambda dari dropdown tipe Origin. Jenis asal ini digunakan untuk URL fungsi Lambda dan Fungsi Web Lambda.

    3. Jika asal Anda adalah titik akhir global (nama host berakhir.lambda-web.global.on.aws), pilih opsi Gunakan protokol penandatanganan Sigv4a. Untuk titik akhir regional (nama host berakhir.lambda-web.AWS-Region.on.aws), biarkan opsi ini dihapus.

    4. Untuk Perilaku penandatanganan, pilih Selalu tandatangani, pertahankan otorisasi penampil. Opsi ini muncul di bawah Permintaan tanda tangan (disarankan), yang dipilih secara default. Asal Lambda Web Function hanya mendukung perilaku penandatanganan ini. Untuk informasi selengkapnya, lihat Perilaku penandatanganan.

  5. Pilih Buat.

Untuk menambahkan kontrol akses asal ke asal Fungsi Web Lambda dalam distribusi
  1. Buka CloudFront konsol dihttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Pilih distribusi dengan asal Fungsi Web Lambda yang ingin Anda tambahkan OAC, lalu pilih tab Origins.

  3. Pilih asal Fungsi Web Lambda yang ingin Anda tambahkan OAC, lalu pilih Edit.

  4. Untuk akses Origin, pilih Pengaturan kontrol akses Origin (disarankan).

  5. Dari menu tarik-turun kontrol akses Origin, pilih OAC yang ingin Anda gunakan.

  6. Pilih Simpan perubahan.

Distribusi mulai menyebar ke semua lokasi CloudFront tepi. Ketika lokasi tepi menerima konfigurasi baru, ia menandatangani semua permintaan yang dikirim ke asal Fungsi Web Lambda.

CLI

Gunakan perintah create-origin-access-control. Untuk titik akhir regional (nama host berakhir.lambda-web.AWS-Region.on.aws), gunakan protokol sigv4 penandatanganan:

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-lambda-web-oac", "Description": "OAC for Lambda Web Function origin", "SigningProtocol": "sigv4", "SigningBehavior": "always-amz-auth", "OriginAccessControlOriginType": "lambda" }'

Untuk titik akhir global (nama host diakhiri.lambda-web.global.on.aws), gunakan protokol sigv4a penandatanganan:

aws cloudfront create-origin-access-control \ --origin-access-control-config '{ "Name": "my-lambda-web-global-oac", "Description": "OAC for global Lambda Web Function origin", "SigningProtocol": "sigv4a", "SigningBehavior": "always-amz-auth", "OriginAccessControlOriginType": "lambda" }'
CloudFormation

Tentukan nilai berikut diOriginAccessControlConfig:

  • SigningProtocol: sigv4 (titik akhir regional) atau sigv4a (titik akhir global)

  • SigningBehavior: always-amz-auth

  • OriginAccessControlOriginType: lambda

contoh CloudFormation templat
Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: my-lambda-web-oac OriginAccessControlOriginType: lambda SigningBehavior: always-amz-auth SigningProtocol: sigv4a

Untuk informasi selengkapnya, lihat AWS::CloudFront:: OriginAccessControl di Panduan AWS CloudFormation Pengguna.

OAC berlaku untuk setiap permintaan hanya setelah distribusi selesai digunakan. Untuk titik akhir yang mencakup lebih dari satu Wilayah, kebijakan berbasis sumber daya yang Anda lampirkan sebelumnya juga harus menyelesaikan replikasi ke setiap Wilayah yang melayani titik akhir. Sampai keduanya selesai, beberapa permintaan dapat menerima respons HTTP 403 sementara dari asal. Kesalahan ini akan teratasi secara otomatis setelah distribusi selesai diterapkan dan kebijakan selesai direplikasi.

Perilaku penandatanganan

Asal Lambda Web Function hanya mendukung perilaku always-amz-auth penandatanganan (Selalu tandatangani, pertahankan otorisasi penampil di konsol). CloudFront selalu menandatangani semua permintaan yang dikirim ke Fungsi Web Lambda, tetapi tidak menggantikan Authorization header dari permintaan penampil. Sebagai gantinya, CloudFront tambahkan tanda tangannya di CloudFront header khusus dan meneruskan Authorization header pemirsa ke asal yang tidak dimodifikasi. Dengan perilaku ini, Fungsi Web Lambda Anda dapat menerima Authorization header asli pemirsa (misalnya, untuk melakukan autentikasi atau otorisasi sendiri). CloudFront masih menandatangani setiap permintaan yang dikirim ke asal. Untuk meneruskan Authorization header pemirsa, Anda harus menambahkannya ke kebijakan cache untuk setiap perilaku cache yang menggunakan asal.

Perilaku penandatanganan lainnya (alwaysnever,, danno-override) tidak didukung untuk asal Fungsi Web Lambda. Perilaku always-amz-auth penandatanganan tidak didukung untuk jenis asal lainnya, termasuk asal URL fungsi Lambda.

UntukPUT,POST, dan PATCH permintaan, CloudFront menandatangani permintaan asal dengan payload () UNSIGNED-PAYLOAD yang tidak ditandatangani. Badan permintaan tidak tercakup oleh CloudFront tanda tangan. Tanda tangan masih mencakup metode permintaan, jalur, string kueri, dan header yang mengidentifikasi distribusi Anda. Oleh karena itu, titik akhir dapat memverifikasi bahwa setiap permintaan berasal dari CloudFront atas nama distribusi Anda sebelum memanggil Fungsi Web Lambda Anda. Badan permintaan dilindungi saat transit oleh koneksi HTTPS antara CloudFront dan titik akhir. Anda tidak perlu menyertakan x-amz-content-sha256 header dalam permintaan ke CloudFront. Jika penampil mengirimkannya, CloudFront tidak menggunakannya saat menandatangani permintaan asal.