HashiCorpがSentinelをリリースした。同社エンタープライズ製品に統合するための、組み込み用“ポリシ・アズ・コード”製品だ。インフラストラクチャ・アズ・コードなどのHashiCorpプラットフォームツールと組み合わせることで、組織や法令、あるいはセキュリティに関するポリシの自動監査や(必要ならば)強制の可能な、“詳細かつロジックベースのポリシ定義”を実現する。
HashiCorpが現在提供しているインフラストラクチャ自動化ツールのスイートでは、インフラストラクチャのプロビジョンや保護、接続、実行といった操作が可能である - これらの機能はそれぞれ、人気の高いオープンソースプロジェクトであるTerraformやVault、Consul、Nomadによって実現されている。Tao of HashiCorpによると、これらツールは共通の“インフラストラクチャ・アズ・コード(IaC)”上に構築されることによって、大規模インフラストラクチャ管理のコード化と自動化を実現している。インフラストラクチャの生成・変更・破棄を可能にするこの機能は、大規模な組織においては、経験の少ないユーザや設定の不十分なオートメーションによる重大な誤りが業務に影響を与えるというリスクも伴う。
最新のインフラストラクチャプラットフォームやツールの多くは、何らかのアクセス管理機能を備えている。また、クラウドベンダの大半は、IAM(Identity and Access Management)スタイルのポリシとACL(Access Control List)管理を提供している。これによってエンジニアはID(Identity)と、そのIDがアクセス可能なものを定義することができる。HashiCorp SentinelのWebページによると、これらACLシステムが“非常に大まかな形でシステムをロックダウンするという目先の問題解決を図っている”のに対して、Sentinelは、より高度なソフトウェアポリシ決定のための再利用可能なシステムである。
既存のポリシシステムやACLシステムのほとんどは、ポリシをコードとして実施するのではなく、GUIをクリックすることで設定します。従って再現性が乏しく、バージョン管理ができません。また、ポリシをテストするシステムが提供されていないため、通常はポリシに反するアクションをテストするしかなく、自動テストが難しくなっています。ポリシ言語自体も製品毎に異なります。
Sentinelでは、組織や規制ポリシをテキストベースの設定としてコード化することによって、インフラストラクチャ変更のリスクを制限し、安全性を保証することができる。SentinelはTerraform Enterprise、Vault Enterprise、Consul Enterprise、Nomad Enterprise -- 各ツールのオープンソース版は現時点ではサポート対象外 -- にポリシ・アズ・コードを導入することで、システム実行時の“ガードレール”、ビジネス要件や法令などの遵守を能動的かつリアルタイムに実施する。つまり、事後形式の監査ツールではないのだ。
Sentinelは以下を可能にする。
- ポリシ・アズ・コード: ポリシをアプリケーションのように扱う - バージョン管理、コードレビュー、テスト、自動化。ポリシの構文や動作はSentinelで容易に検証できる。提供されるCLIを使ったテストの自動化も可能だ。VCSシステムと組み合わせることにより、マージ前のシステムの期待動作が維持されていることを検証する、プルリクエストワークフローが実現する。
- 詳細かつ条件ベースのポリシ: 読み込み、書込み、管理者といった粗いポリシではない、任意の入力に対する実行拒否が可能である。公開されているSentinel SDKを使えば、独自システムから外部情報にアクセスするプラグインを誰でも作成することができる。ポリシロジックをコードとして表現することにより、ポリシに関する情報やロジックが直接コードで表されるため、ポリシの理由を口頭で伝えるのではなく、コメントによって補足することが可能になる。
- 複数の実施レベル: Advisory、soft-mandatory、hard-mandatoryというレベルによって、ポリシ記述者が違反行為を適切な重大度で警告ないし拒否したり、すべてのアクティビティを監査用にログ記録することが可能になる。
- マルチクラウド対応。すべてのインフラストラクチャプロバイダ上において、インフラストラクチャの変更がビジネスおよび法的ポリシ内にあることを確認する。
Sentinelでは、独自のポリシ言語を定義して使用している。ポリシ定義者が開発者ではない可能性のあるユースケースが多々あることから、言語はプログラマでなくてもアプローチ可能なように設計されている。言語に関する詳細は、“Writing Policy”の章やSentinelの言語リファレンスで確認することができる。
開発目的でポリシをローカル実行するためには、sentinel apply
コマンドを使用して、sentinel apply [オプション] POLICY
のように行なう。このコマンドはPOLICYで指定されたパスにあるポリシファイルを実行し、ポリシがパスしたかどうかを出力する。設定ファイルを--config
で指定して、利用可能なインポートプラグインやモックデータ、グローバル値を定義することも可能である。これはアプリケーション内に組み込まれたポリシのシミュレートに使用する。使用可能なフラグには次のものがある。
- -config=path – 利用可能なインポート、モックデータ、グローバルなどを指定した設定ファイルのパス。モックデータには、組込みのSentinel Simulatorでテストする複雑なシナリオを任意に定義することができる。
- -global key=value – 実行するポリシに挿入するグローバル値。
- -explain – 実行トレースを常に表示する。これにより、実行中のブール式の値が表示される。フェールしたポリシは常に表示される。
タグのないリソースのプロビジョンを禁止するTerraform Sentinelポリシファイルの例を以下に示す。
import "tfplan" main = rule { all tfplan.resources as r { r.attr contains "tags" and length(r.attr.tags) > 0 } }
HashiCorpのツーリングは使用していないが、ポリシ・アズ・コードのこのアプローチを希望するのであれば、awspec - AWSリソースのRSpecテスト、Azure Resource Managerテンプレート、Google Deployment Managerベストプラクティスなどのツーリングを検討するとよいだろう。AWS ConfigやAzure Advisorといったツーリングを使用すれば、事後のコンプライアンスやセキュリティ監査、レポート作成なども実装することができる。
HashiCorp Sentinelに関するさらなる詳細情報は、HashiCorpのWebサイトやSentinel発表ブログ記事にある。
この記事を評価
- 編集者評
- 編集長アクション