Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CI/CDのセキュリティ対策にOSSツールを使ってみる
Search
Tommy(sigma)
June 21, 2024
0
39
CI/CDのセキュリティ対策にOSSツールを使ってみる
セキュリティ勉強会 Sprout発表資料 2024年7月
Tommy(sigma)
June 21, 2024
Tweet
Share
More Decks by Tommy(sigma)
See All by Tommy(sigma)
#QiitaBash MCPのセキュリティ
ryosukedtomita
0
3
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.8k
#QiitaBash 良い記事は誰かを救う!2025/04/14
ryosukedtomita
0
3
生成AIの世界で君たちはどう生きるか
ryosukedtomita
0
96
DevSecOps CI/CDツール導入のススメ
ryosukedtomita
1
120
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Visualization
eitanlees
146
16k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
210
Thoughts on Productivity
jonyablonski
69
4.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
The World Runs on Bad Software
bkeepers
PRO
69
11k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
BBQ
matthewcrist
89
9.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Designing for Performance
lara
609
69k
GitHub's CSS Performance
jonrohan
1031
460k
Transcript
CI/CDのセキュリティ
自己紹介 • 3年目セキュリティエンジニア ◦ Web系の開発 ◦ セキュリティチケットレビュー (やりたくない) ◦ 脆弱性診断
◦ 社内基盤管理 ◦ (生成AI活用推進) • 個人的ニュース: 引っ越しが近いです。 ※この発言は個人の見解であり、所属する組織の公式見解ではありません
CI/CDとは RedHatより • CI : コード変更をリポジトリに自動的かつ頻繁に取り込む手法 • CD : コード変更の統合、テスト、デリバリー
ソフトウェア開発ライフサイクルを最適化し、 加速することを目的
今回の発表の目的 • 前回の発表: DevSecOpsツールを個人開発に取り入れてみた CI/CDの中で使えるセキュリティツールの紹介 • 今回の発表: CI/CD自体もセキュアにしていかなければならない →安定かつ使いやすくセキュアなCI/CDを構築するツールを紹介(GitHub)
CI/CDのセキュリティ的な脅威 想定されていないCIが実行される ◦ CIの定義ファイル改ざん ◦ CIの定義ファイルで使っているライブラリの改ざん ◦ 予期しない本番リリース ◦ CIが依存性問題で正しく動かなくなる
CI/CDのセキュリティガイドライン デジタル庁ガイドライン 1. アカウント管理・アクセス制御 2. 強制的な取り込み(マージ)の禁止 3. シークレットの保護 4. CI/CDパイプラインを通した信頼性の確保
CI/CDパイプラインの定義ファイルの保護
1. アカウント管理・アクセス制御 • やるべきこと: 任意のパイプラインが実行されないように,CIの定義ファイルの管理 者と使用者の権限を適切に設定 • 具体的な設定 ◦ CODEOWNERSファイルでCIの定義ファイルを承認なしで書き換え不可にする
2. 強制的な取り込み(マージ)の禁止 • RepositoryのBranch Protectionsのルールでセルフマージ等を禁止にする • プルリクに対してなるべくコメントをつけるメンバーを増やす →ランダムで指名するとか
3. シークレットの保護 • OIDCをサポートすることで数分程度有効なアクセストークンを使ってビルドやデリ バリ等を実行する • GitHub Actions Secret等の利用。CIの定義ファイルに直書きしない
CIの定義ファイルの変更を承認制にする • CIの定義ファイルの悪意のある改ざんを防ぐ必要がある • CODEOWNERSファイルでレビュアー を指定できる。 .github/workflows/* @tomita
GitHub Actionsのactionのバージョンを固定 • actionsのバージョンが急に変わると ◦ CIが動かなくなる ◦ 想定外のCIが実行される • フルコミットハッシュで
記載してバージョンを固定 ❌uses: actions/checkout@main ❌uses: actions/checkout@v3 ❌uses: actions/
[email protected]
⭕uses: actions/checkout@83b7061638ee 4956cf7545a6f7efe594e5ad0247 # v3.5.1
pinact pinactで数字のバージョンを自動変換可能 .github/workflows/* @tomita $pinact run $git diff - -
uses: actions/setup-go@v4 + - uses: actions/setup-go@4d34df0c2316fe 8122ab82dc22947d607c0c91f9 # v4.0.0
確実に通ってほしいCIを指定する • デフォルトでは,CIが通っていなくてもマージできてしまう • 確実に通ってほしいCIが通ったときだけマージできるようにBranch Protectionsを 設定する
CIの結果を見やすくする • 優先度の低いCIが失敗しているかは確認したい • github-commentを使うことでコメント欄にCIの結果を記載できる
github-commentの使い方 • github-comment exec -- <コマンド> • github-comment.yamlを使って テンプレートを作成可能 $github-comment
exec --token ${{ secrets.token }} -- npm install
CIのベストプラクティスに沿うためにghalint • ghalint: github actionsのlinter • jobに対してpermissionsを明示的につけさせる • フルコミットハッシュを使わせる
CIで使うツールのバージョン管理 CIで使うCLIツール自体のバージョン管理も必要 • make • shell script • aqua←個人的に良さそう
aquaの使い方 aqua • GitHub Actionsでのツール インストールも楽。 steps: # Checkout repository
to runner - uses: actions/checkout@f43a0e5ff2bd29409563 8e18286ca9a3d1956744 # v3.6.0 - name: install package using aqua uses: aquaproj/aqua-installer@6ce1f8848ec8e61 f14d57bd5d7597057a6dd187c # v3.0.1 with: aqua_version: v2.29.0 # ローカルでインストールする場合 $aqua g -i suzuki-shunsuke/pinact
まとめ • CI/CD自体のセキュリティも対策が必要 • 基本はGitHubの機能で対策できるが, 楽しようとすると便利なOSSがある • セキュリティの道のりは長い