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
45
CI/CDのセキュリティ対策にOSSツールを使ってみる
セキュリティ勉強会 Sprout発表資料 2024年7月
Tommy(sigma)
June 21, 2024
Tweet
Share
More Decks by Tommy(sigma)
See All by Tommy(sigma)
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
400
#QiitaBash MCPのセキュリティ
ryosukedtomita
2
1.7k
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
2k
#QiitaBash 良い記事は誰かを救う!2025/04/14
ryosukedtomita
0
8
生成AIの世界で君たちはどう生きるか
ryosukedtomita
0
110
DevSecOps CI/CDツール導入のススメ
ryosukedtomita
1
130
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
GitHub's CSS Performance
jonrohan
1032
460k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Building Applications with DynamoDB
mza
96
6.6k
Navigating Team Friction
lara
189
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Practical Orchestrator
shlominoach
190
11k
Docker and Python
trallard
46
3.6k
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がある • セキュリティの道のりは長い