みなさんこんにちは。ネコが好きなマネージドサービス部の塩野です。
個人的に使っている環境でNew Relic infrastructure agentのアップデートに失敗した時のお話になります。
概要
apt updateした時にapt-keyのエラーでアップデートできなかったので、その際に調べたことをまとめました。
事象が発生した環境
ホストOS:Ubuntu 22.04 LTS
Agent バージョン:1.50.0
※状況的には今回のケースはエージェントバージョンは事象とは無関係と推察
※事象はUbuntuで確認していますが、debianでも同様の事象が発生する可能性はあります
エラーメッセージ
W: https://download.newrelic.com/infrastructure_agent/linux/apt/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
事象の背景
今回の事象はNew Relicのエージェントがというよりは、Linuxのパッケージ管理システムにセキュリティ的な課題があったため、たまたまそれにヒットしてしまったという結論になります。詳細は下記の記事に記載されていますが、要点だけかいつまんで説明させていただくと、以下のようなことが言えます。
- apt-keyはシステム上のリポジトリ鍵を管理するコマンド
- apt-keyを使ってパッケージの正当性を確認する場合、本来のレポジトリ以外の場所からダウンロードしていないこと以外は確認できない
- apt-keyで追加した鍵は単一ファイル(/etc/apt/trusted.gpg)に保存されるため、リスクの異なる複数のレポジトリの鍵が同じ権限で管理される
基本的にはリポジトリサーバが正しく運用されていることが大前提となります。ですが、あまりよくないレポジトリの運用がなされている場合、apt-keyの運用だとその影響はシステム全体に波及してしまう恐れがあります。これをGPGに移行することで信頼する鍵の範囲を限定でき、鍵の影響を最小限に抑えられるということになります。
対処方法
設定変更手順
1.下記コマンドを実行し、現在のNew Relic GPG鍵をエクスポートします。
※私が使用している環境では、New Relic公開鍵IDは「8ECCE87C」でした。
sudo apt-key export 8ECCE87C | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/newrelic.gpg
2.New Relicのインフラストラクチャモニタリングエージェント用の
aptリポジトリの設定
2-1.ファイルを編集モードで開きます
sudo vi /etc/apt/sources.list.d/newrelic-infra.list
2-2.次にファイルの中身を下記に書き換えます
deb [signed-by=/etc/apt/trusted.gpg.d/newrelic.gpg] https://download.newrelic.com/infrastructure_agent/linux/apt jammy main
3.パッケージを更新します
sudo apt update
他のパッケージの場合は?
他のパッケージで同様の事象が発生した場合、1のコマンドで使用しているNew RelicのGPG鍵(apt-key export 8ECCE87C コマンドの 8ECCE87C の部分)を使用することができません。 具体的な方法は2つありまして、一つは現状のキーからGPG鍵を入手する方法、もう一つがパッケージの公式サイトで公開されている鍵情報を使用する方法になります。
現状のキーからGPG鍵を入手する方法
以下のコマンドを使用すると、現在登録されている鍵情報が表示されます。
sudo apt-key list
下記がコマンドの出力結果となりますが、Ubuntu 16.10以降apt-key listコマンドの出力に直接鍵情報の出力はされなくなったものの、 鍵のフィンガープリントが出力されておりこのフィンガープリントの最後の8文字が鍵IDにあたる文字列になります。
t root 1733 3月 27 2021 ubuntu-keyring-2018-archive.gpg masa@k8smaster:~$ sudo apt-key list Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). /etc/apt/trusted.gpg -------------------- pub rsa4096 2016-10-26 [SCEA] A758 B3FB CD43 BE8D 123A 3476 BB29 EE03 8ECC E87C uid [ 不明 ] infrastructure-eng <infrastructure-eng@newrelic.com>
パッケージの公式サイトで公開されている鍵情報を使用する方法
パッケージの公式サイトのインストール関係のドキュメントを確認すると、下記のようなコマンドを見つけることができます。 下記はNew Relicの場合の一例となりますが、こちらのコマンドを使用する場合は古いキーをエクスポートする代わりに、こちらのコマンドを使用することでexportの代替とすることができます。
curl -fsSL https://download.newrelic.com/infrastructure_agent/gpg/newrelic-infra.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/newrelic-infra.gpg
Linux向けInfrastructureモニタリングエージェントをインストールする | New Relic Documentation
総括
パッケージ管理システムのセキュリティ対応という状況ではありますが、apt-keyが非推奨になってからだいぶ時間が経っていることもあり、そろそろ同様のエラーでアップデートできなくなる話がちらほら出てくるのではないかと推測されます。当記事がどなたかのお役に立てれば幸いです。