COLUMN
AWSが提供する第3世代のOS、Amazon Linux 2023の機能や特徴を解説
クラウドやセキュリティなど、クラウドに関する情報満載のNTT東日本メールマガジンはこちらからご登録ください。
みなさま こんにちは。クラウドサービス担当のねこです。AWS使ってますか? |
AWSユーザにとってはお馴染みのAmazon Linux 2 ですが、OSの正式リリース時にはサポート期間が2023年6月30日までとされ、ベースとなったRedHat7はもともとユーザ数の多かったCentOS7ともかなりの互換性を持ち、現在でもAWS上で最も利用されているOSの一つです。
一昨年あたりはサポート終了が近づくにつれお客様からのお問合せも非常に増え、後続となるOSもAWSから発表されていない時期は、そのままAmazon Linux 2の提案を続けていいものなのか非常に悩みましたが、サポート期限が残り半年に迫った2022年12月に2年間のサポート延長が発表され、現在のサポート期限は2025年6月30日までとなっています。
ただ、サポート延長にはなりましたが、大規模なAWSへのリフト案件ですとプロジェクト期間が1年以上に渡るケースもあり、いざリフトが完了してもすぐにまたOSリプレースを考慮しなければならないようなスケジュールで進行する案件になりますと、Amazon Linux 2を提案するか別の長期サポートを受けられるOSを提案するかとても悩ましい課題でもありました。そこで2023年3月15日にGAとなった(おそらく次世代で標準提案することになるであろう)AWSが提供する第3世代のOS:Amazon Linux 2023について特徴のご紹介と、新たにリリースされた機能を使ってみたいと思います。
目次:
クラウドやセキュリティなど、クラウドに関する情報満載のNTT東日本メールマガジンはこちらからご登録ください。
1. Amazon Linux 2023とは
Amazon Linux 2023の主な特徴や、Amazon Linux 2からの変更点は以下となります。
1-1. 特徴
- Amazon Linux 2と同様、追加のライセンス費用が不要
- サポート期間は3年間(EOLは2028年3月15日まで)
- カーネルライブパッチに対応
-
プラグインを導入することにより、OSの再起動なしでパッチ適用が可能になりました
https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/live-patching.html
-
Systems Manager Patch Managerはサポート対象外でしたが、2023/3/22のリリースでサポート対象となりましたので、やってみました。
https://docs.aws.amazon.com/ja_jp/linux/al2023/release-notes/relnotes-20230322.html
-
同じくCodeDeploy エージェント、Image Builder、Amazon Inspectorも2023/3/29のアップデートでサポート対象となっていました。
https://docs.aws.amazon.com/ja_jp/linux/al2023/release-notes/relnotes-20230329.html
1-2. 変更点
ベースとなるOSがRedHatからFedoraへ変更
- 特定のリリースバージョンとの直接的な互換性ではなく、複数のFedoraアップストリーム(Fedora 34、35、36)の組み合わせがベース
パッケージ管理ツールの変更
- ベースOSがFedoraになったことにより、パッケージ管理ツールもyumからdnfへ変更になりました
-
リポジトリのバージョンがロックされています。特定のバージョンや最新のバージョンにdnfアップデートする場合、少し注意が必要になります。
-
アップデート時に --releaseverオプションで指定する場合
$ sudo dnf upgrade --releasever=<version>
※<version>には、lastest、または2023.0.20230329などの日付が付与されたリポジトリのバージョンを指定してください
※利用可能なリポジトリバージョンは sudo dnf check-release-update で確認できます
(使用例)
$ sudo dnf upgrade --releasever=2023.0.20230329
Amazon Linux 2023 repository
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
kernel aarch64 6.1.73-45.135.amzn2023 amazonlinux 24 M
Upgrading:
amazon-linux-repo-s3 noarch 2023.0.20230329-0.amzn2023 amazonlinux 18 k
……
-
アップデート時に --releaseverオプション未指定の場合
- system-releaseのバージョンがそのまま利用されます。
$ rpm -q system-release
system-release-2023.0.20230322-0.amzn2023.noarch
$ sudo dnf upgrade
Dependencies resolved.
Nothing to do.
Complete!
- オーバーライド変数ファイル(/etc/dnf/vars/releasever)を作成し、バージョンを指定しておくことで system-releaseのバージョンよりも優先されます。lastestを指定すれば、常に最新のリポジトリを参照することができます。この方法が今までの引数なしでのyum updateと同じ感覚で利用できそうですね。
$ echo latest | sudo tee /etc/dnf/vars/releasever
$ cat /etc/dnf/vars/releasever
latest
$ sudo dnf upgrade
Amazon Linux 2023 repository
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
kernel aarch64 6.1.73-45.135.amzn2023 amazonlinux 24 M
Upgrading:
amazon-linux-repo-s3 noarch 2023.0.20230329-0.amzn2023 amazonlinux 18 k
……
(参考)https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/deterministic-upgrades-usage.html
-
SELinuxがデフォルト無効状態からパーミッシブモードへ変更
-
エンフォーシングモードとは異なり、ポリシーに違反するアクセスに対し拒否されることはありませんが、しっかりログに書き出したうえで許可するといった動作になります。ここが無効モードだったAmazon Linux 2とは異なり、EBSへのログ保存が発生することからDisk容量やI/O増加も考慮する必要が出てきました。
(本来はエンフォーシングモードでの運用がセキュリティ上は好ましいのですが、SELinux導入にあたってのハードルが高いことが完全に有効化されない理由だったりするのでしょうか)
-
-
メタデータサービスであるIMDSが、デフォルトでv2のみ利用するよう変更
-
これでEC2作成時にIMDSv2有効化を忘れ、AWS Security Hubの標準コントロール項目であるAWS Foundational Security Best Practices [EC2.8] で指摘されなくてすむようになりました。
(IMDSv2参考) https://dev.classmethod.jp/articles/ec2-imdsv2-release/
-
- ルートボリューム(EBS)のデフォルトがgp2からgp3に変更(これもGUIからの設定だと地味に変更が面倒だったので嬉しいですね!)
SSHサーバのデフォルト値が変更
-
ssh-rsaホストキーアルゴリズムがデフォルトで無効化
SSHクライアントはED25519、ecdsa-sha2-nistp256、rsa-sha2-256およびrsa-sha2-512をサポートしている必要がありますので、利用するソフトには注意してください(私がよく利用するTeraTermは5.0 beta 1 以降でないとrsa-sha2-256およびrsa-sha2-512には対応していませんでした)
-
/etc/ssh/sshd_configのUseDNSがnoへ変更
DNS障害時などにEC2への接続障害を回避するためのデフォルト値変更でしょうか。(よく利用されるSSMセッションマネージャも、DNS障害が原因で繋がらない場合は、代替手段となるSSH接続もhostnameではなくIPで接続してねという意図が込められている?)
-
- ネットワーク管理がisc-dhcp-clientからsystemd-networkdへ変更
-
従来のsyslogはインストールされておらず /var/log 配下にログが出力されなくなった
- 各種ログはjournalctlコマンドで確認できますが、cloudwatchlogsへのログ転送などは別途Fluent-bitなどと組み合わせる必要がありそうです(Amazon Linux 2で出来たSystems Managerでの転送は現状不可の模様で、ここは大変不便ですね…)
1-3. その他留意事項等
- Amazon Linux 2からAmazon Linux 2023へのインプレースアップグレードは現状未サポートです
- 今後AWSよりアップグレードアシスタントが提供されることを期待して待ちましょう
- インプレースアップグレードはこちらの記事でも紹介しているとおり、しばらくの間はRHEL9、Rocky Linux9、AlmaLinux9あたりが候補として入りそうですね
(参考)
https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/compare-with-al2.html
2. ライブアップデートについて
カーネルライブパッチはセキュリティアップデートとバグフィックスの2種類に対応しています。カーネルライブパッチに対応したことにより、上記パッチ適用時のリブートによるサービス断時間を考慮する必要性がなくなり、さらにPatch Managerと併せて導入することで、(制約事項はありますが)パッチを適用する時間も意識することなく自動適用が可能となったため、運用に与える影響はとても大きいと思います。
2-1. 前提条件
前提として、カーネルライブパッチの利用には以下の環境である必要があります。
①64ビットのx86_64、または ARM(arm64)アーキテクチャ
②Kernel version 6.1 以降
※armが正式サポートとなったことで、AWS Gravitonプロセッサを搭載した安価で高性能なインスタンスファミリーでも利用可能となりました。
2-2. 制約事項
- カーネルライブパッチを適用しても、カーネルのバージョンは更新されません。カーネルバージョンの更新にはOS再起動が必要となります
- 最新のカーネルライブパッチの提供は 3カ月間のみとなります
- カーネルライブパッチの適用中は、インスタンスの停止を実行したり高度なデバッグツール (SystemTap, kprobes, eBPF-based toolsなど) を使用したり、カーネルライブパッチインフラストラクチャで使用される出力ファイルにアクセスしたりすることはできません
今回はAWS公式ドキュメントを参考にプラグインの追加とサービスの有効化を行いましたが、EC2ごとに作業が必要になってきますのでUserDataでプラグイン追加~サービスの有効化まで一括でやるのが楽そうです。
DNFプラグインのインストールと有効化
$ sudo dnf install -y kpatch-dnf
Last metadata expiration check: 0:54:59 ago on Mon May 8 07:16:49 2023.
Dependencies resolved.
=============================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================
Installing:
kpatch-dnf x86_64 0.4-10.amzn2023.0.1 amazonlinux 18 k
(中略)
Installed:
kpatch-dnf-0.4-10.amzn2023.0.1.x86_64
Complete!
$ sudo dnf kernel-livepatch -y auto
Last metadata expiration check: 0:56:05 ago on Mon May 8 07:16:49 2023.
Dependencies resolved.
=============================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================
Installing:
kernel-livepatch-6.1.25-37.47 x86_64 1.0-0.amzn2023 amazonlinux 13 k
(中略)
Installed:
kernel-livepatch-6.1.25-37.47-1.0-0.amzn2023.x86_64
Complete!
$ sudo rpm -qa | grep kernel-livepatch
kernel-livepatch-repo-s3-2023.0.20230503-0.amzn2023.noarch
kernel-livepatch-6.1.25-37.47-1.0-0.amzn2023.x86_64
kpatchパッケージのインストールと有効化
$ sudo dnf install kpatch-runtime
Last metadata expiration check: 0:58:21 ago on Mon May 8 07:16:49 2023.
Dependencies resolved.
=============================================================================================================================================================
Package Architecture Version Repository Size
=============================================================================================================================================================
Installing:
kpatch-runtime noarch 0.9.7-10.amzn2023.0.1 amazonlinux 27 k
(中略)
Installed:
kpatch-runtime-0.9.7-10.amzn2023.0.1.noarch
Complete!
kpatchサービスのスタートアップ登録と開始
$ sudo systemctl enable kpatch.service && sudo systemctl start kpatch.service
Created symlink /etc/systemd/system/multi-user.target.wants/kpatch.service → /usr/lib/systemd/system/kpatch.service.
$ sudo systemctl status kpatch.service
● kpatch.service - "Apply kpatch kernel patches"
Loaded: loaded (/usr/lib/systemd/system/kpatch.service; enabled; preset: disabled)
Active: active (exited) since Mon 2023-05-08 08:17:25 UTC; 15min ago
Process: 28402 ExecStart=//usr/sbin/kpatch check-start --all (code=exited, status=0/SUCCESS)
Main PID: 28402 (code=exited, status=0/SUCCESS)
CPU: 17ms
May 08 08:17:25 ip-10-0-2-21.ap-northeast-1.compute.internal systemd[1]: Starting kpatch.service - "Apply kpatch kernel patches"...
May 08 08:17:25 ip-10-0-2-21.ap-northeast-1.compute.internal kpatch[28402]: touch file /var/lib/kpatch/kpatch_dirty-0
May 08 08:17:25 ip-10-0-2-21.ap-northeast-1.compute.internal systemd[1]: Finished kpatch.service - "Apply kpatch kernel patches".
3. Patch Manager実行してみた
ライブアップデートの有効化が終わりましたので、パッチマネージャ実行前にまずは前提となるパッチマネージャのベースラインを確認します。
3-1. Amazon Linux 2023用デフォルトベースライン
デフォルトのベースラインとしてちゃんと存在していますね。
今回はカスタムベースラインは使わずにこちらのデフォルトベースラインを使って、パッチマネージャで対象インスタンスのスキャンとインストール(再起動なし)を実行してみます。
3-2. パッチ適用前のコンプライアンスレポート
3-3. パッチを適用
3-4. パッチ適用後のコンプライアンスレポート
ちゃんとセキュリティパッチが適用されていますね。ライブアップデートも前述のとおり有効化済みですので、インスタンスの再起動無しでも正常にパッチが適用されました!
ライブアップデートとパッチマネージャを利用することで、日々のEC2の運用がとても楽になりますね。
4. さいごに
いかがでしたしょうか。Amazon Linux 2023の正式リリースから約2カ月経過しましたが、現在も続々とアップデート情報が更新されサポート対象の機能が増え続けています。現在のリリースバージョンでも十分商用環境への提案で使えるようになってきたかと思いますので、積極的に案件でも採用してきたいと思います。もしAWSついてご不安な点やご心配なことがありましたら、NTT東日本へお気軽にお問合せください。
RECOMMEND
その他のコラム
相談無料!プロが中立的にアドバイスいたします
クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。