ここからは、マニフェストのセキュリティ対策としてCodeリポジトリからConfigリポジトリへのプルリクエストをトリガーにConftestを利用したOpen Policy Agent(OPA)によるポリシーチェックについて学びます。
Kubernetesのすべてのリソースは、マニフェストに記述して登録します。そのマニフェストの内容が正しいか、許可できるものかをチェックしてセキュリティを向上する必要があります。
GitOpsではCIにConftestというツールを用いて、Kubernetesクラスタ登録前にポリシーチェックを行うことができます。Conftestが行うポリシーチェックでは、内部でOpen Policy Agent(OPA)というポリシーエンジンが利用されています。
ConftestとOpen Policy Agent(OPA)については、次のチャプターで説明します。
本ハンズオンでは、CodeリポジトリからConfigリポジトリにプルリクエストするタイミングで、Configリポジトリに設定するCI(GitHub Actions)を利用してポリシーチェックを行います。 GitHub Actionsの設定方法は、Codeリポジトリと同様です。Configリポジトリの「.github/workflows/main.yml」に定義します。 Codeリポジトリの設定では、Git Push をトリガーにしましたが、今回はプルリクエストをトリガーにします。
まずは、ローカルにConfigリポジトリからクローンしたディレクトリに移動します。
$ cd ./cicd-handson-2021-config
GitHub Actionsの専用ディレクトリとmain.yamlを作成します。
$ mkdir -p .github/workflows
以下作成するmain.ymlの内容です。
アクションは、Validate Kubernetes manifests by conftest を利用します。 以下トリガー定義と指定の格納場所に対象のファイルを格納するだけで、ConftestをCI時に実行できます。
- 「on: [pull_request]」:プルリクエストをトリガーにする定義
- 「jobs.validation.steps.name.with.file」:ポリシーチェックするマニフェストのパス指定
- 「jobs.validation.steps.name.with.policy」:OPAのポリシーファイルのパス指定
name: Policy Check
on: [pull_request]
jobs:
validation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: validate manifest-dir with custom policies
uses: makocchi-git/[email protected]
with:
file: manifests/goapp.yaml
policy: policy/latest-tag-check.rego
token: ${{ secrets.GITHUB_TOKEN }}
上記の内容のmain.ymlを作成します。
$ vi .github/workflows/main.yml
次のチャプターでConftestとOpen Policy Agent(OPA)の説明とポリシーファイルの作成します。