- Shell executorの使い方
- Docker executorの使い方
if-not-present
プルポリシーによる非公開Dockerイメージの利用- Dockerがインストールされているシステム
- SSH executorの使い方
- Parallels executor の使用法
- クローンランナー
実行中のジョブのセキュリティ
GitLab Runnerを使用する際には、ジョブを実行する際の潜在的なセキュリティの影響に注意する必要があります。
Shell executorの使い方
一般的に、shell
executor を使ってテストを実行するのは安全ではありません。 ジョブはユーザー権限(GitLab Runner の権限)で実行され、このサーバーで実行されている他のプロジェクトのコードを盗む可能性があります。 信頼されたビルドを実行するためだけに使ってください。
Docker executorの使い方
** このようなセットアップをよりセキュアにするには、sudoを無効にするか、 、 機能を停止したDockerコンテナで、ユーザー(非root)としてジョブを実行することをお勧めします。SETUID
SETGID
一方、ホストシステムへのフルアクセス、ボリュームのマウントとアンマウントの権限、ネストしたコンテナの実行を可能にする特権モードがあります。 特権モードでコンテナを実行することはお勧めしません。
cap_add
/cap_drop
の設定により、非特権モードでより詳細な権限を設定することができます。
if-not-present
プルポリシーによる非公開Dockerイメージの利用
高度な設定: プライベートコンテナレジストリの使用で説明したプライベートDockerイメージのサポートを使用する場合は、pull_policy
の値としてalways
を使用する必要があります。特に、DockerまたはKubernetesのexecutorで公開共有Runnerをホストしている場合は、always
プルポリシーを使用する必要があります。
プルポリシーがif-not-present
に設定されている例を考えてみましょう:
- ユーザAは
registry.example.com/image/name
に非公開画像を持っています。 - ユーザーAは共有ランナーでビルドを開始します。ビルドはレジストリ認証情報を受け取り、レジストリで作成者が認証された後にイメージを取り出します。
- イメージは共有Runnerのホストに保存されます。
- ユーザーBは
registry.example.com/image/name
の非公開画像にアクセスできません。 - ユーザーBは、ユーザーAと同じ共有Runner上でこのイメージを使用するビルドを開始します:Runnerはローカルバージョンのイメージを見つけ、認証情報が見つからないためにイメージがプルできなかった場合でも、それを使用します。
したがって、異なるユーザーや異なるプロジェクト(非公開と公開のアクセスレベルが混在している)で使用できるRunnerをホストする場合は、プルポリシーの値としてif-not-present
:
-
never
- 事前にダウンロードした画像のみを使用するようユーザーを制限したい場合。 -
always
- どのレジストリからでも画像をダウンロードできるようにしたい場合。
if-not-present
プルポリシーは、信頼できるビルドとユーザーが使用する特定のrunnerにのみ使用してください。
詳しくはプルポリシーのドキュメントをお読みください。
Dockerがインストールされているシステム
注意:これは0.5.0以下のインストール、または新しいバージョンにアップグレードされたインストールに適用されます。
DockerがインストールされたLinuxシステムにパッケージをインストールすると、gitlab-runner
、Docker
デーモンにアクセスする権限を持つユーザが作成されます。これにより、shell
executorで実行されるジョブは完全な権限でdocker
にアクセスできるようになり、サーバへのrootアクセスが可能になる可能性があります。
SSH executorの使い方
SSH executor がMITM 攻撃(man-in-the-middle)を受けやすくなっています。これはStrictHostKeyChecking
オプションが欠落しているためです。 これは将来のリリースで修正される予定です。
Parallels executor の使用法
Parallels executor は完全なシステム仮想化を使用し、隔離仮想化で実行するように設定された VM マシンと隔離モードで実行するように設定された VM マシンを使用するため、可能な限り安全なオプションです。 すべての周辺機器と共有フォルダへのアクセスをブロックします。
クローンランナー
RunnerはGitLab Serverを識別するためにトークンを使います。 Runnerをクローンした場合、クローンされたRunnerはそのトークンに対して同じジョブを受け取る可能性があります。 これはRunnerのジョブを “盗む “可能性のある攻撃のベクトルです。