

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

# Penandatanganan metadata repositori di AL2023
<a name="repo-metadata-signing"></a>

Dimulai dengan rilis`2023.11.20260406`, repositori AL2023 menyertakan tanda tangan kriptografi untuk metadata repositori. Setiap file repositori disertai dengan `repomd.xml` file tanda tangan GPG terpisah (`repomd.xml.asc`) yang dapat Anda gunakan untuk memverifikasi keaslian dan integritas metadata repositori sebelum paket diunduh.

Penandatanganan ini merupakan tambahan dari penandatanganan paket RPM yang ada (`gpgcheck`), yang memverifikasi paket individual. Penandatanganan metadata repositori memverifikasi metadata yang menjelaskan isi repositori, seperti daftar paket yang tersedia dan checksumnya.

Penandatanganan paket melindungi setiap paket. Indeks metadata yang mencantumkan paket-paket tersebut dipercaya hanya berdasarkan TLS dan checksum. Tanpa tanda tangan pada indeks, cermin yang dikompromikan atau jalur transportasi dapat menyajikan metadata yang dimodifikasi yang menyembunyikan atau memblokir pembaruan keamanan. Penandatanganan metadata repositori menutup celah ini dan tidak bergantung pada cermin atau kepercayaan transportasi.

## Cara kerja penandatanganan metadata repositori
<a name="repo-metadata-signing-overview"></a>

Ketika repositori AL2023 diterbitkan, `repomd.xml` metadata repositori () ditandatangani menggunakan kunci KMS.AWS Tanda tangan terpisah (`repomd.xml.asc`) yang dihasilkan ditempatkan di samping metadata di repositori.

Saat Anda mengaktifkan `repo_gpgcheck` konfigurasi repositori Anda, DNF verifikasi `repomd.xml.asc` tanda tangan terhadap kunci publik GPG sebelum menggunakan metadata repositori. Jika verifikasi gagal, DNF tolak metadata dan tidak menjalankan operasi paket dari repositori itu.

Pertama kali DNF memverifikasi metadata repositori, ini meminta Anda untuk mengimpor kunci penandatanganan repositori itu ke keyring per-repositori. Prompt ini default ke. `No` Jika Anda menolaknya, DNF lewati repositori. Untuk informasi selengkapnya`repo_gpgcheck`, lihat [Referensi DNF Konfigurasi](https://dnf.readthedocs.io/en/latest/conf_ref.html).

Ini adalah kunci yang sama yang sudah digunakan untuk verifikasi paket, tetapi DNF menyimpannya dalam keyring terpisah untuk pemeriksaan metadata. Anda diminta untuk mengonfirmasinya meskipun kuncinya sudah ada di disk. Ini adalah DNF perilaku yang diharapkan.

Repositori AL2023 berikut menyertakan metadata yang ditandatangani:
+ Repositori inti () `amazonlinux`
+ Repositori Kernel Livepatch () `kernel-livepatch`
+ Repositori NVIDIA () `amazonlinux-nvidia`
+ Paket Tambahan untuk repositori Amazon Linux () `amazonlinux-spal`

## `Perbedaan antara gpgcheck dan repo_gpgcheck`
<a name="repo-metadata-signing-gpgcheck-vs-repo-gpgcheck"></a>


| Pengaturan | Apa yang diverifikasi | Standar di AL2023 | 
| --- | --- | --- | 
| gpgcheck=1 | Memverifikasi tanda tangan GPG dari masing-masing paket RPM sebelum instalasi. | Diaktifkan | 
| repo\_gpgcheck=1 | Memverifikasi tanda tangan GPG dari metadata repositori () repomd.xml sebelum menggunakan repositori. | Dinonaktifkan secara default | 

Kami menyarankan Anda mengaktifkan keduanya `gpgcheck` dan`repo_gpgcheck`, setelah Anda mengonfirmasi bahwa otomatisasi Anda sudah siap. Ini memverifikasi metadata repositori dan paket individual sebelum digunakan. Sebelum Anda mengaktifkan`repo_gpgcheck`, lihat[Gunakan verifikasi metadata repositori dalam otomatisasi](#repo-metadata-signing-automation).

## Mengaktifkan verifikasi metadata repositori
<a name="repo-metadata-signing-enable"></a>

Anda dapat mengaktifkan verifikasi metadata repositori untuk masing-masing repositori dengan memperbarui file konfigurasi mereka.

**penting**  
Verifikasi tanda tangan metadata repositori tidak diaktifkan secara default. Itu tetap dinonaktifkan sampai Anda mengubahnya. Sebelum Anda mengaktifkannya, konfirmasikan bahwa setiap DNF perintah tanpa pengawasan dalam otomatisasi Anda melewati `-y` opsi. Untuk informasi selengkapnya, lihat [Gunakan verifikasi metadata repositori dalam otomatisasi](#repo-metadata-signing-automation).

### Aktifkan untuk repositori tertentu
<a name="repo-metadata-signing-enable-per-repo"></a>

File konfigurasi repositori AL2023 diatur secara default. `/etc/yum.repos.d/` `repo_gpgcheck=0` Untuk mengaktifkan verifikasi metadata repositori, ubah nilai ini menjadi `1` dalam konfigurasi repositori. Misalnya, untuk mengaktifkannya untuk repositori inti:

```
[amazonlinux]
name=Amazon Linux 2023 repository
...
gpgcheck=1
repo_gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-linux-2023
```

### Nonaktifkan verifikasi metadata repositori
<a name="repo-metadata-signing-disable"></a>

Untuk kembali ke perilaku sebelumnya, atur `repo_gpgcheck=0` dalam file konfigurasi repositori. Penyegaran metadata berikutnya berhasil tanpa verifikasi.

```
[ec2-user ~]$ sudo sed -i 's/^repo_gpgcheck=1/repo_gpgcheck=0/' /etc/yum.repos.d/amazonlinux.repo
[ec2-user ~]$ sudo dnf -y makecache
```

## Memverifikasi bahwa penandatanganan metadata repositori berfungsi
<a name="repo-metadata-signing-verify"></a>

Setelah mengaktifkan`repo_gpgcheck=1`, Anda dapat memverifikasi bahwa verifikasi metadata berfungsi dengan membersihkan DNF cache dan menyegarkan metadata:

```
[ec2-user ~]$ sudo dnf clean metadata
[ec2-user ~]$ sudo dnf makecache
```

Pertama kali DNF memverifikasi metadata untuk repositori, ini meminta Anda untuk mengimpor kunci penandatanganan repositori itu. Masukkan `y` untuk mengonfirmasi. Setelah kunci diimpor, DNF buat cache metadata tanpa kesalahan. Anda akan melihat output yang mirip dengan berikut ini:

```
Amazon Linux 2023 repository                    1.7 MB/s | 1.8 kB     00:00
Importing GPG key 0xD832C631:
 Userid     : "Amazon Linux <amazon-linux@amazon.com>"
 Fingerprint: B21C 50FA 44A9 9720 EAA7 2F7F E951 904A D832 C631
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-linux-2023
Is this ok [y/N]: y
Amazon Linux 2023 repository                      18 MB/s |  55 MB     00:03
Metadata cache created.
```

Prompt impor default ke. `No` Jika Anda menolaknya, DNF lewati repositori dan laporan `Ignoring repositories` dalam output. Jika verifikasi gagal, DNF laporkan kesalahan tanda tangan GPG dan tidak membuat cache.

Untuk lari tanpa pengawasan, lihat[Gunakan verifikasi metadata repositori dalam otomatisasi](#repo-metadata-signing-automation).

## Gunakan verifikasi metadata repositori dalam otomatisasi
<a name="repo-metadata-signing-automation"></a>

**catatan**  
Prompt impor kunci default ke. `No` Proses tanpa pengawasan DNF tidak dapat menjawab prompt, sehingga menolak impor dan melewatkan repositori. Karena AL2023 `skip_if_unavailable=True` disetel, perintah masih keluar dengan status. `0` Akibatnya, otomatisasi melaporkan keberhasilan sementara host tidak menerima paket atau pembaruan. Tanda ini ada `Ignoring repositories` di output.

Untuk mencegah hal ini, teruskan `-y` opsi ke setiap DNF perintah tanpa pengawasan yang menyegarkan metadata, termasuk pekerjaan integrasi berkelanjutan, build image dan container, manajemen konfigurasi`cloud-init`, dan pekerjaan cron.

```
[ec2-user ~]$ sudo dnf -y makecache
[ec2-user ~]$ sudo dnf -y check-update
[ec2-user ~]$ sudo dnf -y upgrade
```

Perintah yang menyegarkan metadata perlu. `-y` Perintah yang hanya membaca cache lokal atau database RPM lokal, atau yang menggunakan `-C` opsi, tidak menyegarkan metadata dan tidak meminta. Untuk daftar lengkapnya, lihat [Perintah yang menyegarkan metadata repositori](#repo-metadata-signing-command-reference).

Simpan `-y` otomatisasi Anda secara permanen. Kuncinya diimpor sekali per URL repositori, bukan sekali per host. AL2023 membangun setiap URL repositori dari versi terkunci `releasever` () dan AWS Wilayah, sehingga peningkatan versi OS atau perubahan Wilayah diselesaikan ke URL baru dan meminta lagi. Kunci penandatanganan tidak berubah; hanya lokasi keyring yang melakukannya. Jangan melakukan pre-seed atau pre-bake kunci sebagai perbaikan satu kali, karena upgrade versi berikutnya atau Region menggunakan keyring baru dan meminta lagi.

Menjalankan `dnf clean all` menghapus metadata cache tetapi tidak menghapus kunci yang diimpor dalam versi yang sama. Itu tidak memicu kembali prompt.

Build gambar kontainer membutuhkan perhatian khusus. Setiap `RUN dnf` langkah dalam pembuatan gambar tidak dijaga, dan keyring adalah bagian dari sistem file gambar, sehingga mulai kosong di setiap gambar baru. Prompt muncul selama pembuatan terlepas dari apa yang telah diimpor oleh host yang sedang berjalan Anda. Lewati `-y` build gambar.

**catatan**  
Jika Anda mengemudi DNF sebagai pustaka Python (`import dnf`), prompt tidak berlaku. Pustaka mengimpor kunci tanpa meminta, jadi metadata dimuat tanpa. `-y`

## Perintah yang menyegarkan metadata repositori
<a name="repo-metadata-signing-command-reference"></a>

Perintah apa pun yang mengunduh atau menyegarkan metadata repositori memicu impor kunci dan prompt. Perintah yang hanya membaca cache lokal atau database RPM lokal tidak. Opsi mengubah hasilnya: misalnya, `-v` membuat `repolist` fetch, `--installed` keep `list` dan `info` local, `-C` atau `--cacheonly` menghindari pengambilan, dan `--refresh` memaksanya. Jika ragu, lulus`-y`.


| Perintah | Menyegarkan metadata | 
| --- | --- | 
| dnf makecache | Ya | 
| dnf check-update | Ya | 
| dnf upgrade, dnf update | Ya | 
| dnf upgrade-minimal | Ya | 
| dnf distro-sync | Ya | 
| dnf install | Ya | 
| dnf reinstall | Ya | 
| dnf downgrade | Ya | 
| dnf autoremove | Ya | 
| dnf swap | Ya | 
| dnf list(default atau--available) | Ya | 
| dnf info(default atau--available) | Ya | 
| dnf search | Ya | 
| dnf provides | Ya | 
| dnf repoquery | Ya | 
| dnf repoinfo | Ya | 
| dnf deplist | Ya | 
| dnf repository-packages | Ya | 
| dnf updateinfo | Ya | 
| dnf group(daftar, info, instal) | Ya | 
| dnf module(daftar, info) | Ya | 
| dnf shell(jika subperintahnya diambil) | Ya | 
| dnf builddep | Ya | 
| dnf changelog | Ya | 
| dnf debuginfo-install | Ya | 
| dnf download | Ya | 
| dnf repoclosure | Ya | 
| dnf repograph | Ya | 
| dnf reposync | Ya | 
| dnf debug-dump | Ya | 
| dnf repolist -v(bertele-tele) | Ya | 
| dnf repolist(polos atau--all) | Tidak | 
| dnf list --installed, dnf info --installed | Tidak | 
| dnf remove, dnf erase | Tidak | 
| dnf mark | Tidak | 
| dnf history | Tidak | 
| dnf check | Tidak | 
| dnf clean | Tidak | 
| dnf config-manager | Tidak | 
| dnf needs-restarting | Tidak | 
| dnf alias | Tidak | 
| dnf help | Tidak | 
| dnf repomanage | Tidak | 
| dnf repodiff | Tidak (kesalahan kecuali dua repositori diberi nama) | 
| dnf copr | Tidak | 
| dnf groups-manager | Tidak | 
| dnf playground | Tidak | 
| dnf debug-restore | Tidak (bertindak pada tempat pembuangan yang disimpan) | 
| Setiap perintah dengan -C atau --cacheonly | Tidak | 

Repositori yang dilewati dengan cara ini dilaporkan seperti `Ignoring repositories` pada output, tetapi sebagian besar perintah ini masih keluar dengan status karena `0` AL2023 disetel. `skip_if_unavailable=True` Jangan mengandalkan kode keluar saja. Lulus `-y` sehingga impor kunci berhasil.

## Mendeteksi repositori yang dilewati
<a name="repo-metadata-signing-detect"></a>

Kode keluar saja tidak mengkonfirmasi bahwa verifikasi berhasil. Repositori yang dilewati keluar`0`, dan kunci penandatanganan tetap ada setelah proses apa pun mengimpornya, sehingga pemeriksaan selanjutnya dapat lolos sementara langkah sebelumnya masih gagal. Gunakan dua pemeriksaan ini sebagai gantinya:
+ Audit otomatisasi Anda. Konfirmasikan bahwa setiap perintah pengambilan metadata lewatDNF. `-y` Inilah yang membuat Anda bekerja pada URL repositori baru berikutnya.
+ Periksa output untuk`Ignoring repositories`. Perintah berikut gagal ketika repositori dilewati, yang dapat Anda gunakan untuk gagal dalam pipeline:

```
[ec2-user ~]$ sudo dnf makecache 2>&1 | grep -q "Ignoring repositories" && { echo "repo skipped"; exit 1; }
```

## Versi yang disematkan
<a name="repo-metadata-signing-pinned"></a>

Jika Anda menyematkan `releasever` (dengan `--releasever``/etc/dnf/vars/releasever`,, atau`dnf.conf`) ke versi yang dirilis sebelumnya`2023.11.20260406`, versi tersebut tidak memiliki file tanda tangan, dan `repo_gpgcheck=1` gagal menyegarkan repositori:

```
Error: Failed to download metadata for repo 'amazonlinux':
GPG verification is enabled, but GPG signature is not available...
```

Versi yang disematkan tidak menerima pembaruan di luar versi itu. Jika Anda menyematkan, menyematkan ke versi `2023.11.20260406` atau yang lebih baru, atau mengatur`repo_gpgcheck=0`.

## Kunci publik GPG untuk repositori AL2023
<a name="repo-metadata-signing-gpg-keys"></a>

Kunci publik GPG yang digunakan untuk verifikasi metadata repositori diinstal oleh RPM konfigurasi repositori yang sesuai. `/etc/pki/rpm-gpg/` Tabel berikut mencantumkan kunci publik yang digunakan oleh setiap repositori.


| Repositori | Kunci penandatanganan Package | Kunci penandatanganan repodata | Didistribusikan di | 
| --- | --- | --- | --- | 
| Inti (amazonlinux) | RPM-GPG-KEY-amazon-linux-2023 | RPM-GPG-KEY-amazon-linux-2023 | system-release | 
| Kernel Livepatch () kernel-livepatch | RPM-GPG-KEY-amazon-linux-2023 | RPM-GPG-KEY-amazon-linux-2023 | system-release | 
| NVIDIA (amazonlinux-nvidia) | RPM-GPG-KEY-NVIDIA-D42D0685 | RPM-GPG-KEY-amazon-linux-2023-nvidia | nvidia-release | 
| SPAL () amazonlinux-spal | RPM-GPG-KEY-amazonlinux-spal | RPM-GPG-KEY-amazonlinux-spal | spal-release | 

Tombol-tombol ini secara otomatis diinstal ketika Anda menginstal konfigurasi repositori yang sesuai RPM.