はじめに
AWS ECR(Elastic Container Registry)の脆弱性スキャン機能は、コンテナイメージのセキュリティを確保する上で重要な役割を果たしています。
マルチステージビルドを使用する場合、その挙動について注意すべき点があることがわかりました。
重要な発見
マルチステージビルドにおけるECRの脆弱性スキャンには、以下のような特徴があります:
- スキャン対象となるのは、最終的にプッシュされる最後のステージのイメージのみ
- 中間ステージ(builderステージなど)はスキャン対象外
具体例で見る挙動
以下のような一般的なマルチステージビルドのDockerfile
を例に考えてみましょう:
FROM node:21-alpine AS builder # スキャン対象外
WORKDIR /app
COPY . .
RUN yarn install && yarn build
FROM node:21-alpine # このイメージがスキャン対象
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
重要なポイント
-
builder
ステージで使用されているパッケージやライブラリの脆弱性は、最終イメージに含まれていない限り、スキャンでは検出されません - これは、builderステージのイメージがECRにプッシュされないためです
実務上の影響と注意点
この挙動は以下のような影響をもたらす可能性があります:
-
見落としのリスク
- ビルド時に使用される脆弱性のあるパッケージが、最終的な成果物に影響を与える可能性
- ビルドプロセス自体が攻撃の対象となるリスク
-
セキュリティ対策
- ビルドステージでも安全なベースイメージとパッケージを使用することが重要
- 必要に応じて、ビルドステージのイメージも個別にスキャンを検討
まとめ
AWS ECRの脆弱性スキャンは、マルチステージビルドの最終イメージのみをスキャン対象としています。このため、ビルドプロセス全体のセキュリティを確保するためには、追加的な対策が必要となる場合があります。
開発チームは、この制限を理解した上で、適切なセキュリティ対策を実装することが重要ですね💡