In this article
コンプライアンス戦略におけるPolicy as Codeの重要性
Policy as Codeとは?
ポリシーは、ソフトウェアの品質、使いやすさ、安全性を確保するために組織が活用する重要な手段の一つです。ソフトウェアが要件に準拠しているかを確認する方法として手動レビューがありますが、時間がかかり、ミスが発生しやすく、規模の拡大にも対応できません。Policy as Code(PaC)は、ポリシーをコード化して適用することで、この意思決定プロセスを自動化します。インフラストラクチャを制御・管理するための検証手順の自動化にも活用できます。
Policy as Codeの仕組み
Policy as Codeを使うと、高水準の宣言型言語でポリシーをコード化し、ポリシーの意思決定プロセスを自動化できます。Policy as Codeツールは、監視対象のシステムやアプリケーションと連携し、これまで手作業で行っていたポリシーチェックの判断をシミュレーションします。
Policy as Codeツールが判断を出力するには、次の3つの入力が必要です。
ポリシー:ソフトウェアリリースがコンプライアンス要件を満たしているかどうかを判断するプロセスをモデル化したコードです。アプリケーションの品質、パフォーマンス、使いやすさ、セキュリティなどに関する条件を含めることができます。
データ:サービス、Kubernetesの設定、CI/CDツールなどに関する情報です。
クエリ入力:ポリシーとデータに基づく意思決定プロセスを開始します。
一般的なPolicy as Codeツールには、Rego言語を使うOpen Policy Agent(OPA)や、Sentinel言語を使うHashiCorp Sentinelがあります。OPAは汎用ツールですが、SentinelはTerraformなどのHashiCorp製品でのみ利用できます。
OPAはRego言語でポリシーを記述し、サービスとして実行されます。関連データをJSON形式でOPAのドキュメントストアに入力すると、OPAはデータとポリシーに基づいてクエリ結果を返します。
Policy as Codeの活用例
インフラストラクチャのプロビジョニング
Policy as Codeは、セキュリティ、運用、コンプライアンスに関するポリシーチェックの自動化に使われます。
APIの認可とアクセス制御
サービスの認可に関するポリシーを適用します。ポリシー適用プラットフォームは、CI/CDパイプライン、Kubernetes、クラウドプラットフォームなどで利用できます。
Kubernetesの制御
Kubernetesにはセキュアなクラスターを作成するための機能とアクセス制御が用意されていますが、セキュリティ機能は組み込まれていません。Policy as Codeを使えば、エンジニアや開発者がPod、ノード、クラスターなど、さまざまなKubernetesリソースに制御を実装し、適用できます。
コンプライアンスと監査
HIPAAやPCIなどの組織、業界、政府の基準では、ネットワーク、データストレージ、コンピューティングについて多くの要件が定められています。Policy as Codeを使えば、こうした要件をコード化し、開発プロセスの早い段階で取り入れられます。ポリシー、入力、クエリ結果を記録した決定ログにより、ポリシー判断の監査も可能です。
Policy as Codeを利用するメリット
Policy as Codeでは、ポリシーをテキストファイルにコード化するため、ポリシーの管理と適用にソフトウェア開発のベストプラクティスを取り入れられます。具体的には、バージョン管理、継続的インテグレーション、自動テスト、継続的デプロイなどが含まれます。
Policy as Codeには、手作業でポリシーをチェックする方法と比べて、次のようなメリットがあります。
より速く効率的なデプロイ
Policy as Codeを使うと、ポリシーを大規模に共有、適用できます。手作業でポリシーを適用するよりもはるかに効率的です。自動化によって運用も迅速化します。エンジニアはソフトウェア開発サイクルの早い段階でエラーやコンプライアンス違反を見つけ、ソフトウェアのデリバリーを改善できます。
テスト、ガバナンス、承認の自動化
CI/CDツールを使えば、ポリシーテストを簡単に自動化できます。デプロイ前に脆弱性やポリシー違反を特定し、ポリシーが満たされていることを確認できます。ポリシー自体はGUIで設定し、プルリクエストのワークフローでテストすることで、マージ前にシステムの動作が維持されることを確認できます。
より信頼性と安全性の高いアプリケーション
エンジニアが何百ものアプリケーションを手作業でチェックすると、ヒューマンエラーやポリシーの解釈の違いによるミスが避けられません。Policy as Codeを使えば、開発ライフサイクル全体を通じてポリシーを一貫して適用できます。ポリシーをセットにまとめることで、管理と適用も容易になります。
サンドボックス化
Policy as Codeは、アプリケーションを互いに隔離し、危険な動作を防ぐサンドボックスのガードレールを提供します。サンドボックスは自動化の度合いが高く、手作業での検証は現実的ではないため、安全な実装にはPolicy as Codeが不可欠です。
コラボレーション
ポリシーを体系的に作成、管理することで、チーム内外のコラボレーションが促進されます。たとえば、開発者とセキュリティチームが連携し、リリースが要件を満たしていることを確認できます。また、Policy as Codeによって、新しいリリースごとに開発者がポリシー担当者と何度もやり取りして承認を得る必要が減ります。開発者はPolicy as Codeツールを使って、コードの検証と修正を自動化できます。
インフラストラクチャのプロビジョニング
Policy as Codeは、インフラストラクチャの認可や利用に関するポリシーの作成と適用に利用できます。たとえば、インフラストラクチャの効率的な利用やファイアウォールの適用を目的としたポリシーを設定できます。これにより、企業はクラウドやハイブリッドインフラストラクチャを活用しながら、セキュリティとコンプライアンスの態勢を強化できます。
より優れたバージョン管理
ポリシーをテキストファイルで保存すると、ポリシー管理にバージョン管理のメリットを活用できます。ポリシーを更新するには既存のコードを変更するだけで済み、新しいポリシーで問題が発生した場合も、バージョン管理を使って以前の状態に戻せます。また、他のチームメンバーもポリシーの変更を簡単に把握できます。
コメントで背景を説明できるコード化されたポリシー
関係者はコードを確認することで、ポリシーの背景情報やロジックを理解できます。コメント機能を使えば、エンジニアやセキュリティチームに問い合わせる必要もありません。
Policy as CodeとInfrastructure as Codeの比較
最新のエコシステムには、Software as a Service(SaaS)、パブリッククラウドやプライベートクラウド、オンプレミスのインフラストラクチャ、仮想マシン、コンテナなど、多様なツールやデプロイモデルが含まれます。
企業は複数のクラウドプロバイダーを利用しますが、それぞれが独自のセキュリティプログラムを持っています。また、リソースのプロビジョニングには、さまざまなオーケストレーションツールや管理ツールを使用します。これらすべてのコンポーネントを連携させて、パッチが最新であることを確認し、脆弱性を検出、修正するには、専門知識が必要です。
インフラストラクチャへの変更の確認、承認、監査には時間がかかり、変更の提案から実装までの遅れにつながります。ライセンス、ハードウェア、ベンダーにかかるコストもあるため、運用上のニーズに効率的に応えることも大きな課題です。
コードを使ってインフラストラクチャのプロビジョニングを自動化する方法として、Infrastructure as Codeが登場しました。Policy as CodeはInfrastructure as CodeとDevOpsをつなぎます。さらに幅広いユースケースに対応し、セキュリティ、コンプライアンス、データ管理など、開発ライフサイクル全体で活用できます。
Policy as Codeツールには、複数のプラットフォームやインテグレーションへの対応、認可されたユーザーに限定したアクセス、最小権限の原則に基づくアクセス許可が求められます。ポリシーでは、許可リストやブロックリスト、またはその両方を使って境界を定め、クラウド全体とインフラストラクチャのライフサイクル全体にわたって、コンプライアンス状況を評価するためにインフラストラクチャを監視します。
Policy as Codeについて詳しく見る
OPAなどのツールを使うと、セキュリティなどのIT領域にPaCを簡単に適用できます。Snyk Infrastructure as Code (Snyk IaC)は、CI/CDパイプライン内のポリシースキャンにOPAを活用します。簡単なコマンドをいくつか実行するだけで、スキャンに独自のカスタムルールを追加できます。Snyk IaCのドキュメントと、記事Snykを使ったカスタムIaCルールの開発を確認して、さっそく始めましょう。