

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
<a name="web-functions-endpoint-access-control"></a>

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](#web-functions-endpoint-access-control-cloudfront) 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, lihat[Membuat titik akhir](web-functions-endpoints.md#web-functions-endpoint-create). Untuk properti yang dapat Anda ubah, lihat[Memperbarui titik akhir](web-functions-endpoints.md#web-functions-endpoint-update).

## Menggunakan jenis `IamAuth`otentikasi
<a name="web-functions-endpoint-access-control-iam"></a>

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`

**Example 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` dan`delete-resource-policy`.

Fungsi Web memiliki satu kebijakan berbasis sumber daya, dan menggantikannya. `put-resource-policy` Untuk menambahkan pernyataan, seperti CloudFront pernyataan di[CloudFront integrasi](#web-functions-endpoint-access-control-cloudfront), dapatkan kebijakan saat ini`get-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
<a name="web-functions-endpoint-access-control-iam-grant"></a>

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:

**Example 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
<a name="web-functions-endpoint-access-control-signing"></a>

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 dengan`403 Forbidden`.
+ Jika Anda tidak menandatangani isi (misalnya, saat streaming), gunakan nilai literal `UNSIGNED-PAYLOAD` untuk`X-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. `MultiRegion`titik akhir menggunakan AWS Signature Version 4a (Sigv4a), yang menandatangani satu set Wilayah, bukan satu Wilayah. Gunakan set Wilayah`*`.
+ Jika `IamAuth` permintaan muncul`403 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html).

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 (lihat[CloudFront integrasi](#web-functions-endpoint-access-control-cloudfront)).

### CloudFront integrasi
<a name="web-functions-endpoint-access-control-cloudfront"></a>

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 dengan`AWS4-`). 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](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-origin.html).

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 penandatanganan`always-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:

**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/<distribution-id>"
                }
            }
        }
    ]
}
```

## Menggunakan jenis `ApplicationManaged`otentikasi
<a name="web-functions-endpoint-access-control-appmanaged"></a>

Ketika jenis otentikasi endpoint adalah`ApplicationManaged`, 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](web-functions-permissions.md#web-functions-permissions-resource-policy).

## Tata kelola dan kontrol akses
<a name="web-functions-endpoint-access-control-governance"></a>

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 miliknya`AuthType`.
+ `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/WebFunctionAuthType`berlaku untuk`CreateWebFunction`,`CreateWebFunctionEndpoint`, dan`UpdateWebFunctionEndpoint`. `lambda:Resource/WebFunctionAuthType`berlaku untuk `InvokeWebFunctionEndpoint` (pada `IamAuth` titik akhir),, `UpdateWebFunctionEndpoint``GetWebFunctionEndpoint`, dan`DeleteWebFunctionEndpoint`. Lihat perinciannya di [Kunci syarat](#web-functions-endpoint-access-control-condition-keys).

### Membatasi titik akhir publik dalam suatu organisasi
<a name="web-functions-endpoint-access-control-scp"></a>

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:

**Example 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
<a name="web-functions-endpoint-access-control-condition-keys"></a>

Untuk kontrol akses berbutir halus, Lambda mendukung kunci konteks kondisi berikut:
+ `lambda:Request/WebFunctionAuthType`— Jenis otentikasi yang ditentukan dalam permintaan. Tersedia selama`CreateWebFunction`,`CreateWebFunctionEndpoint`, dan`UpdateWebFunctionEndpoint`. 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 selama`InvokeWebFunctionEndpoint`,`UpdateWebFunctionEndpoint`,`DeleteWebFunctionEndpoint`, dan`GetWebFunctionEndpoint`. Untuk`InvokeWebFunctionEndpoint`, 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.

**Example 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"
                }
            }
        }
    ]
}
```