Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう

2023年7月4日(火)
大関 研丞 (Kenneth Ozeki)
第5回となる今回は、Policy as Codeの概要を解説し、「Pulumi CrossGuard」を利用してPulumiでリソースを作成する際のポリシーチェック を行うハンズオンを実践していきます。

はじめに

前回はPulumiのSecurityについて解説しました。今回は、前回で少し触れたPulumi Policy as Codeのポリシーエンジンとなる「Pulumi CrossGuard」について解説していきます。後半のハンズオンでは、「Pulumi CrossGuard」を利用して実際にPulumiでリソースを作成する際のポリシーチェックの様子を確認していきます。

Policy as Codeについて

そもそも、Policy as Codeとはなんでしょうか? まず、その概要を少しおさらいします。

Policy as Codeの概要

一般的に、Policy as Code(PaC)とはインフラストラクチャやアプリケーションのあるべき姿をあらかじめコードとしてポリシー定義し、インフラストラクチャデプロイ時などにポリシーチェックを実施するアプローチです。「AWS S3にインターネット公開の設定を持たせないようにしたい」「スペックの高すぎるインスタンスを作らせたくない」「リソースの名前にある特定の文字を含めるようにしたい」場合など、通常はリソース作成前に目視で設定内容を精査しますが、これをコードで自動的にチェックできるようにするのがPaCの考え方です。

アプリケーションやインフラストラクチャから、PaCによるポリシーチェック機能を切り離してアーキテクチャを考えることができます。第1回でも説明したInfrastructure as Codeと同様に、ポリシーもコードとして定義するため、ソフトウェアエンジニアリングでお馴染みのGitなどによるバージョン管理、CI/CDの活用、レビュー手法の導入など、DevOpsとの親和性も高いです。

Policy as Codeの代表的なポリシーエンジン

年々Policy as Code(PaC)の注目度が高まってきている中、本記事を執筆している現在(2023年6月時点)までの代表的なPaCのポリシーエンジンとして、例えば以下のものが挙げられます。

  • Open Policy Agent(OPA)
    クラウドネイティブ環境でのPaCのための汎用的なオープンソースソフトウェアです。コードを定義するための宣言型言語(Rego)と、ポリシーの評価を行うAPIを提供しています。汎用的なポリシーエンジンだけあって、Kubernetes、Docker、LinuxやAWSなどのクラウドプロバイダーでも利用できます。
  • Terraform Policy as Code(Sentinel)
    HashiCorp社が提供するオープンソースのIaCツール「Terraform」のSaaS「Terraform Cloud」で有料プランとしてPolicy as Codeの機能が提供されています。HCLで記述したtfファイルについて、Policy as Codeを使用してリソースの作成や変更に対する制約やガイドラインを定義できます。元々HashiCorp社が提供するPaCフレームワーク「Sentinel」と組み合わせて利用されます。
  • Kubernetes Pod Security Admission
    Kubernetesクラスタ内でのPodのポリシーをチェックするためのツールです。Pod Security Standardsに基づいてPodのSecurityContextを自動チェックします。
  • Pulumi CrossGuard
    Pulumi CrossGuardはPulumiの一部として提供されるポリシーエンジンでオープンソースとして提供されており、Pulumi独自のポリシーエンジンです。CrossGuardを使用することでPulumiのプロジェクトにポリシーチェックを実行し、リソースの作成や変更に対するポリシーの遵守を確保できます。

以上のように、コンテナ/サーバ/クラウドプロバイダー/IaCツールなど、様々な場面でそれぞれ活用できるポリシーエンジンが存在することから、PaCに対する注目度の高さが伺えます。

Pulumi CrossGuardについて

Pulumi CrossGuardの概要

前述の通り、Pulumi CrossGuardはPulumiが提供するポリシーエンジンで、Pulumiでリソース作成前のプレビュー時(pulumi preview)およびアップデート時(pulumi up)に自動的にポリシーをチェックする機能です。

Pulumiでは、ポリシー設定の1単位を「Policy」と呼び、Policyの集合を「Policy Pack」と定義しています。ポリシー違反時のアクションは「Enforcement Level」と呼ばれ、「Disabled(何もしない)」「Advisory(違反メッセージのみ出力)」「Mandatory(デプロイブロック)」の3つが選択できます。最終的に、Enforcement LevelとPolicy Packを組み合わせてポリシーチェックが行われます。

PulumiのPolicy as CodeはPolicy PackとEnforcement Levelの組み合わせ

Pulumi CrossGuardのポリシーチェックには2通りの方法があり、ポリシーをあらかじめPulumi Cloud(SaaS)に用意する方法と、ローカル環境に用意する方法があります。Pulumi Cloud側でポリシーを用意してポリシーチェックしたい場合は、Pulumiの有償プラン「Business Critical」に加入する必要がありますが、ローカル環境で用意したポリシーの設定を利用してポリシーチェックを実施したい場合は無料で利用できます。

Pulumi Cloud側 ポリシー設定

$ pulumi preview --policy-pack ../policypack
Previewing update (dev)

View Live: https://app.pulumi.com/***/test-program-cl/dev/previews/2c069b1c-1399-4fa3-88fe-***

     Type                 Name                 Plan       Info
 +   pulumi:pulumi:Stack  test-program-cl-dev  create     1 error
 +   └─ aws:s3:Bucket     my-bucket            create     


Diagnostics:
  pulumi:pulumi:Stack (test-program-cl-dev):
    error: preview failed

Policy Violations:
    [mandatory]  aws-python v0.0.1  s3-no-public-read (aws:s3/bucket:Bucket: my-bucket)
    Prohibits setting the publicRead or publicReadWrite permission on AWS S3 buckets.
    You cannot set public-read or public-read-write on an S3 bucket. Read more about ACLs here: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html
    
Outputs:
    bucket_name: output<string>
【ローカル環境で用意したポリシーを利用している様子】

ポリシー自体の言語は現在(2023年6月時点)、TypeScript/JavaScript/PythonがStableで利用でき、Open Policy Agent(OPA)はPreviewとなっています。公式ではポリシーのサンプルファイルがAWS/GCPなどの各クラウドプロバイダー、およびJavaScript/Pythonなどの言語でそれぞれこちらに用意されているので、参考にしてください。

また、CrossGuardではユーザ自らがポリシーを用意しますが、AWSのためのポリシーチェックのベストプラクティスに基づいてあらかじめ用意されたポリシーのセットがオープンソースライブラリとして利用できます(AWSGuard)。まだpreview版ですが、気になる方はぜひ触ってみてください。なお、AWSGuard利用にはNode.jsのインストールが必要になります。

Pulumi CrossGuardポリシーチェックイメージ

Pulumi CrossGuardによるポリシーチェックは、下図のようなイメージになります。前述の通り、ローカル環境でポリシーを用意するか、Pulumi Cloudで用意するかで少し作業手順は異なります。

・ローカル環境のポリシーチェック
無料プランを含め、Pulumiの全プランで利用できる方法です。Pulumi CLIを実行するローカル環境にあらかじめポリシーのコードを用意し、実際にリソース作成のコマンド(pulumi up)やプレビュー(pulumi preview)を実行する際にポリシーを格納するディレクトリのパスを指定してポリシーチェックを行います。ポリシーに違反したリソースがある場合は、コマンド実行環境のCLIに違反内容が標準出力されます(Enforcement Levelが「Advisory」「Mandatory」の場合)

ローカル環境におけるポリシーチェックイメージ

・Pulumi Cloud (SaaS)のポリシーチェック
Pulumiの有償プラン「Business Critical」でのみ利用できる方法です。ポリシーの設定(Policy Pack)自体はPulumi Cloudで保持されますが、事前にポリシーのコードをローカル環境に用意して、「pulumi policy publish」コマンドでPulumi Cloudにポリシー設定を一度pushする必要があります。どのポリシーをどのPulumi Stackに、どのEnforcement Levelで適用するかの設定も、あらかじめ「Policy Group」として定義しますが、Policy Groupの定義はPulumi CloudのGUIコンソール画面か、またはPulumi CLIから実行できます。

Policy Groupを適切に設定したら、あとは通常通りリソース作成コマンド(pulumi up)を実行すれば、ポリシーのチェックが自動的に行われます。ポリシーに違反したリソースがある場合は、コマンド実行環境のCLIに違反内容が標準出力され、かつPulumi CloudのStack更新履歴にもその違反内容が記録されます。

Pulumi Cloudにおけるポリシーチェックイメージ

Business Criticalでのみ利用可能なPulumi Cloudでのポリシーチェックは、無料プランのローカル環境のポリシーチェックと比較して、以下の点が優れていると言えます。

  • ポリシー設定と適用対象のStackとの紐付けを「Policy Group」として定義するため管理がしやすい
  • あらかじめPolicy Groupを定義しなくても、全てのStackにデフォルトでポリシーチェックをが行うPolicy Group「default-policy-group」がPulumiで事前に用意されている(最初はdefault-policy-groupのポリシー設定(Policy Pack)は空だが、全てのStackが自動的にdefault-policy-groupに紐付けられる)
  • ポリシーに違反したリソースの更新履歴がPulumi Cloudで保管され、閲覧できる

Pulumiが事前に用意するPolicy Group「default-policy-group」

Pulumi Cloudでのポリシーチェックについて気になる方は、有償プランの2週間トライアルが用意されているため、ぜひ試してみてください。以降のハンズオンでは無料プランでも利用できるローカル環境のポリシーチェックを実践していきますので、ご心配なく。

著者
大関 研丞 (Kenneth Ozeki)
クリエーションライン株式会社 Data Platform Team
前職では保険や金融エンタープライズのミッションクリティカルシステム(オンプレミス、仮想サーバー、CDN等のインフラ系業務)の設計/構築を経験。クリエーションラインに転職後はクラウドエンジニアとしてGCP関連の案件でインフラの設計/構築、IaCやCI/CDを用いたDevOpsの導入、コンテナ(Kubernetes)基盤の構築、運用自動化ツールの作成などを担当。
クリエーションラインの技術ブログをチェック

連載バックナンバー

システム運用技術解説
第10回

Pulumiの最新機能「Pulumi ESC」を使ってみよう

2023/12/26
最終回となる今回は、2023年12月時点でリリースされている新機能の紹介と、その新機能の中から「Pulumi ESC」を用いたハンズオンを実践していきます。
システム運用技術解説
第9回

TerraformからPulumiへの移行

2023/11/28
第9回となる今回は、既にTerraformでAWS環境に作成されているリソースをPulumiへ移行するケースを想定して、CoexistenceとConversionのハンズオンを実践していきます
システム運用技術解説
第8回

既に存在するリソースをPulumiで管理してみよう

2023/10/19
第8回となる今回は、既にクラウド環境にデプロイされているリソースをPulumiで管理(import)する方法について、ハンズオンで実践していきます。

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

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

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

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