

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

# Otentikasi TLS timbal balik dengan CloudFront (Viewer mTLS)
<a name="mtls-authentication"></a>

Mutual TLS Authentication (Mutual Transport Layer Security Authentication — mTLS) adalah protokol keamanan yang memperluas otentikasi TLS standar dengan memerlukan otentikasi berbasis sertifikat dua arah, di mana klien dan server harus membuktikan identitas mereka sebelum membuat koneksi yang aman. Menggunakan TLS timbal balik, Anda dapat memastikan bahwa hanya klien yang menyajikan sertifikat TLS tepercaya yang mendapatkan akses ke distribusi Anda. CloudFront 

## Cara kerjanya
<a name="how-mtls-works"></a>

Dalam jabat tangan TLS standar, hanya server yang menyajikan sertifikat untuk membuktikan identitasnya kepada klien. Dengan TLS timbal balik, proses otentikasi menjadi dua arah. Ketika klien mencoba untuk terhubung ke CloudFront distribusi Anda, CloudFront meminta sertifikat klien selama jabat tangan TLS. Klien harus menunjukkan sertifikat X.509 yang valid yang CloudFront memvalidasi terhadap penyimpanan kepercayaan Anda yang dikonfigurasi sebelum membuat koneksi aman.

CloudFront melakukan validasi sertifikat ini di lokasi AWS tepi, menurunkan kompleksitas otentikasi dari server asal Anda sambil mempertahankan CloudFront manfaat kinerja global. Anda dapat mengonfigurasi mTL dalam dua mode: mode verifikasi (yang mengharuskan semua klien untuk menunjukkan sertifikat yang valid) atau mode opsional (yang memvalidasi sertifikat saat disajikan tetapi juga memungkinkan koneksi tanpa sertifikat).

## Kasus penggunaan
<a name="mtls-use-cases"></a>

Otentikasi TLS timbal balik dengan CloudFront membahas beberapa skenario keamanan kritis di mana metode otentikasi tradisional tidak mencukupi:
+ **Otentikasi perangkat dengan caching konten** - Anda dapat mengautentikasi konsol game, perangkat IoT, atau perangkat keras perusahaan sebelum mengizinkan akses ke pembaruan firmware, unduhan game, atau sumber daya internal. Setiap perangkat berisi sertifikat unik yang membuktikan keasliannya sambil memanfaatkan kemampuan caching CloudFront.
+ **API-to-API otentikasi** - Anda dapat mengamankan machine-to-machine komunikasi antara mitra bisnis tepercaya, sistem pembayaran, atau layanan mikro. Otentikasi berbasis sertifikat menghilangkan kebutuhan akan rahasia bersama atau kunci API sambil memberikan verifikasi identitas yang kuat untuk pertukaran data otomatis.

**Topics**
+ [

## Cara kerjanya
](#how-mtls-works)
+ [

## Kasus penggunaan
](#mtls-use-cases)
+ [

# Toko kepercayaan dan manajemen sertifikat
](trust-stores-certificate-management.md)
+ [

# Aktifkan TLS timbal balik untuk distribusi CloudFront
](enable-mtls-distributions.md)
+ [

# Kaitkan Fungsi CloudFront Koneksi
](connection-functions.md)
+ [

# Mengkonfigurasi pengaturan tambahan
](configuring-additional-settings.md)
+ [

# Header mTLS penampil untuk kebijakan cache dan diteruskan ke asal
](viewer-mtls-headers.md)
+ [

# Pencabutan menggunakan Fungsi CloudFront Koneksi dan KVS
](revocation-connection-function-kvs.md)
+ [

# Observabilitas menggunakan log koneksi
](connection-logs.md)

# Toko kepercayaan dan manajemen sertifikat
<a name="trust-stores-certificate-management"></a>

Membuat dan mengonfigurasi toko kepercayaan adalah persyaratan wajib untuk menerapkan otentikasi TLS timbal balik dengan. CloudFront Trust store berisi sertifikat Certificate Authority (CA) yang CloudFront digunakan untuk memvalidasi sertifikat klien selama proses otentikasi.

## Apa itu toko kepercayaan?
<a name="what-is-trust-store"></a>

Toko kepercayaan adalah repositori sertifikat CA yang CloudFront digunakan untuk memvalidasi sertifikat klien selama otentikasi TLS bersama. Trust store berisi sertifikat CA root dan intermediate yang membentuk rantai kepercayaan untuk mengautentikasi sertifikat klien.

Saat Anda menerapkan TLS timbal balik CloudFront, toko kepercayaan menentukan Otoritas Sertifikat mana yang Anda percayai untuk menerbitkan sertifikat klien yang valid. CloudFront memvalidasi setiap sertifikat klien terhadap toko kepercayaan Anda selama jabat tangan TLS. Hanya klien yang menyajikan sertifikat yang berantai ke salah satu toko kepercayaan Anda yang CAs akan berhasil diautentikasi.

Trust store CloudFront adalah sumber daya tingkat akun yang dapat Anda kaitkan dengan beberapa distribusi. Ini memungkinkan Anda mempertahankan kebijakan validasi sertifikat yang konsisten di seluruh CloudFront penerapan sekaligus menyederhanakan manajemen sertifikat CA.

## Dukungan Otoritas Sertifikat
<a name="ca-support"></a>

CloudFront mendukung sertifikat yang dikeluarkan oleh Otoritas Sertifikat AWS Pribadi dan Otoritas Sertifikat swasta pihak ketiga. Fleksibilitas ini memungkinkan Anda untuk menggunakan infrastruktur sertifikat yang ada atau memanfaatkan layanan sertifikat AWS terkelola berdasarkan persyaratan organisasi Anda.
+ **AWS Otoritas Sertifikat Pribadi:** Anda dapat menggunakan sertifikat yang dikeluarkan oleh AWS Private CA, yang menyediakan layanan otoritas sertifikat swasta yang dikelola. Integrasi ini menyederhanakan manajemen siklus hidup sertifikat dan menyediakan integrasi tanpa batas dengan layanan lain. AWS 
+ **Otoritas Sertifikat Pribadi Pihak Ketiga:** Anda juga dapat menggunakan sertifikat dari infrastruktur Otoritas Sertifikat pribadi Anda yang ada, termasuk perusahaan CAs atau penyedia sertifikat pihak ketiga lainnya. Hal ini memungkinkan Anda untuk mempertahankan proses manajemen sertifikat Anda saat ini sambil menambahkan CloudFront kemampuan mTLS.

## Persyaratan dan spesifikasi sertifikat
<a name="certificate-requirements"></a>

Toko kepercayaan memiliki persyaratan khusus untuk sertifikat CA yang dikandungnya:

### Persyaratan format sertifikat CA
<a name="ca-cert-format-requirements"></a>
+ **Format: Format** PEM (Privacy Enhanced Mail)
+ **Batasan konten: Sertifikat harus dilampirkan dalam batas** ------ MULAI SERTIFIKAT ------ dan ------ END CERTIFICATE ------
+ **Komentar:** Harus didahului oleh karakter \$1 dan tidak dapat berisi - karakter
+ **Jeda baris:** Tidak ada baris kosong yang diizinkan di antara sertifikat

### Spesifikasi sertifikat yang didukung
<a name="supported-cert-specs"></a>
+ **Jenis sertifikat:** X.509v3
+ **Jenis kunci publik:**
  + RSA 2048, RSA 3072, RSA 4096
  + ECDSA: secp256r1, secp384r1
+ **Algoritma tanda tangan:**
  + SHA256, SHA384, SHA512 dengan RSA
  + SHA256, SHA384, SHA512 dengan EC
  + SHA256, SHA384, SHA512 dengan RSASSA-PSS dengan MGF1

### Contoh format bundel sertifikat
<a name="example-cert-bundle"></a>

Beberapa sertifikat (dikodekan PEM):

```
# Root CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqiMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
# Intermediate CA Certificate
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAKoK/OvD/XqjMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTcwNzEyMTU0NzQ4WhcNMjcwNzEwMTU0NzQ4WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAuuExKvY1xzHFylsHiuowqpmzs7rEcuuylOuEszpFp+BtXh0ZuEtts9LP
-----END CERTIFICATE-----
```

## Buat toko kepercayaan
<a name="create-trust-store"></a>

Sebelum membuat toko kepercayaan, Anda harus mengunggah bundel sertifikat CA Anda dalam format PEM ke bucket Amazon S3. Bundel sertifikat harus berisi semua sertifikat CA root dan perantara tepercaya yang diperlukan untuk memvalidasi sertifikat klien Anda.

Bundel sertifikat CA hanya dibaca sekali dari S3 saat membuat toko kepercayaan. Jika perubahan future dilakukan pada bundel sertifikat CA, maka trust store harus diperbarui secara manual. Tidak ada sinkronisasi yang dipertahankan antara toko kepercayaan dan bundel sertifikat S3 CA.

### Prasyarat
<a name="trust-store-prerequisites"></a>
+ Bundel sertifikat dari Otoritas Sertifikat (CA) yang diunggah ke bucket Amazon S3
+ Izin yang diperlukan untuk membuat sumber daya CloudFront 

### Untuk membuat toko kepercayaan (Konsol)
<a name="create-trust-store-console"></a>

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 **Trust store**.

1. Pilih **Buat toko kepercayaan**.

1. Untuk **nama toko Trust**, masukkan nama untuk toko kepercayaan Anda.

1. Untuk paket **otoritas Sertifikat (CA), masukkan jalur Amazon S3 ke bundel** sertifikat CA format PEM Anda.

1. Pilih **Buat toko kepercayaan**.

### Untuk membuat toko kepercayaan (AWS CLI)
<a name="create-trust-store-cli"></a>

```
aws cloudfront create-trust-store \
  --name MyTrustStore \
  --ca-certificates-bundle-source '{"CaCertificatesBundleS3Location":{"Bucket":"my-bucket","Key":"ca-bundle.pem","Region":"bucket-region"}}' \
  --tags Items=[{Key=Environment,Value=Production}]
```

## Mengaitkan toko kepercayaan dengan distribusi
<a name="associate-trust-store"></a>

Setelah membuat toko kepercayaan, Anda harus mengaitkannya dengan CloudFront distribusi untuk mengaktifkan otentikasi TLS timbal balik.

### Prasyarat
<a name="associate-prerequisites"></a>
+  CloudFront Distribusi yang ada dengan kebijakan protokol penampil khusus HTTP diaktifkan dan HTTP3 dukungan dinonaktifkan.

### Untuk mengaitkan toko kepercayaan (Konsol)
<a name="associate-trust-store-console"></a>

Ada dua cara untuk mengaitkan toko kepercayaan di dalam CloudFront konsol: melalui halaman detail toko kepercayaan atau melalui halaman pengaturan distribusi.

**Mengaitkan toko kepercayaan melalui halaman detail toko kepercayaan:**

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 **Trust store**.

1. Pilih nama toko kepercayaan yang ingin Anda kaitkan.

1. Pilih **Associate to Distribution**.

1. Konfigurasikan opsi mTLS Viewer yang tersedia:
   + Mode **validasi sertifikat klien: Pilih antara mode** Diperlukan dan Opsional. Dalam mode wajib, semua klien diharuskan untuk menunjukkan sertifikat. Dalam mode opsional, klien yang menyajikan sertifikat divalidasi, sementara klien yang tidak menunjukkan sertifikat diizinkan mengakses.
   + **Iklankan nama CA toko kepercayaan:** Pilih apakah akan mengiklankan nama CA di toko kepercayaan Anda kepada klien selama jabat tangan TLS.
   + **Abaikan tanggal kedaluwarsa sertifikat:** Pilih apakah akan mengizinkan koneksi dengan sertifikat kedaluwarsa (kriteria validasi lainnya masih berlaku).
   + **Fungsi Koneksi:** Fungsi Koneksi opsional dapat dikaitkan dengan allow/deny koneksi berdasarkan kriteria khusus lainnya.

1. Pilih satu atau beberapa distribusi untuk dikaitkan dengan toko kepercayaan. Hanya distribusi dengan perilaku cache yang HTTP3 dinonaktifkan dan hanya HTTP yang dapat mendukung mTL Penampil.

1. Pilih **Kaitkan**.

**Mengaitkan toko kepercayaan melalui halaman pengaturan distribusi:**

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. Pilih distribusi yang ingin Anda kaitkan

1. Di bawah tab **Umum**, di dalam wadah **Pengaturan**, pilih **Edit** di sudut kanan atas

1. Gulir ke bawah ke bagian bawah halaman, di dalam wadah **Konektivitas**, aktifkan sakelar **Viewer mTLS**

1. Konfigurasikan opsi mTLS Viewer yang tersedia:
   + Mode **validasi sertifikat klien: Pilih antara mode** Diperlukan dan Opsional. Dalam mode wajib, semua klien diharuskan untuk menunjukkan sertifikat. Dalam mode opsional, klien yang menyajikan sertifikat divalidasi, sementara klien yang tidak menunjukkan sertifikat diizinkan mengakses.
   + **Iklankan nama CA toko kepercayaan:** Pilih apakah akan mengiklankan nama CA di toko kepercayaan Anda kepada klien selama jabat tangan TLS.
   + **Abaikan tanggal kedaluwarsa sertifikat:** Pilih apakah akan mengizinkan koneksi dengan sertifikat kedaluwarsa (kriteria validasi lainnya masih berlaku).
   + **Fungsi Koneksi:** Fungsi Koneksi opsional dapat dikaitkan dengan allow/deny koneksi berdasarkan kriteria khusus lainnya.

1. Pilih **Simpan perubahan** di sudut kanan bawah.

### Untuk mengaitkan toko kepercayaan (AWS CLI)
<a name="associate-trust-store-cli"></a>

Toko kepercayaan dapat dikaitkan dengan distribusi melalui. DistributionConfig ViewerMtlsConfig properti. Ini berarti pertama-tama kita perlu mengambil konfigurasi distribusi dan kemudian memberikan permintaan ViewerMtlsConfig berikutnya UpdateDistribution .

```
// First fetch the distribution
aws cloudfront get-distribution {DISTRIBUTION_ID}

// Update the distribution config, for example:
Distribution config, file://distConf.json: 
{
  ...other fields,
  ViewerMtlsConfig: {
    Mode: 'required',
    TrustStoreConfig: {
        AdvertiseTrustStoreCaNames: false,
        IgnoreCertificateExpiry: true,
        TrustStoreId: {TRUST_STORE_ID}
    }
  }
}

aws cloudfront update-distribution \
   --id {DISTRIBUTION_ID} \
   --if-match {ETAG} \
   --distribution-config file://distConf.json
```

## Kelola toko kepercayaan
<a name="manage-trust-stores"></a>

### Lihat detail toko kepercayaan
<a name="view-trust-store-details"></a>

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 **Trust store**.

1. Pilih nama toko kepercayaan untuk melihat halaman detailnya.

Halaman detail menunjukkan:
+ Nama dan ID toko kepercayaan
+ Jumlah sertifikat CA
+ Tanggal pembuatan dan tanggal modifikasi terakhir
+ Distribusi terkait
+ Tag

### Ubah toko kepercayaan
<a name="modify-trust-store"></a>

Untuk mengganti bundel sertifikat CA:

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 **Trust store**.

1. Pilih nama toko kepercayaan.

1. Pilih **Tindakan**, lalu **Edit**.

1. Untuk **bundel otoritas Sertifikat (CA)**, masukkan lokasi Amazon S3 dari file PEM bundel CA yang diperbarui.

1. Pilih **Perbarui toko kepercayaan**.

### Hapus toko kepercayaan
<a name="delete-trust-store"></a>

**Prasyarat:** Anda harus terlebih dahulu memisahkan toko kepercayaan dari semua distribusi. CloudFront 

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 **Trust store**.

1. Pilih nama toko kepercayaan.

1. Pilih **Hapus toko kepercayaan**.

1. Pilih **Hapus** untuk mengonfirmasi.

### Langkah selanjutnya
<a name="trust-store-next-steps"></a>

Setelah membuat dan mengaitkan toko kepercayaan Anda dengan CloudFront distribusi, Anda dapat melanjutkan untuk mengaktifkan otentikasi TLS timbal balik pada distribusi Anda dan mengonfigurasi pengaturan tambahan seperti meneruskan header sertifikat ke asal Anda. Untuk petunjuk terperinci tentang mengaktifkan MTL pada distribusi Anda, lihat. [Aktifkan TLS timbal balik untuk distribusi CloudFront](enable-mtls-distributions.md)

# Aktifkan TLS timbal balik untuk distribusi CloudFront
<a name="enable-mtls-distributions"></a>

## Prasyarat dan persyaratan
<a name="mtls-prerequisites-requirements"></a>

CloudFrontMode verifikasi TLS timbal balik mengharuskan semua klien untuk menunjukkan sertifikat yang valid selama jabat tangan TLS dan menolak koneksi tanpa sertifikat yang valid. Sebelum mengaktifkan TLS timbal balik pada CloudFront distribusi, pastikan Anda memiliki:
+ Membuat toko kepercayaan dengan sertifikat Otoritas Sertifikat Anda
+ Mengaitkan toko kepercayaan dengan CloudFront distribusi Anda
+ Memastikan semua perilaku cache distribusi menggunakan kebijakan protokol penampil khusus HTTP
+ Memastikan distribusi Anda menggunakan HTTP/2 (pengaturan default, MTL Viewer tidak didukung pada HTTP/3)

**catatan**  
Otentikasi TLS timbal balik memerlukan koneksi HTTPS antara pemirsa dan. CloudFront Anda tidak dapat mengaktifkan mTL pada distribusi dengan perilaku cache apa pun yang mendukung koneksi HTTP.

## Aktifkan TLS timbal balik (Konsol)
<a name="enable-mtls-console"></a>

### Untuk distribusi baru
<a name="enable-mtls-new-distributions"></a>

MTL penampil tidak dapat dikonfigurasi dalam proses pembuatan distribusi baru di CloudFront konsol. Pertama buat distribusi dengan cara apa pun (konsol, CLI, API), lalu edit pengaturan distribusi untuk mengaktifkan mTL Penampil sesuai instruksi distribusi yang ada di bawah ini.

### Untuk distribusi yang ada
<a name="enable-mtls-existing-distributions"></a>

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. Dari daftar distribusi, pilih distribusi yang ingin Anda ubah.

1. Pastikan kebijakan protokol Viewer disetel ke **Redirect HTTP ke HTTPS atau HTTPS** **Only** untuk semua perilaku cache. (Anda dapat memilih tab **Perilaku cache** untuk melihat dan memperbarui perilaku cache apa pun dengan kebijakan protokol HTTP.)

1. Pilih tab **Umum**.

1. Di bagian **Pengaturan**, pilih **Edit**.

1. Di bagian **Konektivitas**, temukan **otentikasi bersama Viewer (mTLS**).

1. Alihkan **Aktifkan otentikasi timbal balik** ke Aktif.

1. Untuk **mode validasi sertifikat Klien**, pilih **Diperlukan** (semua klien harus menunjukkan sertifikat) atau **Opsional** (klien dapat menyajikan sertifikat secara opsional).

1. Untuk **toko Trust**, pilih toko kepercayaan yang Anda buat sebelumnya.

1. (Opsional) Alihkan **Iklan nama CA toko kepercayaan jika Anda ingin mengirim nama** CA CloudFront ke klien selama jabat tangan TLS.

1. (Opsional) Alihkan **Abaikan tanggal kedaluwarsa sertifikat** jika Anda ingin mengizinkan koneksi dengan sertifikat kedaluwarsa.

1. Pilih **Simpan perubahan**.

## Aktifkan TLS timbal balik (AWS CLI)
<a name="enable-mtls-cli"></a>

### Untuk distribusi baru
<a name="enable-mtls-cli-new"></a>

Contoh berikut menunjukkan cara membuat file konfigurasi distribusi (distribution-config.json) yang menyertakan pengaturan mTLS:

```
{
  "CallerReference": "cli-example-1",
  "Origins": {
    "Quantity": 1,
    "Items": [
      {
        "Id": "my-origin",
        "DomainName": "example.com",
        "CustomOriginConfig": {
          "HTTPPort": 80,
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only"
        }
      }
    ]
  },
  "DefaultCacheBehavior": {
    "TargetOriginId": "my-origin",
    "ViewerProtocolPolicy": "https-only",
    "MinTTL": 0,
    "ForwardedValues": {
      "QueryString": false,
      "Cookies": {
        "Forward": "none"
      }
    }
  },
  "ViewerCertificate": {
    "CloudFrontDefaultCertificate": true
  },
  "ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
  },
  "Enabled": true
}
```

Buat distribusi dengan mTL diaktifkan menggunakan perintah contoh berikut:

```
aws cloudfront create-distribution --distribution-config file://distribution-config.json
```

### Untuk distribusi yang ada
<a name="enable-mtls-cli-existing"></a>

Dapatkan konfigurasi distribusi saat ini menggunakan perintah contoh berikut:

```
aws cloudfront get-distribution-config --id E1A2B3C4D5E6F7 --output json > dist-config.json
```

Edit file untuk menambahkan pengaturan mTLS. Tambahkan bagian contoh berikut ke konfigurasi distribusi Anda:

```
"ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
}
```

Hapus ETag bidang dari file tetapi simpan nilainya secara terpisah.

Perbarui distribusi dengan konfigurasi baru menggunakan perintah contoh berikut:

```
aws cloudfront update-distribution \
    --id E1A2B3C4D5E6F7 \
    --if-match YOUR-ETAG-VALUE \
    --distribution-config file://dist-config.json
```

## Kebijakan protokol penampil
<a name="viewer-protocol-policies"></a>

Saat menggunakan TLS timbal balik, semua perilaku cache distribusi harus dikonfigurasi dengan kebijakan protokol penampil khusus HTTP:
+ **Redirect HTTP ke HTTPS** - Mengalihkan permintaan HTTP ke HTTPS sebelum melakukan validasi sertifikat.
+ **Hanya HTTPS** - Hanya menerima permintaan HTTPS dan melakukan validasi sertifikat.

**catatan**  
Kebijakan protokol penampil HTTP dan HTTPS tidak didukung dengan TLS timbal balik karena koneksi HTTP tidak dapat melakukan validasi sertifikat.

## Langkah selanjutnya
<a name="enable-mtls-next-steps"></a>

Setelah mengaktifkan Viewer TLS pada CloudFront distribusi Anda, Anda dapat mengaitkan Fungsi Koneksi untuk menerapkan logika validasi sertifikat kustom. Fungsi Koneksi memungkinkan Anda untuk memperluas kemampuan otentikasi mTLS bawaan dengan aturan validasi kustom, pemeriksaan pencabutan sertifikat, dan pencatatan. Untuk detail tentang membuat dan mengaitkan Fungsi Koneksi, lihat[Kaitkan Fungsi CloudFront Koneksi](connection-functions.md).

# Kaitkan Fungsi CloudFront Koneksi
<a name="connection-functions"></a>

CloudFront Fungsi Koneksi memungkinkan Anda menerapkan logika validasi sertifikat kustom selama jabat tangan TLS, menyediakan ekstensi ke kemampuan otentikasi mTLS bawaan.

## Apa itu Fungsi Koneksi?
<a name="what-are-connection-functions"></a>

Fungsi Koneksi adalah JavaScript fungsi yang berjalan selama jabat tangan TLS setelah sertifikat klien divalidasi. Sertifikat klien yang divalidasi diteruskan ke Fungsi Koneksi di mana Fungsi Koneksi dapat membuat penentuan tambahan apakah akan memberikan akses atau tidak. Untuk informasi rinci tentang Fungsi Koneksi, lihat[Sesuaikan di tepi dengan CloudFront Fungsi](cloudfront-functions.md).

## Bagaimana Fungsi Koneksi bekerja dengan mTL
<a name="how-connection-functions-work"></a>

Ketika klien mencoba membuat koneksi mTLS ke CloudFront distribusi Anda, urutan berikut terjadi:

1. Klien memulai jabat tangan TLS dengan CloudFront lokasi tepi.

1. CloudFront meminta dan menerima sertifikat klien.

1. CloudFront melakukan validasi sertifikat standar terhadap trust store.

1. Jika sertifikat melewati validasi standar, CloudFront memanggil Fungsi Koneksi Anda. Jika **IgnoreCertificateExpiry**diaktifkan di dalam Anda **ViewerMtlsConfig**, maka sertifikat Anda yang kedaluwarsa—tetapi valid—juga diteruskan ke Fungsi Sambungan. Jika sertifikat klien tidak valid, Fungsi Koneksi tidak akan dipanggil.

1. Fungsi Koneksi Anda menerima informasi sertifikat dan detail koneksi yang diuraikan.

1. Fungsi Anda membuat allow/deny keputusan berdasarkan logika kustom.

1. CloudFront menyelesaikan atau mengakhiri koneksi TLS berdasarkan keputusan Anda.

Fungsi Koneksi dipanggil untuk mode verifikasi dan mode opsional (saat klien menyajikan sertifikat).

## Buat Fungsi Koneksi
<a name="create-connection-function"></a>

Anda dapat membuat Fungsi Koneksi menggunakan CloudFront konsol atau AWS CLI.

### Untuk membuat Fungsi Koneksi (Konsol)
<a name="create-connection-function-console"></a>

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 **Fungsi**.

1. Pilih tab **Fungsi Koneksi** dan pilih **Buat Fungsi Koneksi**.

1. Masukkan nama fungsi yang unik di dalam AWS akun Anda.

1. Pilih **Lanjutkan**.

1. Di editor fungsi, tulis JavaScript kode Anda untuk validasi sertifikat. Penangan fungsi harus memanggil allow atau deny.

1. Opsional: KeyValue toko dapat dikaitkan dengan Fungsi Koneksi untuk mengimplementasikan kontrol pencabutan.

1. Pilih **Simpan perubahan**.

### Untuk membuat Fungsi Koneksi (AWS CLI)
<a name="create-connection-function-cli"></a>

Contoh berikut menunjukkan cara membuat Fungsi Koneksi:

Tulis kode fungsi Anda dalam file terpisah, misalnya code.js:

```
function connectionHandler(connection) {
  connection.allow();
}
```

```
aws cloudfront create-connection-function \
  --name "certificate-validator" \
  --connection-function-config '{
      "Comment": "Client certificate validation function",
      "Runtime": "cloudfront-js-2.0"
  }' \
  --connection-function-code fileb://code.js
```

## Struktur kode Fungsi Koneksi
<a name="connection-function-code-structure"></a>

Fungsi Koneksi mengimplementasikan fungsi ConnectionHandler yang menerima objek koneksi yang berisi sertifikat dan informasi koneksi. Fungsi Anda harus menggunakan salah satu `connection.allow()` atau `connection.deny()` untuk membuat keputusan tentang koneksi.

### Contoh Fungsi Koneksi Dasar
<a name="basic-connection-function-example"></a>

Contoh berikut menunjukkan Fungsi Koneksi sederhana yang memverifikasi bidang subjek sertifikat klien:

```
function connectionHandler(connection) {
    // Only process if a certificate was presented
    if (!connection.clientCertificate) {
        console.log("No certificate presented");
        connection.deny();
    }
    
    // Check the subject field for specific organization
    const subject = connection.clientCertificate.certificates.leaf.subject;
    if (!subject.includes("O=ExampleCorp")) {
        console.log("Certificate not from authorized organization");
       connection.deny();
    } else {
        // All checks passed
        console.log("Certificate validation passed");
        connection.allow();
    }
}
```

Spesifikasi lengkap properti sertifikat klien yang tersedia pada objek koneksi tersedia di sini:

```
{
  "connectionId": "Fdb-Eb7L9gVn2cFakz7wWyBJIDAD4-oNO6g8r3vXDV132BtnIVtqDA==", // Unique identifier for this TLS connection
  "clientIp": "203.0.113.42", // IP address of the connecting client (IPv4 or IPv6)
  "clientCertificate": {
    "certificates": {
      "leaf": {
        "subject": "CN=client.example.com,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate holder
        "issuer": "CN=Example Corp Intermediate CA,O=Example Corp,C=US", // Distinguished Name (DN) of the certificate authority that issued this certificate
        "serialNumber": "4a:3f:5c:92:d1:e8:7b:6c", // Unique serial number assigned by the issuing CA (hexadecimal)
        "validity": {
          "notBefore": "2024-01-15T00:00:00Z", // Certificate validity start date (ISO 8601 format)
          "notAfter": "2025-01-14T23:59:59Z"   // Certificate expiration date (ISO 8601 format)
        },
        "sha256Fingerprint": "a1b2c3d4e5f6...abc123def456", // SHA-256 hash of the certificate (64 hex characters)
      },
    },
  },
}
```

## Kaitkan Fungsi Koneksi
<a name="associate-connection-function-section"></a>

Setelah membuat Fungsi Koneksi Anda, Anda harus mempublikasikannya ke tahap LIVE dan mengaitkannya dengan distribusi Anda.

### Untuk memublikasikan dan mengaitkan Fungsi Koneksi (Konsol)
<a name="publish-associate-console"></a>

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 Fungsi**

1. Pilih tab **Fungsi Koneksi** dan pilih Fungsi Koneksi Anda.

1. Pilih **Publikasikan** untuk memindahkannya ke panggung LIVE.

1. Pilih **Tambahkan asosiasi** dalam tabel distribusi terkait di bawah bagian penerbitan.

1. Pilih distribusi dengan mTL Penampil yang diaktifkan yang ingin Anda kaitkan.

Fungsi Koneksi yang dipublikasikan secara alternatif juga dapat dikaitkan dari halaman detail distribusi.

1. Arahkan ke halaman beranda konsol tempat semua distribusi Anda terdaftar.

1. Pilih distribusi yang ingin Anda kaitkan.

1. Pilih tab **Umum**.

1. Di bagian **Pengaturan**, pilih **Edit**.

1. Di bagian **Konektivitas**, temukan **otentikasi bersama Viewer (mTLS**).

1. Untuk **Fungsi Koneksi**, pilih fungsi Anda.

1. Pilih **Simpan perubahan**.

### Untuk mengaitkan Fungsi Koneksi (AWS CLI)
<a name="associate-connection-function-cli"></a>

Contoh berikut menunjukkan bagaimana mengaitkan Fungsi Koneksi dengan distribusi:

```
// DistributionConfig:
{
   ...other settings,
    "ConnectionFunctionAssociation": {
        "Id": "cf_30c2CV2elHwCoInb3LtcaUJkZeD"
    }
}
```

## Kasus penggunaan untuk Fungsi Koneksi
<a name="connection-function-use-cases"></a>

Fungsi Koneksi memungkinkan beberapa kasus penggunaan mTL tingkat lanjut:
+ **Validasi atribut sertifikat** - Verifikasi bidang tertentu dalam sertifikat klien seperti persyaratan unit organisasi atau pola nama alternatif subjek.
+ Pemeriksaan **pencabutan sertifikat - Menerapkan pemeriksaan** pencabutan sertifikat khusus menggunakan KeyValueStore untuk menyimpan nomor seri sertifikat yang dicabut.
+ **Kebijakan sertifikat berbasis IP** - Menerapkan kebijakan sertifikat yang berbeda berdasarkan alamat IP klien atau batasan geografis.
+ **Validasi multi-penyewa - Menerapkan aturan validasi** khusus penyewa di mana persyaratan sertifikat yang berbeda berlaku berdasarkan nama host atau atribut sertifikat.

**catatan**  
Fungsi Koneksi berjalan sekali per koneksi klien selama jabat tangan TLS.  
Fungsi Koneksi hanya dapat mengizinkan atau menolak koneksi, tidak mengubah permintaan/tanggapan HTTP.  
Hanya fungsi panggung LIVE (diterbitkan) yang dapat dikaitkan dengan distribusi.  
Setiap distribusi dapat memiliki paling banyak satu Fungsi Koneksi.

## Langkah selanjutnya
<a name="connection-function-next-steps"></a>

Setelah mengaitkan Fungsi Sambungan dengan CloudFront distribusi Anda, Anda dapat mengonfigurasi pengaturan opsional untuk menyesuaikan perilaku implementasi mTLS Anda. Untuk petunjuk terperinci tentang mengonfigurasi pengaturan tambahan seperti mode validasi sertifikat klien opsional, lihat. [Mengkonfigurasi pengaturan tambahan](configuring-additional-settings.md)

# Mengkonfigurasi pengaturan tambahan
<a name="configuring-additional-settings"></a>

Setelah mengaktifkan otentikasi TLS timbal balik dasar, Anda dapat mengonfigurasi pengaturan tambahan untuk menyesuaikan perilaku otentikasi untuk kasus dan persyaratan penggunaan tertentu.

## Validasi sertifikat klien Mode opsional
<a name="optional-mode"></a>

CloudFront menawarkan alternatif mode validasi sertifikat klien opsional yang memvalidasi sertifikat klien yang disajikan tetapi memungkinkan akses ke klien yang tidak menunjukkan sertifikat.

### Perilaku mode opsional
<a name="optional-mode-behavior"></a>
+ Memberikan koneksi ke klien dengan sertifikat yang valid, (sertifikat tidak valid ditolak).
+ Memungkinkan koneksi ke klien tanpa sertifikat
+ Memungkinkan skenario otentikasi klien campuran melalui distribusi tunggal.

Mode opsional sangat ideal untuk migrasi bertahap ke otentikasi mTLS, mendukung klien dengan sertifikat dan klien tanpa sertifikat, atau mempertahankan kompatibilitas mundur dengan klien lama.

**catatan**  
Dalam mode opsional, Fungsi Koneksi masih dipanggil bahkan ketika klien tidak menunjukkan sertifikat. Hal ini memungkinkan Anda untuk menerapkan logika kustom seperti mencatat alamat IP klien atau menerapkan kebijakan yang berbeda berdasarkan apakah sertifikat disajikan.

### Untuk mengkonfigurasi mode opsional (Konsol)
<a name="configure-optional-mode-console"></a>

1. Di pengaturan distribusi Anda, navigasikan ke tab **Umum**, pilih **Edit**.

1. Gulir ke bagian Authentication **Mutual Authentication (mTLS) Viewer** dalam wadah **Konektivitas**.

1. Untuk **mode validasi sertifikat Klien**, pilih **Opsional**.

1. Simpan perubahan.

### Untuk mengkonfigurasi mode opsional (AWS CLI)
<a name="configure-optional-mode-cli"></a>

Contoh berikut menunjukkan cara mengkonfigurasi mode opsional:

```
"ViewerMtlsConfig": {
   "Mode": "optional",
   ...other settings
}
```

## Iklan Otoritas Sertifikat
<a name="ca-advertisement"></a>

 AdvertiseTrustStoreCaNames Bidang mengontrol apakah CloudFront mengirimkan daftar nama CA tepercaya ke klien selama jabat tangan TLS, membantu klien memilih sertifikat yang sesuai.

### Untuk mengonfigurasi iklan CA (Konsol)
<a name="configure-ca-advertisement-console"></a>

1. Di pengaturan distribusi Anda, navigasikan ke tab **Umum**, pilih **Edit**.

1. Gulir ke bagian Authentication **Mutual Authentication (mTLS) Viewer** dalam wadah **Konektivitas**.

1. Pilih atau hapus centang kotak **centang Iklankan nama CA toko kepercayaan**.

1. Pilih **Simpan perubahan**.

### Untuk mengkonfigurasi iklan CA (AWS CLI)
<a name="configure-ca-advertisement-cli"></a>

Contoh berikut menunjukkan cara mengaktifkan iklan CA:

```
"ViewerMtlsConfig": {
   "Mode": "required", // or "optional"
   "TrustStoreConfig": {
      "AdvertiseTrustStoreCaNames": true,
      ...other settings
   } 
}
```

## Penanganan kedaluwarsa sertifikat
<a name="certificate-expiration-handling"></a>

 IgnoreCertificateExpiry Properti menentukan bagaimana CloudFront menanggapi sertifikat klien yang kedaluwarsa. Secara default, CloudFront menolak sertifikat klien yang kedaluwarsa, tetapi Anda dapat mengonfigurasinya untuk menerimanya bila perlu. Ini biasanya diaktifkan untuk perangkat dengan sertifikat kedaluwarsa yang tidak dapat diperbarui dengan mudah.

### Untuk mengonfigurasi penanganan kedaluwarsa sertifikat (Konsol)
<a name="configure-expiration-console"></a>

1. Di pengaturan distribusi Anda, navigasikan ke tab **Umum**, pilih **Edit**.

1. Gulir ke bagian **Viewer mutual authentication (mTLS)** dari **Connectivity** container.

1. Pilih atau batalkan pilihan kotak centang **Abaikan tanggal kedaluwarsa sertifikat**.

1. Pilih **Simpan perubahan**.

### Untuk mengonfigurasi penanganan kedaluwarsa sertifikat (CLI AWS )
<a name="configure-expiration-cli"></a>

Contoh berikut menunjukkan cara mengabaikan kedaluwarsa sertifikat:

```
"ViewerMtlsConfig": {
  "Mode": "required", // or "optional"
  "TrustStoreConfig": {
     "IgnoreCertificateExpiry": false,
     ...other settings
  }
}
```

**catatan**  
**IgnoreCertificateExpiry**hanya berlaku untuk tanggal validitas sertifikat. Semua pemeriksaan validasi sertifikat lainnya masih berlaku (rantai kepercayaan, validasi tanda tangan).

## Langkah selanjutnya
<a name="additional-settings-next-steps"></a>

Setelah mengonfigurasi pengaturan tambahan, Anda dapat mengatur penerusan header untuk meneruskan informasi sertifikat ke asal Anda, menerapkan pencabutan sertifikat menggunakan Fungsi Koneksi dan KeyValueStore, dan mengaktifkan log koneksi untuk pemantauan. Untuk detail tentang meneruskan informasi sertifikat ke asal, lihat [Teruskan Header ke](viewer-mtls-headers.md) asal.

# Header mTLS penampil untuk kebijakan cache dan diteruskan ke asal
<a name="viewer-mtls-headers"></a>

Saat menggunakan otentikasi TLS timbal balik, CloudFront dapat mengekstrak informasi dari sertifikat klien dan meneruskannya ke asal Anda sebagai header HTTP. Ini memungkinkan server asal Anda untuk mengakses detail sertifikat tanpa menerapkan logika validasi sertifikat.

Header berikut tersedia untuk membuat perilaku cache:


| Nama header | Deskripsi | Nilai contoh | 
| --- | --- | --- | 
| CloudFront-Pemirsa Seri-Seri-Nomor | Representasi heksadesimal dari nomor seri sertifikat | 4a: 3f: 5c: 92: d1: e 8:7 b: 6c | 
| CloudFront-Viewer-Cert-Penerbit | RFC2253 representasi string dari nama terhormat penerbit (DN) | cn = Rootcamtls.com, OU = Rootca, O = MTLS, L = Seattle, ST = Washington, C = AS | 
| CloudFront-Pemirsa-Cert-Subjek | RFC2253 representasi string dari nama terhormat subjek (DN) | cn=client\$1.com, OU = klien-3, O = MTLS, ST = Washington, C = AS | 
| CloudFront-Pemirsa-Sertifikat-Hadir | Baik 1 (sekarang) atau 0 (tidak ada) yang menunjukkan apakah sertifikat tersebut ada. Nilai ini selalu 1 dalam mode Wajib. | 1 | 
| CloudFront-Pemirsa-Sert-Sha256 |  SHA256 Hash dari sertifikat klien | 01fbf94fef5569753420c349f49adbfd80af5275377816e3ab1fb371b29cb586 | 

Untuk permintaan asal, dua header tambahan disediakan, selain header di atas yang tersedia untuk perilaku cache. Karena potensi ukuran header, CloudFront-Viewer-Cert-Pem header tidak terkena fungsi tepi (Lambda @Edge atau CloudFront Functions) dan hanya diteruskan ke asal.


| Nama header | Deskripsi | Nilai contoh | 
| --- | --- | --- | 
| CloudFront-Viewer-Cert-Validitas | ISO8601 format tanggal NotBefore dan NotAfter | CloudFront-Viewer-Cert-Validitas: = 2023-09-21T 01:50:17 Z; = 2024-09-20T 01:50:17 Z NotBefore NotAfter | 
| CloudFront-Pemirsa-Sert-Pem | Format PEM yang dikodekan URL dari sertifikat daun | CloudFront-Viewer-Cert-Pem: -----MULAI% 20SERTIFIKAT ----- %0AMIIG<... dikurangi... > NmrUlw %0A ----- AKHIR%20SERTIFIKAT ----- %0A | 

## Konfigurasikan penerusan header
<a name="configure-header-forwarding"></a>

### Konsol
<a name="configure-headers-console"></a>

Dalam mode verifikasi, CloudFront secara otomatis menambahkan header CloudFront-Viewer-Cert -\$1 ke semua permintaan penampil. Untuk meneruskan header ini ke asal Anda:

1. **Dari halaman distribusi daftar utama, pilih distribusi Anda dengan mTL penampil diaktifkan dan buka tab Perilaku**

1. Pilih perilaku cache dan pilih **Edit**

1. Di bagian **Kebijakan permintaan asal**, pilih **Buat kebijakan** atau pilih kebijakan yang ada

1. Pastikan header berikut disertakan dalam kebijakan permintaan asal:
   + CloudFront-Pemirsa Seri-Seri-Nomor
   + CloudFront-Viewer-Cert-Penerbit
   + CloudFront-Pemirsa-Cert-Subjek
   + CloudFront-Pemirsa-Sertifikat-Hadir
   + Cloudfront-Viewer-Cert-Sha256
   + CloudFront-Viewer-Cert-Validitas
   + CloudFront-Pemirsa-Sert-Pem

1. Pilih **Buat** (untuk kebijakan baru) atau **Simpan perubahan** (untuk kebijakan yang ada)

1. Pilih kebijakan dalam perilaku cache Anda dan simpan perubahan

### Menggunakan AWS CLI
<a name="configure-headers-cli"></a>

Contoh berikut menunjukkan cara membuat kebijakan permintaan asal yang menyertakan header mTLS untuk mode verifikasi:

```
aws cloudfront create-origin-request-policy \
  --origin-request-policy-config '{
    "Name": "MTLSHeadersPolicy",
    "HeadersConfig": {
      "HeaderBehavior": "whitelist",
      "Headers": {
        "Quantity": 5,
        "Items": [
          "CloudFront-Viewer-Cert-Serial-Number",
          "CloudFront-Viewer-Cert-Issuer",
          "CloudFront-Viewer-Cert-Subject",
          "CloudFront-Viewer-Cert-Validity",
          "CloudFront-Viewer-Cert-Pem"
        ]
      }
    },
    "CookiesConfig": {
      "CookieBehavior": "none"
    },
    "QueryStringsConfig": {
      "QueryStringBehavior": "none"
    }
  }'
```

## Pertimbangan pemrosesan header
<a name="header-processing-considerations"></a>

Saat bekerja dengan header sertifikat, pertimbangkan praktik terbaik ini:
+ **Validasi header:** Verifikasi nilai header sertifikat di asal Anda sebagai langkah keamanan tambahan
+ **Batas ukuran header:** Header sertifikat PEM bisa besar, pastikan server asal Anda dapat menanganinya
+ **Pertimbangan cache:** Menggunakan header sertifikat di kunci cache Anda meningkatkan fragmentasi cache
+ **Permintaan lintas asal:** Jika aplikasi Anda menggunakan CORS, Anda mungkin perlu mengonfigurasinya untuk mengizinkan header sertifikat

## Langkah selanjutnya
<a name="headers-next-steps"></a>

Setelah mengonfigurasi penerusan header, Anda dapat menerapkan pemeriksaan pencabutan sertifikat menggunakan Fungsi Koneksi dan. CloudFront KeyValueStore Untuk detail tentang penerapan pemeriksaan pencabutan, lihat. [Pencabutan menggunakan Fungsi CloudFront Koneksi dan KVS](revocation-connection-function-kvs.md)

# Pencabutan menggunakan Fungsi CloudFront Koneksi dan KVS
<a name="revocation-connection-function-kvs"></a>

Anda dapat menerapkan pemeriksaan pencabutan sertifikat untuk otentikasi TLS timbal balik dengan menggabungkan CloudFront Fungsi Koneksi dengan. KeyValueStore Pendekatan ini menyediakan mekanisme pencabutan sertifikat real-time yang dapat diskalakan yang melengkapi validasi sertifikat bawaan CloudFront.

Fungsi Koneksi adalah JavaScript fungsi yang berjalan selama pembentukan koneksi TLS di lokasi CloudFront tepi dan memungkinkan Anda menerapkan logika validasi sertifikat khusus untuk otentikasi mTLS. Untuk informasi rinci tentang Fungsi Koneksi, lihat[Kaitkan Fungsi CloudFront Koneksi](connection-functions.md).

## Cara kerja pencabutan sertifikat dengan Fungsi Koneksi
<a name="how-revocation-works"></a>

CloudFrontvalidasi sertifikat standar memverifikasi rantai sertifikat, tanda tangan, dan kedaluwarsa tetapi tidak termasuk pemeriksaan pencabutan sertifikat bawaan. Dengan menggunakan Fungsi Koneksi, Anda dapat menerapkan pemeriksaan pencabutan kustom selama jabat tangan TLS.

Proses pencabutan sertifikat berfungsi sebagai berikut:

1. Simpan nomor seri sertifikat yang telah dicabut di file. CloudFront KeyValueStore

1. Ketika klien menyajikan sertifikat, Fungsi Koneksi Anda dipanggil.

1. Fungsi memeriksa nomor seri sertifikat terhadap KeyValueStore.

1. Jika nomor seri ditemukan di toko, sertifikat dicabut.

1. Fungsi Anda menolak koneksi untuk sertifikat yang dicabut.

Pendekatan ini menyediakan pemeriksaan near-real-time pencabutan di seluruh jaringan CloudFront edge global.

## Siapkan KeyValueStore untuk sertifikat yang dicabut
<a name="setup-kvs-revoked-certs"></a>

Pertama, buat a KeyValueStore untuk menyimpan nomor seri sertifikat yang dicabut:

### Untuk membuat KeyValueStore (Konsol)
<a name="create-kvs-console"></a>

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 **Key value stores**.

1. Pilih **Buat toko nilai kunci**.

1. Masukkan nama untuk penyimpanan nilai kunci Anda (misalnya, sertifikat yang dicabut).

1. (Opsional) Tambahkan deskripsi.

1. Pilih **Buat toko nilai kunci**.

### Untuk membuat KeyValueStore (AWS CLI)
<a name="create-kvs-cli"></a>

Contoh berikut menunjukkan cara membuat KeyValueStore:

```
aws cloudfront create-key-value-store \
  --name "revoked-certificates" \
  --comment "Store for revoked certificate serial numbers"
```

## Impor nomor seri sertifikat yang dicabut
<a name="import-revoked-serials"></a>

Setelah membuat KeyValueStore, Anda perlu mengimpor nomor seri sertifikat yang dicabut:

### Siapkan data pencabutan
<a name="prepare-revocation-data"></a>

Buat file JSON dengan nomor seri sertifikat yang telah dicabut:

```
{
  "data": [
    {
      "key": "ABC123DEF456",
      "value": ""
    },
    {
      "key": "789XYZ012GHI",
      "value": ""
    }
  ]
}
```

### Impor dari S3
<a name="import-from-s3"></a>

1. Unggah file JSON ke bucket S3

1. Impor file ke KeyValueStore:

   ```
   aws cloudfront create-key-value-store \
     --name "revoked-certificates" \
     --import-source '{
       "SourceType": "S3",
       "SourceARN": "arn:aws:s3:::amzn-s3-demo-bucket1/revoked-serials.json"
     }'
   ```

## Buat Fungsi Koneksi untuk pemeriksaan pencabutan
<a name="create-revocation-connection-function"></a>

Buat Fungsi Koneksi yang memeriksa nomor seri sertifikat terhadap KeyValueStore:

### Contoh kode Fungsi Koneksi
<a name="revocation-function-example"></a>

Contoh berikut menunjukkan Fungsi Koneksi yang melakukan pemeriksaan pencabutan sertifikat:

```
import cf from 'cloudfront';

async function connectionHandler(connection) {
    const kvsHandle = cf.kvs();
    
    // Get client certificate serial number
    const clientSerialNumber = connection.clientCertificate.certificates.leaf.serialNumber;
    
    // Check if the serial number exists in the KeyValueStore
    const isRevoked = await kvsHandle.exists(clientSerialNumber.replaceAll(':', ''));
    
    if (isRevoked) {
        console.log(`Certificate ${clientSerialNumber} is revoked. Denying connection.`);
        connection.logCustomData(`REVOKED:${clientSerialNumber}`);
        connection.deny();
    } else {
        console.log(`Certificate ${clientSerialNumber} is valid. Allowing connection.`);
        connection.allow();
    }
    
}
```

### Untuk membuat Fungsi Koneksi (AWS CLI)
<a name="create-revocation-function-cli"></a>

Contoh berikut menunjukkan cara membuat Fungsi Koneksi dengan KeyValueStore asosiasi:

```
aws cloudfront create-connection-function \
  --name "revocation-checker" \
  --connection-function-config '{
      "Comment": "Certificate revocation checking function",
      "Runtime": "cloudfront-js-2.0",
      "KeyValueStoreAssociations": {
          "Quantity": 1,
          "Items": [
              {
                  "KeyValueStoreARN": "arn:aws:cloudfront::123456789012:key-value-store/revoked-certificates"
              }
          ]
      }
  }' \
  --connection-function-code fileb://revocation-checker.js
```

## Kaitkan fungsi dengan distribusi Anda
<a name="associate-revocation-function"></a>

Setelah membuat dan memublikasikan Fungsi Koneksi Anda, kaitkan dengan CloudFront distribusi berkemampuan MTLS seperti yang dijelaskan di bagian. [Kaitkan Fungsi CloudFront Koneksi](connection-functions.md)

# Observabilitas menggunakan log koneksi
<a name="connection-logs"></a>

CloudFront log koneksi memberikan visibilitas terperinci ke dalam peristiwa otentikasi TLS timbal balik, memungkinkan Anda memantau validasi sertifikat, melacak upaya koneksi, dan memecahkan masalah otentikasi.

## Apa itu log koneksi?
<a name="what-are-connection-logs"></a>

Log koneksi menangkap informasi terperinci tentang jabat tangan TLS dan validasi sertifikat untuk distribusi yang mendukung TLS bersama. Tidak seperti log akses standar yang merekam informasi permintaan HTTP, log koneksi berfokus secara khusus pada fase pembentukan koneksi TLS, termasuk:
+ Status koneksi (sukses/kegagalan)
+ Detail sertifikat klien
+ Protokol TLS dan informasi sandi
+ Metrik waktu koneksi
+ Data kustom dari Fungsi Koneksi

Log ini memberikan visibilitas komprehensif ke dalam peristiwa otentikasi berbasis sertifikat, membantu Anda memantau keamanan, memecahkan masalah, dan memenuhi persyaratan kepatuhan.

## Aktifkan log koneksi
<a name="enable-connection-logs"></a>

Log koneksi hanya tersedia untuk distribusi dengan otentikasi TLS timbal balik diaktifkan. Anda dapat mengirim log koneksi ke beberapa tujuan termasuk CloudWatch Log, Amazon Data Firehose, dan Amazon S3.

### Prasyarat
<a name="connection-logs-prerequisites"></a>

Sebelum mengaktifkan log koneksi:
+ Konfigurasikan TLS timbal balik untuk distribusi Anda CloudFront 
+ Aktifkan log koneksi untuk CloudFront distribusi Anda
+ Pastikan Anda memiliki izin yang diperlukan untuk tujuan pencatatan yang Anda pilih
+ Untuk pengiriman lintas akun, konfigurasikan kebijakan IAM yang sesuai

### Untuk mengaktifkan log koneksi (Konsol)
<a name="enable-connection-logs-console"></a>

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. Dari daftar distribusi, pilih distribusi berkemampuan MTLS Anda.

1. Pilih tab **Logging**.

1. Pilih **Tambahkan**.

1. Pilih layanan untuk menerima log Anda:
   + **CloudWatch Log**
   + **Firehose**
   + **Amazon S3**

1. Untuk **Tujuan**, pilih sumber daya untuk layanan yang Anda pilih:
   + Untuk CloudWatch Log, masukkan **nama grup Log**
   + **Untuk Firehose, pilih aliran pengiriman Firehose**
   + Untuk Amazon S3, masukkan **nama Bucket** (opsional dengan awalan)

1. (Opsional) Konfigurasikan pengaturan tambahan:
   + **Pemilihan bidang:** Pilih bidang log tertentu untuk disertakan.
   + **Format keluaran:** Pilih dari JSON, Plain, w3c, Raw, atau Parket (hanya S3).
   + **Pembatas bidang:** Tentukan cara memisahkan bidang log.

1. Pilih **Save changes (Simpan perubahan)**

### Untuk mengaktifkan log koneksi (AWS CLI)
<a name="enable-connection-logs-cli"></a>

Contoh berikut menunjukkan cara mengaktifkan log koneksi menggunakan CloudWatch API:

```
# Step 1: Create a delivery source
aws logs put-delivery-source \
  --name "cf-mtls-connection-logs" \
  --resource-arn "arn:aws:cloudfront::123456789012:distribution/E1A2B3C4D5E6F7" \
  --log-type CONNECTION_LOGS

# Step 2: Create a delivery destination
aws logs put-delivery-destination \
  --name "s3-destination" \
  --delivery-destination-configuration \
  "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket1"

# Step 3: Create the delivery
aws logs create-delivery \
  --delivery-source-name "cf-mtls-connection-logs" \
  --delivery-destination-arn "arn:aws:logs:us-east-1:123456789012:delivery-destination:s3-destination"
```

**catatan**  
Saat menggunakan CloudWatch API, Anda harus menentukan Wilayah AS Timur (Virginia N.) (us-east-1) bahkan saat mengirimkan log ke wilayah lain.

## Bidang log koneksi
<a name="connection-log-fields"></a>

Log koneksi mencakup informasi terperinci tentang setiap upaya koneksi TLS:


| Bidang | Deskripsi | Contoh | 
| --- | --- | --- | 
| eventTimestamp | Stempel waktu ISO 8601 saat koneksi dibuat atau gagal | 1731620046814 | 
| connectionId | Pengidentifikasi unik untuk koneksi TLS | oLHiEKbQSn8lkvJfA3D4gFowK3\$1iZ0g4i5nMUjE1Akod8TuAzn5nzg== | 
| connectionStatus |  Status upaya koneksi mTLS.  | Success atau Failed | 
| clientIp | Alamat IP dari klien penghubung | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 | 
| clientPort | Port yang digunakan oleh klien | 12137 | 
| serverIp | Alamat IP dari server CloudFront tepi | 99.84.71.136 | 
| distributionId | CloudFront ID distribusi | E2DX1SLDPK0123 | 
| distributionTenantId | CloudFront ID penyewa distribusi (bila berlaku) | dt\$12te1Ura9X3R2iCGNjW123 | 
| tlsProtocol | Versi protokol TLS digunakan | TLSv1.3 | 
| tlsCipher | TLS cipher suite digunakan untuk koneksi | TLS\$1AES\$1128\$1GCM\$1SHA256 | 
| tlsHandshakeDuration | Durasi jabat tangan TLS dalam milidetik | 153 | 
| tlsSni | Nilai Indikasi Nama Server dari jabat tangan TLS | d111111abcdef8.cloudfront.net | 
| clientLeafCertSerialNumber | Nomor seri sertifikat klien | 00:b1:43:ed:93:d2:d8:f3:9d | 
| clientLeafCertSubject | Bidang subjek sertifikat klien | C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=client.test.mtls.net | 
| clientLeafCertIssuer | Bidang penerbit sertifikat klien | C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=test.mtls.net | 
| clientLeafCertValidity | Masa berlaku sertifikat klien | NotBefore=2025-06-05T23:28:21Z;NotAfter=2125-05-12T23:28:21Z | 
| connectionLogCustomData | Data kustom ditambahkan melalui Fungsi Koneksi | REVOKED:00:b1:43:ed:93:d2:d8:f3:9d | 

## Kode kesalahan koneksi
<a name="connection-error-codes"></a>

```
Failed:ClientCertMaxChainDepthExceeded
Failed:ClientCertMaxSizeExceeded
Failed:ClientCertUntrusted
Failed:ClientCertNotYetValid
Failed:ClientCertExpired
Failed:ClientCertTypeUnsupported
Failed:ClientCertInvalid
Failed:ClientCertIntentInvalid
Failed:ClientCertRejected
Failed:ClientCertMissing
Failed:TcpError
Failed:TcpTimeout
Failed:ConnectionFunctionError
Failed:ConnectionFunctionDenied
Failed:Internal
Failed:UnmappedConnectionError
```

Ketika koneksi gagal, CloudFront mencatat kode alasan tertentu:


| Kode | Deskripsi | 
| --- | --- | 
| ClientCertMaxChainDepthExceeded | Kedalaman rantai sertifikat maksimum terlampaui | 
| ClientCertMaxSizeExceeded | Ukuran sertifikat maksimum terlampaui | 
| ClientCertUntrusted | Sertifikat tidak dipercaya | 
| ClientCertNotYetValid | Sertifikat belum valid | 
| ClientCertExpired | Sertifikat kedaluwarsa | 
| ClientCertTypeUnsupported | Jenis sertifikat tidak didukung | 
| ClientCertInvalid | Sertifikat tidak valid | 
| ClientCertIntentInvalid | Maksud sertifikat tidak valid | 
| ClientCertRejected | Sertifikat ditolak oleh validasi kustom | 
| ClientCertMissing | Sertifikat tidak ada | 
| TcpError |  Terjadi kesalahan saat mencoba membuat koneksi  | 
| TcpTimeout |  Koneksi tidak dapat dibuat dalam periode batas waktu  | 
| ConnectionFunctionError |  Pengecualian yang tidak tertangkap dilemparkan selama eksekusi Fungsi Koneksi  | 
| Internal |  Terjadi kesalahan layanan internal  | 
| UnmappedConnectionError |  Terjadi kesalahan yang tidak termasuk dalam kategori lainnya  | 