正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

イミュータブルコンテナタグ

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed
  • ステータス: ベータ

イミュータブルタグを使用すると、プロジェクトでコンテナタグが更新または削除されるのを防ぐことができます。

デフォルトでは、少なくともデベロッパーロールを持つユーザーは、すべてのプロジェクトコンテナリポジトリでイメージタグをプッシュおよび削除できます。タグの不変性ルールを使用すると、次のことができます:

  • 重要なイメージタグの変更を防ぎ、悪意のある変更や偶発的な変更のリスクを軽減します。
  • プロジェクトごとに最大5つの保護ルールを作成します。
  • プロジェクト内のすべてのコンテナリポジトリに保護ルールを適用します。

タグは、少なくとも1つの不変性保護ルールがタグの名前と一致する場合にイミュータブルになります。複数のルールが一致する場合、最も制限の厳しいルールが適用されます。

イミュータブルタグのルール:

保護タグとの比較

保護タグとイミュータブルタグはいずれもイメージの整合性を維持しますが、目的が異なります。

保護タグは、ロールに基づいて特定のタグを作成、更新、または削除できるユーザーを制限します。タグの不変性により、タグが作成されると、誰も更新または削除できなくなります。

以下の図は、イメージのプッシュのコンテキストで保護ルールがどのように評価されるかを示しています:

%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
    accTitle: Evaluation of protected and immutable tag rules
    accDescr: Flow chart showing the evaluation process for protected and immutable tag rules during an image push.
    A[User attempts to push a tag] --> B{Protected tag check:<br/>Does user have required role<br/>to push this tag pattern?}
    B -- Yes --> C{Does the tag already exist?}
    B -- No --> D[Push denied:<br/>Protected tag - insufficient permissions]
    C -- Yes --> E{Immutable tag check:<br/>Does tag match an<br/>immutable rule pattern?}
    C -- No --> F[Tag is created successfully]
    E -- Yes --> G[Push denied:<br/>Tag is immutable]
    E -- No --> H[Tag is overwritten successfully]

シナリオ例

これらのルールを持つプロジェクトの場合:

  • 保護タグのルール: v.*パターンには、少なくともメンテナーロールが必要です。
  • イミュータブルタグのルール: v\d+\.\d+\.\d+パターンは、セマンティックバージョンタグを保護します。
ユーザーロールアクション保護タグのチェックイミュータブルタグのチェック結果
デベロッパー新しいタグプッシュv1.0.0拒否評価されませんプッシュは拒否されました。必要なロールがありません。
メンテナー新しいタグプッシュv1.0.0許可評価されませんタグが作成されました。
メンテナー既存のタグプッシュを上書きしますv1.0.0許可拒否プッシュは拒否されました。タグはイミュータブルです。
メンテナー新しいタグプッシュv-beta許可評価されませんタグが作成されました。

前提要件

イミュータブルコンテナタグを使用するには、コンテナレジストリが利用可能であることを確認してください:

イミュータブルルールを作成する

前提要件:

  • オーナーロールを持っている必要があります。

イミュータブルルールを作成するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > パッケージとレジストリを選択します。
  3. コンテナレジストリを展開します。
  4. Protected container tags(保護されたコンテナタグ)で、保護ルールを追加するを選択します。
  5. 保護タイプで、変更不可を選択します。
  6. 一致するタグに対して変更不可のルールを適用するに、RE2構文を使用して正規表現パターンを入力します。パターンは100文字を超えてはなりません。詳しくは、正規表現パターンの例をご覧ください。
  7. ルールを追加するを選択します。

イミュータブルルールが作成され、一致するタグが保護されます。

正規表現パターンの例

コンテナタグを保護するために使用できるパターンの例:

パターン説明
.*すべてのタグを保護します。
^v.*「v」で始まるタグを保護します(v1.0.0v2.1.0-rc1など)。
\d+\.\d+\.\d+セマンティックバージョンタグを保護します(1.0.02.1.0など)。
^latest$latestタグを保護します。
.*-stable$「-stable」で終わるタグを保護します(1.0-stablemain-stableなど)。
stable|release「stable」または「リリース」を含むタグを保護します(1.0-stableなど)。

イミュータブルルールの削除

前提要件:

  • オーナーロールを持っている必要があります。

イミュータブルルールを削除するには:

  1. 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
  2. 設定 > パッケージとレジストリを選択します。
  3. コンテナレジストリを展開します。
  4. Protected container tags(保護されたコンテナタグ)で、削除するイミュータブルルールの横にある削除 remove )を選択します。
  5. 確認プロンプトが表示されたら、削除を選択します。

イミュータブルルールが削除され、一致するタグは保護されなくなります。

伝播遅延

ルール変更は、サービス間で伝播するためにJSON Webトークンに依存します。その結果、保護ルールおよびユーザーアクセスロールへの変更は、現在のJSON Webトークンの有効期限が切れて初めて有効になる場合があります。遅延は、設定されたトークンの有効期間に相当します:

  • デフォルト: 5分
  • GitLab.com: 15分

ほとんどのコンテナレジストリクライアント(Docker、GitLab UI、APIなど)は、操作ごとに新しいトークンをリクエストしますが、カスタムクライアントはトークンをその完全な有効期間保持する場合があります。

イメージマニフェストの削除

GitLab UIとAPIは、イメージマニフェストの直接削除をサポートしていません。コンテナレジストリAPIコールを直接使用すると、マニフェストを削除すると、関連付けられているすべてのタグに影響します。

タグの保護を確実にするために、マニフェストの直接削除リクエストは、対応するプロジェクトにイミュータブルタグのルールがない場合にのみ許可されます。

この制限は、ルールパターンがコンテナイメージタグと一致するかどうかに関係なく適用されます。