「Oracle Cloud Hangout Cafe (OCHaCafe)」ダイジェスト 1

Oracle Cloud Hangout Cafe Season4 #3「CI/CD 最新事情」(2021年6月9日開催)(2ページ目)

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パイプラインに組み込む上でセキュアで高速であることが望ましいです。こうした要望に対応するビルドツールもいくつかあります。ここでは、BuildKitKanikoを紹介します。

BuildKitは、Dockerfileの命令を並列実行、キャッシュ判定の仕組みで高速にビルドを実行します。そして、非Root / 非Privilegedな実行、DockerfileのRUN 命令を実行する際にseccomp*1を有効化する仕組みによってセキュアにビルドできます。

Kanikoは、OSやコンテナランタイムに依存せずにコンテナイメージをビルドする場合に有用です。コンテナ内のユーザ空間でビルドすることで、CIで推奨されるDooD*2でのRoot権限で稼働しているホスト上へのセキュリティリスクを回避できます。

*1:コンテナ内のプロセスが呼び出せるシステムコールを制限できるLinuxカーネルの機能
*2:Docker outside of Docker。起動したコンテナからホストのDockerデーモンでイメージビルドする方法

2. イメージスキャン
コンテナイメージもセキュアであることが望まれます。マネージドサービスのコンテナイメージレジストリに脆弱性検査機能が実装されていますが、CI時に脆弱性スキャンをかけて検査したコンテナイメージをレジストリにプッシュすることでセキュリティを高めることもできます。ここでは、Trivydockleを紹介します。

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としてチェックする例です。

Conftest

c. Gatekeeper
Gatekeeperは、Kubernetesの認証認可フローの拡張機能であるAdmission Controlから外部Webhookサーバとしてチェック依頼を受け、OPAの定義でチェックを行って登録の許可/拒否を返す仕組みです。

Gatekeeper

OPAと組み合わせて、ConftestでCI時にマニフェストのポリシーチェックを行い、GatekeeperでKubernetes登録時にポリシーチェックを行うことでセキュリティを高められます。

OPA/Conftest/Gatekeeper

ここで、発表時に含まれていなかった内容を追加します。Software Supply Cahinセキュリティの観点で、インテグリティ保護としてマニフェストに署名を持たせる取り組みがあります。2022年10月末に開催された「KubeCon + CloudNativeCon North America 2022」での発表です。

日々進化を続けているので、情報をキャッチアップする必要があります。

手元で始める 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)

下図は、デモ構成です。

デモ構成

  1. ソースコード更新後、Codeリポジトリ(GitHub)にプッシュ(手動)
  2. GitHub Actionsによるビルド、コンテナイメージビルド、OCIRにコンテナイメージプッシュ
  3. GitHub ActionsによるOCIRへのコンテナイメージプッシュ
  4. GitHub ActionsによるConfigリポジトリ(GitHub)へのプルリクエスト
  5. GitHub ActionsによるConftest(ポリシーチェック)の実行
  6. プルリクエストをマージ(手動)
  7. Argo CDによるConfigリポジトリのポーリング
  8. Argo CDによる適用処理
  9. Gatekeeperによるポリシーチェック
  10. ブラウザによる確認(手動)

デモで使用したソースコードやマニフェストはochacafe-s4-3にあります。

この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る