保護タグ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
保護タグ:
- タグを作成する権限を持つユーザーを制御できます。
- 作成後の誤った更新や削除を防ぎます。
各ルールでは、次のいずれかを照合できます:
- 個々のタグ名。
- ワイルドカードを使用して、複数のタグを一度に制御します。
この機能は、保護ブランチから発展したものです。
保護タグを作成または削除するには、その保護タグのAllowed to create or delete(作成が許可されています)リストに登録されている必要があります。
保護タグの設定
前提要件:
- プロジェクトのメンテナーロール以上が必要です。
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
保護タグを展開します。
新規を追加を選択します。
単一のタグを保護するには、タグを選択し、ドロップダウンリストからタグを選択します。
名前が文字列に一致するすべてのタグを保護するには、以下を実行します:
- タグを選択します。
- タグのマッチングに使用する文字列を入力します。ワイルドカード(
*)がサポートされています。 - ワイルドカードの作成を選択します。
作成が許可されていますで、保護タグを作成できるロールを選択します。
GitLabプレミアムおよびUltimateでは、グループまたは個々のユーザーを作成が許可されていますに追加することもできます。
保護を選択します。
保護されたタグ(またはワイルドカード)が保護タグリストに表示されます。
保護タグへのグループの追加
グループまたはサブグループのメンバーを保護タグの作成を許可するように設定するには、次の手順を実行します:
左側のサイドバーで、Search or go(検索または移動先)を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
保護タグを展開します。
次のフィールドにグループを追加します:
# Allow group members to create protected tags Allowed to create: @group-x
グループの継承および資格
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph TD
accTitle: Diagram of group inheritance for protected tags
accDescr: If a project is shared with a group, the group members inherit permissions for protected tags.
A[Parent group X] -->|owns| B[Project A]
A -->|contains| C[Subgroup Y]
B -->|shared with| C
C -->|members inherit permissions| B
この例では:
- 親グループX(
group-x)はプロジェクトAを所有しています。 - 親グループXには、サブグループ、サブグループY(
group-x/subgroup-y)も含まれています。 - プロジェクトAはサブグループYと共有されています。
保護タグ権限の対象となるグループは、次のとおりです:
- プロジェクトA: グループXとサブグループYの両方(プロジェクトAがサブグループYと共有されているため)。
保護タグ権限についてグループとプロジェクトを共有する
プロジェクトをグループまたはサブグループと共有して、そのメンバーを保護タグ権限の対象にできます。
%%{init: { "fontFamily": "GitLab Sans" }}%%
graph LR
accTitle: Diagram of project sharing for protected tag permissions
accDescr: Sharing a project with a group affects whether their members can have protected tag permissions.
A[Parent group X] -->|owns| B[Project A]
A -->|also contains| C[Subgroup Y]
C -.->D{Share Project A<br/>with Subgroup Y?} -.->|yes| E[Members of Subgroup Y<br/>can have protected<br/>tag permissions]
D{Share Project A<br/>with Subgroup Y?} -.->|no| F[Members of Subgroup Y<br />cannot have protected<br/>tag permissions]
E -.->|Add Subgroup Y<br/> to protected tag settings| I[Subgroup Y members<br/>can create tags] -.-> B
F -.-> |Add Subgroup Y<br/> to protected tag settings| J[Settings will not<br/>take effect] -.-> B
プロジェクトAのサブグループYメンバーにアクセス権を付与するには、プロジェクトをサブグループと共有する必要があります。サブグループを保護タグの設定に直接追加しても効果はなく、サブグループメンバーには適用されません。
グループに保護タグ権限を持たせるには、プロジェクトをグループと直接共有する必要があります。親グループから継承されたプロジェクトメンバーシップは、保護タグ権限に対しては不十分です。
ワイルドカード保護タグ
ワイルドカードに一致するすべてのタグを保護するワイルドカード保護タグを指定できます。次に例を示します:
| ワイルドカード保護タグ | 一致するタグ |
|---|---|
v* | v1.0.0、version-9.1 |
*-deploy | march-deploy、1.0-deploy |
*gitlab* | gitlab、gitlab/v1 |
* | v1.0.1rc2、accidental-tag |
2つの異なるワイルドカードが、同じタグに一致する可能性があります。たとえば、*-stableとproduction-*はどちらもproduction-stableタグに一致します。その場合、これらの保護タグの_いずれか_に作成が許可されていますのような設定がある場合、production-stableもこの設定を継承します。
保護タグの名前を選択すると、GitLabは一致するすべてのタグのリストを表示します。
ブランチと同じ名前でのタグの作成を防止
同じ名前のタグとブランチに、異なるコミットが含まれている場合があります。タグとブランチが同じ名前を使用している場合、git checkoutコマンドを実行しているユーザーは、代わりに_ブランチ_ qaをチェックアウトするつもりだった場合に、タグ qaをチェックアウトする可能性があります。セキュリティ対策を追加するには、ブランチと同じ名前のタグを作成しないでください。これら2つを混同すると、セキュリティまたは運用上の問題が発生する可能性があります。
この問題を回避するには:
タグとして使用したくないブランチ名を特定します。
保護タグの設定の説明に従って、保護タグを作成します:
- 名前には、
stableなどの名前を入力します。stable-*のようなワイルドカードを作成して、stable-v1やstable-v2のように複数の名前を照合することもできます。 - Allowed to Create(作成が許可されています)では、なしを選択します。
- 保護を選択します。
- 名前には、
ユーザーはブランチを作成できますが、保護された名前でタグを作成することはできません。
デプロイキーに保護タグの作成を許可する
デプロイキーに保護タグの作成を許可できます。
前提要件:
- デプロイキーがプロジェクトに対して有効である必要があります。プロジェクトのデプロイキーは、作成時にデフォルトで有効になっています。ただし、パブリックデプロイキーにプロジェクトへのアクセス権が付与されている必要があります。
- デプロイキーには、プロジェクトリポジトリへの書き込みアクセス権が必要です。
- デプロイキーのオーナーは、プロジェクトへの読み取りアクセス権以上を持っている必要があります。
- デプロイキーのオーナーはプロジェクトのメンバーでもある必要があります。
デプロイキーに保護タグの作成を許可するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- 保護タグを展開します。
- タグドロップダウンリストから、保護するタグを選択します。
- 作成が許可されていますリストから、デプロイキーを選択します。
- 保護を選択します。
保護タグでパイプラインを実行する
保護タグを作成する権限は、ユーザーが以下を実行できるかどうかを定義します:
- CI/CDパイプラインを開始して実行します。
- これらのタグに関連付けられたジョブでアクションを実行します。
これらの権限により、承認されたユーザーのみが保護タグのCI/CDプロセスをトリガーして管理できるようになります。
保護タグの削除
GitLab APIまたはGitLabユーザーインターフェースを使用して、保護タグを手動で削除できます。
前提要件:
- Allowed to create or delete(作成または削除が許可されている)リストに登録されている必要があります。
これを行うには、次の手順を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- コード > タグを選択します。
- 削除するタグの横にある削除( )を選択します。
- 確認ダイアログでタグ名を入力し、はい、保護されたタグを削除しますを選択します。
保護タグは、UIまたはAPIのいずれかからGitLabを使用することによってのみ削除できます。これらの保護により、ローカルのGitコマンドまたはサードパーティのGitクライアントを介してタグを誤って削除することが防止されます。