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. 特徴

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のみ利用するよう変更

    • ルートボリューム(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

    https://aws.amazon.com/jp/linux/amazon-linux-2023/faqs/

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東日本へお気軽にお問合せください。

ページ上部へ戻る

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。