Oracle Cloud Hangout Cafe Season4 #3「CI/CD 最新事情」(2021年6月9日開催)
CI & GitOps
参考までにGitOps環境を構築する上で利用できる主なCIツールを例挙しておきます。CIOpsにおいても利用され続けているCIツールとGitOpsを組み合わせるケースとして主なツールは以下です。
KubernetesのCustomResourceとしてCIパイプラインをマニフェストで定義できるKubernetesネイティブなツールは以下です。
主なGitOpsツールは、以下です。
Argoには、Argo Workflows、Argo CD以外にもGitOpsの利便性を高めるツール群もあるので、同じファミリー(Argo Family)として組み合わせて利用できます。
こうしたツールを組み合わせることでGitOps環境を構築できます。
・CI & CD Security
ここでは、GitOpsにおいてパイプラインに組み込む、主なセキュリティ対策ナレッジを紹介します。
技術の進化に伴い様々なナレッジがありますので、あくまでも一例と捉えてください。
1. コンテナイメージビルド
コンテナイメージのビルドは、CIパイプラインに組み込む上でセキュアで高速であることが望ましいです。こうした要望に対応するビルドツールもいくつかあります。ここでは、BuildKitとKanikoを紹介します。
BuildKitは、Dockerfileの命令を並列実行、キャッシュ判定の仕組みで高速にビルドを実行します。そして、非Root / 非Privilegedな実行、DockerfileのRUN 命令を実行する際にseccomp*1を有効化する仕組みによってセキュアにビルドできます。
Kanikoは、OSやコンテナランタイムに依存せずにコンテナイメージをビルドする場合に有用です。コンテナ内のユーザ空間でビルドすることで、CIで推奨されるDooD*2でのRoot権限で稼働しているホスト上へのセキュリティリスクを回避できます。
*1:コンテナ内のプロセスが呼び出せるシステムコールを制限できるLinuxカーネルの機能
*2:Docker outside of Docker。起動したコンテナからホストのDockerデーモンでイメージビルドする方法
2. イメージスキャン
コンテナイメージもセキュアであることが望まれます。マネージドサービスのコンテナイメージレジストリに脆弱性検査機能が実装されていますが、CI時に脆弱性スキャンをかけて検査したコンテナイメージをレジストリにプッシュすることでセキュリティを高めることもできます。ここでは、Trivyとdockleを紹介します。
Trivyは、脆弱性データベースからコンテナイメージを診断します。診断結果をレポートとして出力できます。ワンバイナリでCIに組み込みやすいのも特徴です。
dockleは、CIS BenchmarkのDockerに関する項目、Dockerfileのベストプラクティスを基に検査できるツールです。そのため、Trivy では検知できない脆弱性を検査できます。
3. ポリシーチェック
Kubernetesのリソースは、マニフェストに定義して登録します。そのマニフェストの内容が正しいか、許可できるものかをチェックしてセキュリティを高める必要があります。
GitOpsではCI時にConftestというツールを利用してマニフェストをチェックできます。さらに、CD時にGatekeeperというツールを利用してKubernetesクラスタ登録時にチェックできます。その際、ポリシーチェックに利用するポリシーエンジンがOpen Policy Agentです。
a. Open Policy Agent
Open Policy Agent(以降OPA)は、軽量で汎用性のあるポリシーエンジンで、YAMLやJSONのような構造化したデータのポリシーエンジンです。REGOという言語でポリシーを記述します。Kubernetesでは、ConftestやGatekeeperとの組み合わせで利用されることが多いです。
b. Conftest
Conftestでは、OPAのREGO言語で記述したポリシーに従ってマニフェストをチェックできます。下図は、マニフェストに「runAsNonRoot」が定義されていればOK、されていなければNGとしてチェックする例です。
c. Gatekeeper
Gatekeeperは、Kubernetesの認証認可フローの拡張機能であるAdmission Controlから外部Webhookサーバとしてチェック依頼を受け、OPAの定義でチェックを行って登録の許可/拒否を返す仕組みです。
OPAと組み合わせて、ConftestでCI時にマニフェストのポリシーチェックを行い、GatekeeperでKubernetes登録時にポリシーチェックを行うことでセキュリティを高められます。
ここで、発表時に含まれていなかった内容を追加します。Software Supply Cahinセキュリティの観点で、インテグリティ保護としてマニフェストに署名を持たせる取り組みがあります。2022年10月末に開催された「KubeCon + CloudNativeCon North America 2022」での発表です。
- Trust But Verify: Bringing Supply Chain Integrity To CD GitOps
2022年11月に開催された「Kubernetes Meetup Tokyo #54」においてもRecap Sessionとして発表されました。動画も公開されています。
日々進化を続けているので、情報をキャッチアップする必要があります。
手元で始める GitOps
以下のツール及びサービスを利用したGitOps環境でデモを行いました。
・Continuous Integration
- GitHub Actions
・Continuous Deliverty
- Argo CD
・Kubernetes Cluster
- Oracle Container Engine for Kubernetes (OKE)
・Container Registry
- Oracle Cloud Infrastrucutre Registry (OCIR)
下図は、デモ構成です。
- ソースコード更新後、Codeリポジトリ(GitHub)にプッシュ(手動)
- GitHub Actionsによるビルド、コンテナイメージビルド、OCIRにコンテナイメージプッシュ
- GitHub ActionsによるOCIRへのコンテナイメージプッシュ
- GitHub ActionsによるConfigリポジトリ(GitHub)へのプルリクエスト
- GitHub ActionsによるConftest(ポリシーチェック)の実行
- プルリクエストをマージ(手動)
- Argo CDによるConfigリポジトリのポーリング
- Argo CDによる適用処理
- Gatekeeperによるポリシーチェック
- ブラウザによる確認(手動)
デモで使用したソースコードやマニフェストはochacafe-s4-3にあります。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「GitOps」を活用して、アプリケーションを効率的かつ自動的にデプロイする
- HelmfileでKubernetesマニフェストやKustomization、Helm Chartなどで構成されるアプリケーションを効率的に管理する
- CNDT 2022、ChatworkのSREがコンテナセキュリティのための新しいツールを紹介
- CNDT2020シリーズ:CAのインフラエンジニアが解説するKubernetesネイティブなCI/CD
- CNDT2021、クラスター運用自動化をGitOps的に行う方法論をサイバーエージェントのエンジニアが解説
- CNDT 2022、ArgoCDとGitHub Actionsの導入でリリース時間を1/4に削減した事例を紹介
- CNDT2020シリーズ:オススメのGitOpsツールをCAのインフラエンジニアが解説
- インフラエンジニアの視点で見る、DevOpsを実現するためのツールとは
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは