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
sigma
June 21, 2024
0
38
CI/CDのセキュリティ対策にOSSツールを使ってみる
セキュリティ勉強会 Sprout発表資料 2024年7月
sigma
June 21, 2024
Tweet
Share
More Decks by sigma
See All by sigma
#QiitaBash TDDでAIに設計イメージを伝える
ryosukedtomita
2
1.7k
#QiitaBash 良い記事は誰かを救う!2025/04/14
ryosukedtomita
0
3
生成AIの世界で君たちはどう生きるか
ryosukedtomita
0
93
DevSecOps CI/CDツール導入のススメ
ryosukedtomita
1
120
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Designing for Performance
lara
609
69k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Thoughts on Productivity
jonyablonski
69
4.7k
How STYLIGHT went responsive
nonsquared
100
5.6k
Rails Girls Zürich Keynote
gr2m
94
14k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
Site-Speed That Sticks
csswizardry
10
640
Building an army of robots
kneath
306
45k
4 Signs Your Business is Dying
shpigford
184
22k
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がある • セキュリティの道のりは長い
Otomatik - 104.22.38.239
CloudFlare DNS
Türk Telekom DNS
Google DNS
Open DNS
OSZAR »