

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AL2023 でのリポジトリメタデータ署名
<a name="repo-metadata-signing"></a>

リリース 以降`2023.11.20260406`、AL2023 リポジトリにはリポジトリメタデータの暗号化署名が含まれています。各リポジトリの `repomd.xml` ファイルには、パッケージがダウンロードされる前にリポジトリメタデータの信頼性と整合性を検証するために使用できる、デタッチされた GPG 署名ファイル (`repomd.xml.asc`) が付属しています。

この署名は、個々のパッケージを検証する既存の RPM パッケージ署名 (`gpgcheck`) に追加されます。リポジトリメタデータ署名は、使用可能なパッケージのリストやチェックサムなど、リポジトリの内容を説明するメタデータを検証します。

パッケージ署名は、各パッケージを保護します。これらのパッケージを一覧表示するメタデータインデックスは、TLS とチェックサムのみに基づいて信頼されます。インデックスの署名がない場合、侵害されたミラーまたはトランスポートパスは、セキュリティ更新を非表示またはブロックする変更されたメタデータを提供する可能性があります。リポジトリメタデータ署名は、このギャップを埋め、ミラーやトランスポートの信頼に依存しません。

## リポジトリメタデータ署名の仕組み
<a name="repo-metadata-signing-overview"></a>

AL2023 リポジトリが公開されると、リポジトリメタデータ (`repomd.xml`) は KMS AWSキーを使用して署名されます。デタッチされた署名 (`repomd.xml.asc`) は、リポジトリ内のメタデータと一緒に配置されます。

リポジトリ設定`repo_gpgcheck`で を有効にすると、 DNF はリポジトリメタデータを使用する前に、`repomd.xml.asc`署名を GPG パブリックキーと照合します。検証に失敗した場合、 はメタデータDNFを拒否し、そのリポジトリからパッケージオペレーションを実行しません。

リポジトリのメタデータを初めてDNF検証すると、そのリポジトリの署名キーをリポジトリごとのキーリングにインポートするように求められます。このプロンプトのデフォルトは です`No`。拒否すると、 はリポジトリをDNFスキップします。の詳細については`repo_gpgcheck`、[DNF「 設定リファレンス](https://dnf.readthedocs.io/en/latest/conf_ref.html)」を参照してください。

これはパッケージの検証に既に使用されているのと同じキーですが、メタデータチェック用に別のキーリングにDNF保存します。キーがすでにディスクにある場合でも、確認を求められます。これは想定されるDNF動作です。

次の AL2023 リポジトリには、署名付きメタデータが含まれています。
+ コアリポジトリ (`amazonlinux`)
+ カーネル Livepatch リポジトリ (`kernel-livepatch`)
+ NVIDIA リポジトリ (`amazonlinux-nvidia`)
+ Amazon Linux リポジトリの補足パッケージ (`amazonlinux-spal`)

## `gpgcheck` と の違い `repo_gpgcheck`
<a name="repo-metadata-signing-gpgcheck-vs-repo-gpgcheck"></a>


| 設定 | 検証内容 | AL2023 のデフォルト | 
| --- | --- | --- | 
| gpgcheck=1 | インストール前に個々の RPM パッケージの GPG 署名を検証します。 | 有効 | 
| repo\_gpgcheck=1 | リポジトリを使用する前に、リポジトリメタデータ (repomd.xml) の GPG 署名を検証します。 | デフォルトでは無効になっています。 | 

オートメーションの準備が整ったことを確認してから`repo_gpgcheck`、 `gpgcheck`と の両方を有効にすることをお勧めします。これにより、リポジトリメタデータと個々のパッケージの両方が使用前に検証されます。を有効にする前に`repo_gpgcheck`、「」を参照してください[オートメーションでリポジトリメタデータ検証を使用する](#repo-metadata-signing-automation)。

## リポジトリメタデータ検証の有効化
<a name="repo-metadata-signing-enable"></a>

設定ファイルを更新することで、個々のリポジトリのリポジトリメタデータ検証を有効にできます。

**重要**  
リポジトリメタデータ署名の検証は、デフォルトでは有効になっていません。変更するまで無効のままになります。有効にする前に、オートメーションのすべての無人DNFコマンドが `-y`オプションに合格していることを確認します。詳細については、「[オートメーションでリポジトリメタデータ検証を使用する](#repo-metadata-signing-automation)」を参照してください。

### 特定のリポジトリに対して を有効にする
<a name="repo-metadata-signing-enable-per-repo"></a>

の AL2023 リポジトリ設定ファイルは`repo_gpgcheck=0`デフォルトで`/etc/yum.repos.d/`設定されています。リポジトリメタデータの検証を有効にするには、リポジトリ設定`1`でこの値を に変更します。たとえば、コアリポジトリに対して有効にするには:

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

### リポジトリメタデータの検証を無効にする
<a name="repo-metadata-signing-disable"></a>

前の動作に戻るには、リポジトリ設定ファイル`repo_gpgcheck=0`で を設定します。次のメタデータの更新は検証なしで成功します。

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

## リポジトリメタデータ署名が機能していることの確認
<a name="repo-metadata-signing-verify"></a>

を有効にすると`repo_gpgcheck=1`、DNFキャッシュをクリアしてメタデータを更新することで、メタデータの検証が機能していることを確認できます。

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

リポジトリのメタデータを初めてDNF検証すると、そのリポジトリの署名キーをインポートするように求められます。`y` を入力して確定します。キーがインポートされると、 はエラーなしでメタデータキャッシュDNFを作成します。以下のような出力結果が表示されるはずです。

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

インポートプロンプトのデフォルトは です`No`。拒否すると、 はリポジトリをDNFスキップし、出力`Ignoring repositories`でレポートします。検証に失敗した場合、 は GPG 署名エラーDNFを報告し、キャッシュを作成しません。

無人実行については、「」を参照してください[オートメーションでリポジトリメタデータ検証を使用する](#repo-metadata-signing-automation)。

## オートメーションでリポジトリメタデータ検証を使用する
<a name="repo-metadata-signing-automation"></a>

**注記**  
キーインポートプロンプトのデフォルトは です`No`。自動DNF実行ではプロンプトに応答できないため、インポートは拒否され、リポジトリはスキップされます。AL2023 は を設定するため`skip_if_unavailable=True`、コマンドは引き続きステータス で終了します`0`。その結果、オートメーションはホストがパッケージや更新を受信しない間に成功を報告します。この符号は出力`Ignoring repositories`にあります。

これを防ぐには、継続的な統合ジョブ、イメージとコンテナのビルド、、`cloud-init`設定管理、cron ジョブなど、メタデータを更新するすべての無人DNFコマンドに `-y`オプションを渡します。

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

メタデータを更新するコマンドには が必要です`-y`。ローカルキャッシュまたはローカル RPM データベースのみを読み取るコマンド、または `-C`オプションを使用するコマンドは、メタデータを更新せず、プロンプトを表示しません。利用できるタイムゾーンの一覧については、「[リポジトリメタデータを更新するコマンド](#repo-metadata-signing-command-reference)」を参照してください。

オートメーションを永続的`-y`に保持します。キーは、ホストごとに 1 回ではなく、リポジトリ URL ごとに 1 回インポートされます。AL2023 は、ロックされたバージョン (`releasever`) とAWSリージョンから各リポジトリ URL を構築するため、OS バージョンのアップグレードまたはリージョンの変更は新しい URL に解決され、再度プロンプトが表示されます。署名キーは変更されません。キーリングの場所のみが変更されます。次のバージョンアップグレードまたはリージョンでは新しいキーリングが使用され、再度プロンプトが表示されるため、キーを 1 回限りの修正として事前シードまたは事前ベイクしないでください。

を実行するとキャッシュされたメタデータは`dnf clean all`クリアされますが、同じバージョン内でインポートされたキーは削除されません。プロンプトは再トリガーされません。

コンテナイメージビルドには特に注意が必要です。イメージビルドのすべての`RUN dnf`ステップは無人であり、キーリングはイメージファイルシステムの一部であるため、すべての新しいイメージで空から始まります。実行中のホストがすでにインポートした内容に関係なく、ビルド中にプロンプトが表示されます。イメージビルド`-y`を渡します。

**注記**  
Python ライブラリ (`import dnf`) DNFとしてドライブする場合、プロンプトは適用されません。ライブラリはプロンプトを表示せずにキーをインポートするため、メタデータは なしでロードされます`-y`。

## リポジトリメタデータを更新するコマンド
<a name="repo-metadata-signing-command-reference"></a>

リポジトリメタデータをダウンロードまたは更新するコマンドは、キーのインポートとプロンプトをトリガーします。ローカルキャッシュまたはローカル RPM データベースのみを読み取るコマンドは読み取りません。オプションは結果を変更します。たとえば、 `repolist` `-v`はフェッチ、 `--installed` `list`と`info`ローカルを保持、 `-C` はフェッチ`--cacheonly`を回避し、`--refresh`強制します。疑わしい場合は、 を渡します`-y`。


| コマンド | メタデータの更新 | 
| --- | --- | 
| dnf makecache | はい  | 
| dnf check-update | はい | 
| dnf upgrade, dnf update | はい | 
| dnf upgrade-minimal | はい | 
| dnf distro-sync | はい | 
| dnf install | はい | 
| dnf reinstall | はい | 
| dnf downgrade | はい | 
| dnf autoremove | はい | 
| dnf swap | はい | 
| dnf list (デフォルトは または --available) | はい | 
| dnf info (デフォルトは または --available) | はい  | 
| dnf search | はい | 
| dnf provides | はい | 
| dnf repoquery | はい | 
| dnf repoinfo | はい | 
| dnf deplist | はい | 
| dnf repository-packages | はい | 
| dnf updateinfo | はい | 
| dnf group (リスト、情報、インストール) | はい | 
| dnf module (リスト、情報) | はい | 
| dnf shell (サブコマンドがフェッチする場合) | はい  | 
| dnf builddep | はい | 
| dnf changelog | はい | 
| dnf debuginfo-install | はい | 
| dnf download | はい | 
| dnf repoclosure | はい | 
| dnf repograph | はい | 
| dnf reposync | はい | 
| dnf debug-dump | はい | 
| dnf repolist -v (詳細) | はい | 
| dnf repolist (プレーンまたは --all) | いいえ | 
| dnf list --installed, dnf info --installed | いいえ | 
| dnf remove, dnf erase | いいえ | 
| dnf mark | いいえ | 
| dnf history | いいえ | 
| dnf check | いいえ | 
| dnf clean | いいえ | 
| dnf config-manager | いいえ | 
| dnf needs-restarting | いいえ | 
| dnf alias | いいえ | 
| dnf help | いいえ | 
| dnf repomanage | いいえ | 
| dnf repodiff | いいえ (2 つのリポジトリに名前が付けられていない限りエラー) | 
| dnf copr | いいえ | 
| dnf groups-manager | いいえ | 
| dnf playground | いいえ | 
| dnf debug-restore | いいえ (保存されたダンプで動作) | 
| -C または を使用するコマンド --cacheonly | いいえ | 

この方法でスキップされたリポジトリは出力`Ignoring repositories`で として報告されますが、AL2023 が を設定する`0`ため、これらのコマンドのほとんどは引き続き ステータスで終了します`skip_if_unavailable=True`。終了コードだけに依存しないでください。キーのインポートが成功`-y`するように を渡します。

## スキップされたリポジトリを検出する
<a name="repo-metadata-signing-detect"></a>

終了コードだけでは、検証が成功したことは確認されません。スキップされたリポジトリは を終了し`0`、任意の実行がインポートしても署名キーは保持されるため、前のステップが失敗しても、後のチェックに合格する可能性があります。代わりに、次の 2 つのチェックを使用します。
+ オートメーションを監査します。すべてのメタデータ取得DNFコマンドが を渡すことを確認します`-y`。これにより、次の新しいリポジトリ URL で作業を続けることができます。
+ の出力を確認します`Ignoring repositories`。次のコマンドは、リポジトリがスキップされると失敗します。このコマンドを使用してパイプラインを失敗させることができます。

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

## 固定バージョン
<a name="repo-metadata-signing-pinned"></a>

(`--releasever`、、`/etc/dnf/vars/releasever`または `releasever`を使用して`dnf.conf`) より前にリリースされたバージョンにピン留めすると`2023.11.20260406`、そのバージョンには署名ファイルがなく、リポジトリの更新に`repo_gpgcheck=1`失敗します。

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

固定バージョンは、そのバージョン以降の更新を受信しません。ピン留めする場合は、 をバージョン `2023.11.20260406` 以降にピン留めするか、 を設定します`repo_gpgcheck=0`。

## AL2023 リポジトリの GPG パブリックキー
<a name="repo-metadata-signing-gpg-keys"></a>

リポジトリメタデータの検証に使用される GPG パブリックキーは、対応するリポジトリ設定 RPMsにインストールされます`/etc/pki/rpm-gpg/`。次の表に、各リポジトリで使用されるパブリックキーを示します。


| Repository | パッケージ署名キー | リポジトリデータ署名キー | で配布 | 
| --- | --- | --- | --- | 
| コア (amazonlinux) | RPM-GPG-KEY-amazon-linux-2023 | RPM-GPG-KEY-amazon-linux-2023 | system-release | 
| カーネル 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 | 

これらのキーは、対応するリポジトリ設定 RPM をインストールすると自動的にインストールされます。