Batasi akses ke asal URL AWS Lambda fungsi - Amazon CloudFront

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

Batasi akses ke asal URL AWS Lambda fungsi

CloudFront menyediakan kontrol akses asal (OAC) untuk membatasi akses ke asal URL fungsi Lambda.

Buat OAC baru

Selesaikan langkah-langkah yang dijelaskan dalam topik berikut untuk menyiapkan OAC baru. CloudFront

catatan

Jika Anda menggunakan PUT atau POST metode dengan URL fungsi Lambda Anda, pengguna Anda harus menyertakan nilai hash payload di x-amz-content-sha256 header saat mengirim permintaan ke. CloudFront Lambda tidak mendukung muatan yang tidak ditandatangani.

Prasyarat

Sebelum Anda membuat dan mengatur OAC, Anda harus memiliki CloudFront distribusi dengan URL fungsi Lambda sebagai asal. Untuk informasi selengkapnya, lihat Gunakan URL fungsi Lambda.

Berikan izin OAC untuk mengakses URL fungsi Lambda

Sebelum Anda membuat OAC atau mengaturnya dalam CloudFront distribusi, pastikan OAC memiliki izin untuk mengakses URL fungsi Lambda. Lakukan ini setelah Anda membuat CloudFront distribusi, tetapi sebelum Anda menambahkan OAC ke URL fungsi Lambda dalam konfigurasi distribusi.

catatan

Untuk memperbarui kebijakan IAM untuk URL fungsi Lambda, Anda harus menggunakan () AWS Command Line Interface .AWS CLI Mengedit kebijakan IAM di konsol Lambda tidak didukung saat ini.

AWS CLI Perintah berikut memberikan akses CloudFront service principal (cloudfront.amazonaws.com) ke URL fungsi Lambda Anda. ConditionElemen dalam kebijakan memungkinkan CloudFront untuk mengakses Lambda hanya jika permintaan atas nama CloudFront distribusi yang berisi URL fungsi Lambda.

contoh : AWS CLI perintah untuk memperbarui kebijakan untuk mengizinkan akses hanya-baca ke OAC CloudFront

AWS CLI Perintah berikut memungkinkan CloudFront distribusi (E1PDK09ESKHJWT) mengakses Lambda FUNCTION_URL_NAMEAnda.

aws lambda add-permission \ --statement-id "AllowCloudFrontServicePrincipal" \ --action "lambda:InvokeFunctionUrl" \ --principal "cloudfront.amazonaws.com" \ --source-arn "arn:aws:cloudfront::123456789012:distribution/E1PDK09ESKHJWT" \ --function-name FUNCTION_URL_NAME
catatan

Jika Anda membuat distribusi dan tidak memiliki izin ke URL fungsi Lambda Anda, Anda dapat memilih Salin perintah CLI dari CloudFront konsol, lalu masukkan perintah ini dari terminal baris perintah Anda. Untuk informasi selengkapnya, lihat Memberikan akses fungsi AWS layanan di Panduan AWS Lambda Pengembang.

Buat OAC

Untuk membuat OAC, Anda dapat menggunakan AWS Management Console AWS CloudFormation, AWS CLI, atau CloudFront API.

Console
Untuk membuat OAC
  1. Masuk ke AWS Management Console 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 Create new OAC, lakukan hal berikut:

    1. Masukkan Nama dan (opsional) Deskripsi untuk OAC.

    2. Untuk perilaku Penandatanganan, sebaiknya Anda meninggalkan setelan default (Permintaan tanda tangan (disarankan)). Untuk informasi selengkapnya, lihat Pengaturan lanjutan untuk kontrol akses asal.

  5. Untuk tipe Origin, pilih Lambda.

  6. Pilih Buat.

    Tip

    Setelah Anda membuat OAC, catat Nama. Anda membutuhkan ini dalam prosedur berikut.

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

  2. Pilih distribusi dengan URL fungsi Lambda yang ingin Anda tambahkan OAC, lalu pilih tab Origins.

  3. Pilih URL fungsi Lambda yang ingin Anda tambahkan OAC, lalu pilih Edit.

  4. Pilih HTTPS hanya untuk Protokol asal Anda.

  5. Dari menu tarik-turun kontrol akses Origin, pilih nama 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 URL fungsi Lambda.

CloudFormation

Untuk membuat OAC dengan AWS CloudFormation, gunakan jenis AWS::CloudFront::OriginAccessControl sumber daya. Contoh berikut menunjukkan sintaks AWS CloudFormation template, dalam format YAMAL, untuk membuat OAC.

Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: ExampleOAC OriginAccessControlOriginType: lambda SigningBehavior: always SigningProtocol: sigv4

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

CLI

Untuk membuat kontrol akses asal dengan AWS Command Line Interface (AWS CLI), gunakan aws cloudfront create-origin-access-control perintah. Anda dapat menggunakan file input untuk memberikan parameter input untuk perintah, daripada menentukan setiap parameter individu sebagai input baris perintah.

Untuk membuat kontrol akses asal (CLI dengan file input)
  1. Gunakan perintah berikut untuk membuat file yang diberi namaorigin-access-control.yaml. File ini berisi semua parameter input untuk create-origin-access-control perintah.

    aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
  2. Buka origin-access-control.yaml file yang baru saja Anda buat. Edit file untuk menambahkan nama untuk OAC, deskripsi (opsional), dan ubah SigningBehavior kealways. Kemudian simpan filenya.

    Untuk informasi tentang pengaturan OAC lainnya, lihatPengaturan lanjutan untuk kontrol akses asal.

  3. Gunakan perintah berikut untuk membuat kontrol akses asal menggunakan parameter input dari origin-access-control.yaml file.

    aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml

    Catat Id nilai dalam output perintah. Anda membutuhkannya untuk menambahkan OAC ke URL fungsi Lambda dalam CloudFront distribusi.

Untuk melampirkan OAC ke URL fungsi Lambda dalam distribusi yang ada (CLI dengan file input)
  1. Gunakan perintah berikut untuk menyimpan konfigurasi distribusi untuk CloudFront distribusi yang ingin Anda tambahkan OAC. Distribusi harus memiliki URL fungsi Lambda sebagai asal.

    aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
  2. Buka file yang diberi nama dist-config.yaml yang baru saja Anda buat. Edit file akan membuat perubahan berikut:

    • Di Origins objek, tambahkan ID OAC ke bidang yang diberi OriginAccessControlId nama.

    • Hapus nilai dari bidang yang diberi namaOriginAccessIdentity, jika ada.

    • Ubah nama ETag bidang menjadiIfMatch, tetapi jangan ubah nilai bidang.

    Simpan file setelah selesai.

  3. Gunakan perintah berikut untuk memperbarui distribusi untuk menggunakan kontrol akses asal.

    aws cloudfront update-distribution --id <CloudFront distribution ID> --cli-input-yaml file://dist-config.yaml

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

API

Untuk membuat OAC dengan CloudFront API, gunakan CreateOriginAccessControl. Untuk informasi selengkapnya tentang bidang yang Anda tentukan dalam panggilan API ini, lihat dokumentasi referensi API untuk AWS SDK atau klien API lainnya.

Setelah membuat OAC, Anda dapat melampirkannya ke URL fungsi Lambda dalam distribusi, menggunakan salah satu panggilan API berikut:

Untuk kedua panggilan API ini, berikan ID OAC di OriginAccessControlId bidang, di dalam asal. Untuk informasi selengkapnya tentang bidang lain yang Anda tentukan dalam panggilan API ini, lihat dan dokumentasi referensi API untuk AWS SDK atau klien API lainnya.

Pengaturan lanjutan untuk kontrol akses asal

Fitur CloudFront OAC mencakup pengaturan lanjutan yang ditujukan hanya untuk kasus penggunaan tertentu. Gunakan pengaturan yang disarankan kecuali Anda memiliki kebutuhan khusus untuk pengaturan lanjutan.

OAC berisi setelan bernama Perilaku penandatanganan (di konsol), atau SigningBehavior (di API, CLI, AWS CloudFormation dan). Pengaturan ini menyediakan opsi berikut:

Selalu tandatangani permintaan asal (pengaturan yang disarankan)

Sebaiknya gunakan pengaturan ini, bernama Permintaan tanda (disarankan) di konsol, atau always di API, CLI, dan. AWS CloudFormation Dengan pengaturan ini, CloudFront selalu tandatangani semua permintaan yang dikirimkan ke URL fungsi Lambda.

Jangan pernah menandatangani permintaan asal

Pengaturan ini diberi nama Jangan menandatangani permintaan di konsol, atau never di API, CLI, dan. AWS CloudFormation Gunakan pengaturan ini untuk mematikan OAC untuk semua asal di semua distribusi yang menggunakan OAC ini. Ini dapat menghemat waktu dan tenaga dibandingkan dengan menghapus OAC dari semua asal dan distribusi yang menggunakannya, satu per satu. Dengan pengaturan ini, CloudFront tidak menandatangani permintaan apa pun yang dikirim ke URL fungsi Lambda.

Awas

Untuk menggunakan pengaturan ini, URL fungsi Lambda harus dapat diakses publik. Jika Anda menggunakan setelan ini dengan URL fungsi Lambda yang tidak dapat diakses publik, tidak CloudFront dapat mengakses asal. URL fungsi Lambda mengembalikan kesalahan CloudFront dan CloudFront meneruskan kesalahan tersebut ke pemirsa. Untuk informasi selengkapnya, lihat Model keamanan dan autentikasi untuk URL fungsi Lambda di AWS Lambda Panduan Pengguna.

Jangan mengganti header penampil (klien) Authorization

Pengaturan ini diberi nama Jangan timpa header otorisasi di konsol, atau no-override di API, CLI, dan. AWS CloudFormation Gunakan setelan ini saat Anda CloudFront ingin menandatangani permintaan asal hanya jika permintaan penampil yang sesuai tidak menyertakan Authorization header. Dengan pengaturan ini, CloudFront meneruskan Authorization header dari permintaan penampil saat ada, tetapi menandatangani permintaan asal (menambahkan tajuknya sendiriAuthorization) saat permintaan penampil tidak menyertakan Authorization header.

Awas
  • Jika Anda menggunakan setelan ini, Anda harus menentukan penandatanganan Tanda Tangan Versi 4 untuk URL fungsi Lambda, bukan nama CloudFront distribusi atau CNAME. Saat CloudFront meneruskan Authorization header dari permintaan penampil ke URL fungsi Lambda, Lambda akan memvalidasi tanda tangan terhadap host domain URL Lambda. Jika tanda tangan tidak didasarkan pada domain URL Lambda, host dalam tanda tangan tidak akan cocok dengan host yang digunakan oleh asal URL Lambda. Ini berarti permintaan akan gagal, menghasilkan kesalahan validasi tanda tangan.

  • Untuk meneruskan Authorization header dari permintaan penampil, Anda harus menambahkan Authorization header ke kebijakan cache untuk semua perilaku cache yang menggunakan URL fungsi Lambda yang terkait dengan kontrol akses asal ini.