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

2023年1月19日(木)
市川 豊
連載第1回目の今回は、2021年6月9日に開催された「Oracle Cloud Hangout Cafe Season4 #3『CI/CD 最新事情』」の発表内容に基づいて紹介していきます。

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にあります。

日本オラクル株式会社

Oracle Groundbreaker Advocate
Principal Cloud Solution Engineer

これまで、インフラエンジニア、フロントエンドエンジニアとして官公庁のシステム基盤を中心としたサーバの設計構築、運用保守、Webシステム開発を担当。技術教育者として専門学校でクラウド技術やOSS(Linux、Docker、Kubernetes)の授業を担当し、企業様向けプライベートトレーニング講師も担当。 アドボケート/エバンジェリストとしてミートアップ、カンファレンスで登壇。現在は、クラウドネイティブ技術を中心とするソリューションエンジニアとして活動。クラウドネイティブ技術に関連するコミュニティの運営にも積極的に参加。

Community:
Oracle Cloud Hangout Cafe メンバー (#ochacafe)
CloudNative Days Tokyo 実行委員会メンバー (#CNDT)

Book:
著書「Dockerコンテナ開発・環境構築の基本」(インプレス)
共著「RancherによるKubernetes活用完全ガイド」(インプレス)、「コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤」(翔泳社)

連載バックナンバー

仮想化/コンテナ技術解説
第6回

Oracle Cloud Hangout Cafe Season6 #1「Service Mesh がっつり入門!」(2022年9月7日開催)

2023/6/22
連載第6回の今回は、2022年9月7日に開催された「Oracle Cloud Hangout Cafe Season6 #1『Service Mesh がっつり入門!』」の発表内容に基づいて紹介していきます。
仮想化/コンテナ技術解説
第5回

Oracle Cloud Hangout Cafe Season5 #5「実験! カオスエンジニアリング」(2022年5月11日開催)

2023/5/18
連載第5回の今回は、2022年5月11日に開催された「Oracle Cloud Hangout Cafe Season5 #5『実験! カオスエンジニアリング』」の発表内容に基づいて紹介していきます。
仮想化/コンテナ技術解説
第4回

Oracle Cloud Hangout Cafe Season5 #3「Kubernetes のセキュリティ」(2022年3月9日開催)

2023/4/18
連載第4回の今回は、2022年3月9日に開催された「Oracle Cloud Hangout Cafe Season5 #3『Kubernetes のセキュリティ』」の発表内容に基づいて紹介していきます。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています