保護されたコンテナタグ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed
プロジェクト内のコンテナタグをプッシュおよび削除できるユーザーを制御します。
デフォルトでは、少なくともデベロッパーロールを持つユーザーは、すべてのプロジェクトコンテナリポジトリ内のイメージタグをプッシュおよび削除できます。タグ保護ルールを使用すると、次のことができます:
- 特定のユーザーロールへのタグのプッシュと削除を制限します。
- プロジェクトごとに最大5つの保護ルールを作成します。
- これらのルールをプロジェクト内のすべてのコンテナリポジトリに適用します。
タグは、少なくとも1つの保護ルールがその名前に一致する場合に保護されます。複数のルールが一致する場合、最も制限の厳しいルールが適用されます。
保護タグは、クリーンアップポリシーで削除できません。
前提要件
保護されたコンテナタグを使用する前に:
- 新しいコンテナレジストリバージョンを使用する必要があります:
- GitLab.com: デフォルトで有効になっています。
- GitLab Self-Managed: メタデータデータベースを有効にする
保護ルールを作成する
前提要件:
- 少なくともメンテナーのロールが必要です。
保護ルールを作成するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > パッケージとレジストリを選択します。
- コンテナレジストリを展開します。
- 保護されたコンテナタグで、保護ルールを追加するを選択します。
- フィールドに入力します:
- 一致するコンテナタグを保護する: RE2構文を使用して正規表現パターンを入力します。パターンは100文字を超えてはなりません。正規表現パターンの例を参照してください。正規表現パターンの例を参照してください。
- プッシュに必要な最小ロール: メンテナー、オーナー、または管理者を選択します。
- 削除に必要な最小ロール: メンテナー、オーナー、または管理者を選択します。
- ルールを追加するを選択します。
保護ルールが作成され、一致するタグが保護されます。
正規表現パターンの例
コンテナタグの保護に使用できるパターンの例:
| パターン | 説明 |
|---|---|
.* | すべてのタグを保護します |
^v.* | 「v」で始まるタグを保護します(v1.0.0、v2.1.0-rc1など)。 |
\d+\.\d+\.\d+ | セマンティックバージョンタグを保護します(1.0.0、2.1.0など) |
^latest$ | latestタグを保護します |
.*-stable$ | 「-stable」で終わるタグを保護します(1.0-stable、main-stableなど)。 |
stable|release | 「stable」または「リリース」を含むタグを保護します(1.0-stableなど)。 |
保護ルールを削除する
前提要件:
- 少なくともメンテナーのロールが必要です。
保護ルールを削除するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > パッケージとレジストリを選択します。
- コンテナレジストリを展開します。
- 保護されたコンテナタグで、削除する保護ルールの横にある削除( )を選択します。
- 確認プロンプトが表示されたら、削除を選択します。
保護ルールが削除され、一致するタグは保護されなくなります。
伝播遅延
ルール変更は、サービス間で伝播するためにJSON Webトークントークンに依存します。その結果、保護ルールとユーザーアクセスレベルの変更は、現在のJSON Webトークントークンの有効期限が切れた後にのみ有効になる場合があります。遅延は、構成されたトークンの期間に相当します:
- デフォルトは: 5分
- GitLab.com: 15 minutes
ほとんどのコンテナレジストリクライアント(Docker、GitLab UI、およびAPIを含む)は、操作ごとに新しいトークンをリクエストしますが、カスタムクライアントはトークンをその完全な有効期間保持する場合があります。
イメージマニフェストの削除
GitLab UIとAPIは、直接的なイメージマニフェストの削除をサポートしていません。コンテナレジストリAPIを直接呼び出すと、マニフェストの削除は関連するすべてのタグに影響します。
タグの保護を確実にするために、マニフェストの直接削除リクエストは、以下の場合にのみ許可されます:
- タグ保護が無効になっている
- ユーザーが保護されたタグを削除する権限を持っている
コンテナイメージを削除しています
次の条件がすべて当てはまる場合は、コンテナイメージを削除することはできません:
- コンテナイメージにタグがある。
- プロジェクトにコンテナレジストリタグ保護ルールがある。
- あなたのアクセスレベルが、ルールで定義されている
minimum_access_delete_levelよりも低い。
この制限は、ルールパターンがコンテナイメージタグと一致するかどうかに関係なく適用されます。