ECR の拡張スキャンでサポートされているプログラミング言語でも UNSUPPORTED_IMAGE が発生するときの対処方法

サポート対象を確認する際は、プログラミング言語とオペレーティングシステムの両方をご確認ください
2022.07.11

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

ECR の拡張スキャン機能を使用して、コンテナイメージの脆弱性スキャンを実行しています。先日、Python のコンテナイメージを更新したところUNSUPPORTED_IMAGEでスキャンが失敗しました。
AWS公式ドキュメントを確認しましたが、Python はサポートされており、他の Python のコンテナイメージは問題なくスキャン実行できています。
なぜサポートされているはずのコンテナイメージでUNSUPPORTED_IMAGEが発生するのでしょうか?対処方法を教えてください。

どう対応すればいいの?

コンテナイメージのオペレーティングシステム(ベースイメージ)を確認してください。

ECR の拡張スキャンでは Python を含む複数のプログラミング言語をサポートしていますが、オペレーティングシステムもサポート対象である必要があります。そのため、サポートされているプログラミング言語のコンテナイメージでも、サポート対象外のオペレーティングシステムを使用している場合はUNSUPPORTED_IMAGEが発生します。

現時点で拡張スキャンでサポートされているオペレーティングシステムは限定されており、すべてのオペレーティングシステムがサポートされているわけではないためご注意ください。

サポート対象外のオペレーティングシステムを利用している場合は、サポート対象のオペレーティングシステムへの変更をご検討ください。

なお、コンテナイメージのオペレーティングシステムはDockerfileのFROM 行(ベースイメージの指定行)やコンテナを実行しコンテナ内の/etc/os-releaseファイルなどから確認できます。

やってみた

サポートされている Alpine Linux 3.15 と現時点でサポートされていない Alpine Linux 3.16 のコンテナイメージで、オペレーティングシステムの確認と、スキャンを実行してみます。

オペレーティングシステムの確認

Docker コマンドから各イメージを実行し、オペレーティングシステムとプログラミング言語を確認します。

$ docker run -it python:3.11-rc-alpine3.15 /bin/sh
/ #
/ # cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.15.4
PRETTY_NAME="Alpine Linux v3.15"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
/ #
/ # python -V
Python 3.11.0b3
$ docker run -it python:3.11-rc-alpine3.16 /bin/sh
/ # 
/ # cat /etc/os-release 
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.16.0
PRETTY_NAME="Alpine Linux v3.16"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
/ # 
/ # python -V
Python 3.11.0b3

スキャン結果の確認

上記コンテナイメージを拡張スキャンを設定した ECR にプッシュして、スキャンステータスを確認します。

python:3.11-rc-alpine3.15のスキャン結果

python:3.11-rc-alpine3.16のスキャン結果

同じプログラミング言語のコンテナイメージですが、オペレーティングシステムが異なるとUNSUPPORTED_IMAGEが発生することが確認できました。

参考資料

Amazon ECR 拡張スキャンを有効にするときは、次の事項を考慮する必要があります。

Amazon Inspector では特定のオペレーティングシステムのスキャンがサポートされます。