4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECR に1回 push しただけで3件並ぶ正体は、provenance attestation だった

4
Last updated at Posted at 2026-11-05

はじめに

GMOコネクトの小倉です。

GitHub Actions からイメージを1回 push しただけなのに、ECR のイメージ一覧に3件並ぶようになりました。タグが付いているのは1件だけで、残りの2件は「-」のまま。しかも1件はサイズが 0.00 MB です😇

ランナーの Docker が 29 になり、BuildKit が自動で付けるビルドの来歴情報(provenance attestation)が残るようになったのが原因でした。それを本体とまとめる Image Index も作られます。--provenance=false を付けたら1件に戻りました。

3件の正体と、消してよいかどうかを調べた記録です。

まとめ

  • 3件の正体は、Image Index(タグ付き)、イメージ本体、attestation
  • 原因は、ランナーの Docker が 28 から 29 に上がり、containerd イメージストアが既定になったこと。従来のストアでは落ちていた attestation が残るようになった
  • attestation はビルドの来歴情報で、コンテナの実行には使われない
  • 署名や来歴の検証に使っていなければ、docker build --provenance=false で無効化できる。付けたら ECR の表示は1件(タイプは Image)に戻った
  • タグなしの2件は、Image Index が残っている間はライフサイクルポリシーで消えない(仕様)

発生した事象

ECR のイメージ一覧が、1回の push ごとに次のようになりました。

イメージタグ タイプ サイズ
<tag> Image Index 数 MB
- Image 数 MB(Image Index と同じ)
- Image 0.00 MB

以前は、タグ付きの Image が1件並ぶだけでした。ワークフローは変えていません。変わったのは、ubuntu-latest のランナーが 24.04 から 26.04 になったことだけです。

3件の正体

一覧の行 正体 役割 実行に必要か
タグ付きの Image Index manifest list イメージ本体と attestation をまとめる目次。ECS や docker pull はまずこれを読む 必要(ここを経由して本体を探す)
タグなしの Image(数 MB) イメージ本体 バイナリやファイルシステムのレイヤーが入っている 必要
タグなしの Image(0.00 MB) attestation(provenance) ビルドの来歴情報 不要

ECR は、Image Index から参照されているものも1件ずつ一覧に出します。タグが付くのは Image Index だけなので、残りの2件は「-」と表示されます。消し忘れのゴミではありません。

attestation(provenance)とは

provenance は「このイメージがどうビルドされたか」の記録です。BuildKit が JSON で生成します。

  • ビルドに使ったツール(BuildKit)とその設定
  • ベースイメージ
  • ビルド時の引数
  • ソースの情報

使い道は、サプライチェーンの検証です。署名ツールやデプロイ時のポリシーで「このイメージは正規の CI でビルドされたか」を確かめるときに読まれます。コンテナを動かすときには読まれません。

なぜ増えたか

Docker 29 で containerd イメージストアが既定になった

ランナーに入っている Docker は、24.04 が 28.0.4、26.04 が 29.4.2 です(runner-images の Ubuntu 24.04 と Ubuntu 26.04 の Readme)。Docker 29 からは、新規インストールでは containerd イメージストアが既定です。

The containerd image store is the default storage backend for Docker Engine 29.0 and later on fresh installations.

containerd image store with Docker Engine

provenance はもともと既定で付く

BuildKit は、何も指定しなくても provenance を付けます。

Provenance attestations with the mode=min level are added to images by default. The attestation records are wrapped in the in-toto JSON format and attached to the image index in a manifest for the final image.

Build attestations

provenance は、Image Index の中に本体とは別の manifest として入ります。ただし従来のイメージストアは Image Index を扱えないので、attestation も保持できません。

Attestations attach to an image index. The classic image store doesn't support image indices, so it can't hold an image with attestations.

Build attestations

Docker 28 のランナー(従来のストア)では provenance が落ち、push されるのは manifest が1つだけでした。Docker 29 のランナー(containerd イメージストア)では provenance が残り、本体とまとめる Image Index も作られます。こうして3件になります。

対処法

--provenance=false を付ける

- docker build --platform linux/arm64 -t <registry>/<repo>:<tag> .
+ docker build --platform linux/arm64 --provenance=false -t <registry>/<repo>:<tag> .

付けたあとの ECR の表示は次のとおりです。

イメージタグ タイプ サイズ
<tag> Image 数 MB

attestation がなくなれば、まとめるものもなくなります。Image Index は作られません。単一プラットフォームのビルドなら、以前と同じ1件に戻ります。

コマンドの引数を変えたくない場合は、環境変数 BUILDX_NO_DEFAULT_ATTESTATIONS でも既定の provenance を無効にできます(Build attestations)。

注意点

タグなしでも、ライフサイクルポリシーでは消えない

「タグなしのイメージを一定期間で削除する」ライフサイクルポリシーがあっても、Image Index から参照されている本体と attestation は消えません。

If an image is referenced by a manifest list, it cannot be expired or archived without the manifest list being deleted or archived first.

Automate the cleanup of images by using lifecycle policies in Amazon ECR

タグなしのイメージが一覧に残り続けても、ポリシーの設定ミスではありません。タグ付きの Image Index が消えると、参照が外れた本体と attestation も削除の対象になります。

provenance を使っている場合は無効化しない

イメージの署名や、来歴を確かめるポリシーを運用しているなら、provenance は必要です。--provenance=false は、使っていないことを確認してから付けてください。

マルチプラットフォームのビルドでは1件にならない

amd64 と arm64 の両方をビルドする場合は、--provenance=false を付けても Image Index は残ります。複数のプラットフォームをまとめるために必要だからです。

教訓

  • ECR に知らないイメージが増えたら、まずタイプ(Image Index か Image か)とサイズを見る
  • 0.00 MB のタグなしイメージを見つけたら、まず attestation を疑う
  • Image Index が参照しているタグなしイメージは、ライフサイクルポリシーでは消えない(仕様)

最後に

ご一読いただき、ありがとうございました。

弊社では、AWSを使ったサービスの開発や技術支援をはじめ、幅広い支援を行っておりますので、何かありましたらお気軽にお問合せください。

お問合せ: https://gmo-connect.jp/contactus/

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?