Anthos on GKE を Terraform でデプロイする パート 2: Policy Controller によるガードレール
Google Cloud Japan Team
※この投稿は米国時間 2021 年 9 月 28 日に、Google Cloud blog に投稿されたものの抄訳です。
この投稿は、Terraform と Anthos Config Management(ACM) を併用する方法を紹介するシリーズのパート 2 です。前回の記事と例では、Terraform を使ってクラスタを作成し、その構成を Git から Config Sync 経由で管理する方法を説明しました。この記事ではそれに基づいて、Policy Controller を介してクラスタのガードレールを追加します。Policy Controller は、クラスタに完全にプログラム可能なポリシーを適用できるようにする Anthos Config Management 内のプロダクトです。これから説明するように、これらのポリシーは、クラスタの構成に対する変更を監査または防止し、セキュリティ、運用、またはコンプライアンスの管理策を実施できます。
Policy Controller に組み込まれている制約テンプレート ライブラリと CIS Kubernetes Benchmark v.1.5.1 に準拠した制約のバンドルによって、Kubernetes クラスタ リソースの継続的な監査を可能にします。簡単に説明すると、制約テンプレートは、ポリシーを宣言的に記述するためのメカニズムを提供し、Policy Controller には、Kubernetes におけるいくつかの重要なベスト プラクティスを実現するための制約テンプレートの実装を備えたライブラリが組み込まれています。
ここでは、シンプルにするために、Policy Controller の dryrun 適用アクションによるクラスタの監査を行います。その名のとおり、違反行為を記録するだけで、クラスタには影響を与えない「ドライラン」です。ただし、これらの制約と、それらが本番環境ワークロードとどのように共存するかを理解したら、ポリシーに違反する構成がクラスタを変更するのをアクティブにブロックする、Policy Controller の deny 適用アクションの使用を検討する必要があります。これにより、チームによるポリシー違反を防ぐためのガードレールが提供され、一元化されたレビューが自動的に行われるようになり、チームはワークロードを安全に運用し続けることができます。
ここでパート 2 の例の内容を見ると、パート 1と比較した主な違いは、クラスタを管理する Terraform 構成にあります。具体的には、以下のような簡潔なブロックが追加されました。
これだけで、Policy Controller を有効にして、制約テンプレート ライブラリをクラスタにインストールできます。
また、パート 1 との違いとして、config-root/cis-k8s-1.5.1 ディレクトリがパート 1 の Config Sync でクラスタに同期された config ルート ディレクトリに作成されます。これは acm-policy-controller-library リポジトリ から便利な kpt ツールを使ってリポジトリに pull された Policy Controller 制約のバンドルです。
このバンドルの目的は、Kubernetes の CIS ベンチマークを監査し、実施することです。前述のように、制約はドライラン モードでデプロイされているので、クラスタの監査に使用できます。 それぞれの制約を直接調べて、該当する違反を確認できます。この例では、非常に便利なツールである jq を使用して、違反情報に焦点を当てて出力をフィルタリングしています。
このコマンドは、違反事項とそれが抵触している制約をグループ化します。コンテナによる上位権限取得を警告している例を次に挙げます。
Policy Controller を使用すると、デフォルトの Wordpress インストールが、セキュリティを最重要視して構成されていないことは明らかです。この例では、アプリケーションにありがちな不必要な権限昇格が見られます。しかし、Google Cloud Platform のTerraform プロバイダでの Policy Controller の新規サポートにより、CIS ベンチマークや必要なカスタム ポリシーなどのベスト プラクティスの監査と実施が非常に簡単になりました。
このサンプル リポジトリでは、独自のポリシーのカスタマイズと実施を開始するために使用できる完全な例と詳細な手順を提供しています。また、Policy Controller 制約ライブラリに収録されている他のベスト プラクティスもあわせて検討することをおすすめします。このチュートリアルでは、CI パイプラインで会社のポリシーに対してアプリを検証する方法について説明しています。
また、パート 1で学んだように、これらはすべて Config Sync を介して Git で駆動することができ、管理性に加えて、セキュリティ対策の認証要件にも有利です。シリーズの最終回となる次回は、Config Connector を使って、同じ Kubernetes ネイティブ モデルとツールを使って GCP クラウドのリソースをプロビジョニングする方法をご紹介します。
- エンジニアリング マネージャー Steven Linde
- エンジニアリング マネージャー Alex Bulankou