

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
<a name="private-content-restricting-access-to-lambda-web"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions.html) 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](private-content-restricting-access-to-lambda.md)

## Prasyarat
<a name="oac-prerequisites-lambda-web"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoints.html#web-functions-endpoint-types) host:
+ Titik akhir regional (`HomeRegion`dan 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` Dengan`IamAuth`, 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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-endpoint-access-control.html#web-functions-endpoint-access-control-cloudfront) di *Panduan AWS Lambda Pengembang*.
+ **Kebijakan cache** - Jika Fungsi Web Lambda Anda menggunakan `Authorization` header penampil, Anda harus menambahkan header ke kebijakan [cache](controlling-the-cache-key.md). 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)](RequestAndResponseBehaviorCustomOrigin.md#request-custom-headers-behavior).
+ **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, gunakan`AllViewerExceptHostHeader`, bukan`AllViewer`. Untuk informasi selengkapnya, lihat [AllViewerExceptHostHeader](using-managed-origin-request-policies.md#managed-origin-request-policy-all-viewer-except-host-header).

**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
<a name="oac-permission-to-access-lambda-web"></a>

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.

**Example 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](https://docs.aws.amazon.com/lambda/latest/dg/web-functions-permissions.html#web-functions-permissions-resource-policy-replication) di Panduan *AWS Lambda Pengembang*.

## Buat kontrol akses asal
<a name="create-oac-lambda-web"></a>

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 di[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Di panel navigasi, pilih **Akses asal**.

1. Pilih **Buat pengaturan kontrol**.

1. Pada formulir **pengaturan Create control**, lakukan hal berikut:

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

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

   1. 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.

   1. 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](#oac-signing-behavior-lambda-web).

1. Pilih **Buat**.

**Untuk menambahkan kontrol akses asal ke asal Fungsi Web Lambda dalam distribusi**

1. Buka CloudFront konsol di[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

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

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

1. Untuk **akses Origin**, pilih **Pengaturan kontrol akses Origin (disarankan)**.

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

1. 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 di`OriginAccessControlConfig`:
+ `SigningProtocol`: `sigv4` (titik akhir regional) atau `sigv4a` (titik akhir global)
+ `SigningBehavior`: `always-amz-auth`
+ `OriginAccessControlOriginType`: `lambda`

**Example 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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudfront-originaccesscontrol.html) 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
<a name="oac-signing-behavior-lambda-web"></a>

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](controlling-the-cache-key.md) untuk setiap perilaku cache yang menggunakan asal.

Perilaku penandatanganan lainnya (`always``never`,, dan`no-override`) tidak didukung untuk asal Fungsi Web Lambda. Perilaku `always-amz-auth` penandatanganan tidak didukung untuk jenis asal lainnya, termasuk asal URL fungsi Lambda.

Untuk`PUT`,`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.