DevOps Bootcamp · レッスン

ガバナンスのための Sentinel ポリシー

HashiCorp Sentinel を使って Policy as Code を記述・適用し、Terraform のデプロイ全体でコンプライアンスとガバナンスを確保する方法を学びます。

レッスン 2/411 ステップ

「ガバナンスのための Sentinel ポリシー」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

ポリシー・アズ・コードと Sentinel の概要

インフラストラクチャのデプロイが一定のルールを満たしていることを自動的に保証できるとしたら、どうでしょうか。それを実現するのがポリシー・アズ・コード(PaC)の力です。PaC では、インフラストラクチャの作成や変更に関するルールをプログラム可能な形で定義し、開発ワークフローにガバナンスを組み込みます。HashiCorp Sentinel は、この目的のために設計された強力な PaC フレームワークです。

Terraform における Sentinel の役割

Sentinel は Terraform Cloud および Terraform Enterprise と直接統合できます。Sentinel はゲートキーパーとして機能し、クラウド環境に変更を適用する前に Terraform の実行プランを評価します。この重要な手順により、コンプライアンスに違反するインフラストラクチャや安全でないインフラストラクチャがプロビジョニングされるのを未然に防ぎ、ルールを事前に適用できます。

ポリシーと適用レベル

Sentinel ポリシーは、Sentinel 言語で記述されたルールの集合です。ポリシーが実行されると、true(合格)または false(不合格)が返されます。ポリシーには、次のような異なる適用レベルを設定できます。

  • Advisory:違反を警告しますが、操作の続行は許可します。
  • Soft-Mandatory:コンプライアンスに違反する変更を続行するには、明示的なオーバーライドが必要です。
  • Hard-Mandatory:コンプライアンスに違反する操作を完全にブロックし、ポリシーへの準拠を要求します。

Sentinel ポリシーの構造

Sentinel ポリシーは .sentinel ファイルで定義します。通常は、インポート、ルール、メイン条件で構成されます。main ルールによって、ポリシーの合格または不合格が決まります。

基本的なポリシーは、次のようになります。

import "tfplan"

main = rule {
  tfplan.resource_changes is empty
}

Terraform プランデータへのアクセス

tfplan インポートは、Terraform の実行プランを構造化された形で提供します。ポリシーでは、このデータを使用して次の項目を検査します。

  • tfplan.resource_changes:作成、更新、削除されるリソースの詳細。
  • tfplan.variables:設定に渡された入力変数。
  • tfplan.outputs:設定からの出力値。

このデータは、Terraform が実行しようとしている内容に基づいて、適切なポリシー判断を下すために重要です。

例:承認されていないリージョンを拒否する

すべての AWS リソースが us-east-1 にのみデプロイされるように、Sentinel ポリシーを記述してみましょう。このポリシーでは、プラン内の各 AWS リソースに設定されたリージョンを確認します。

import "tfplan/v2" as tfplan

allowed_regions = ["us-east-1"]

is_region_allowed = func(resource_change) {
  if resource_change.provider.name is "aws" {
    region = resource_change.provider.config.region else "us-east-1"
    return region in allowed_regions
  }
  return true # Not an AWS resource, allow
}

all_regions_compliant = all tfplan.resource_changes as _, rc {
  is_region_allowed(rc)
}

main = rule {
  all_regions_compliant
}

ポリシーの関数と演算子

Sentinel には、複雑なロジックを記述するための強力な組み込み関数と演算子が用意されています。

  • コレクション関数:リストやマップを反復処理するための all、any、filter、map。
  • 型関数:データ型を確認するための is、type_of。
  • 演算子:論理演算子(and、or、not)と比較演算子(==、!=、>、<)。

これらを使うと、さまざまなシナリオに対応できる堅牢で表現力の高いポリシーを構築できます。

例:必須タグを適用する

ガバナンスでよくある要件の一つは、コスト配分や識別のために、リソースに特定のタグを付けることです。このポリシーでは、新規または更新されたすべての aws_instance リソースに Project タグが付いていることを保証します。

import "tfplan/v2" as tfplan

required_tags = ["Project"]

resource_has_required_tags = func(resource_change) {
  if resource_change.type is "aws_instance" {
    # Check if 'tags' attribute exists in the planned state
    if not ("tags" in resource_change.change.after) {
      return false
    }
    
    missing_tags = filter required_tags as tag {
      not (tag in resource_change.change.after.tags)
    }
    return missing_tags is empty
  }
  return true # Not an aws_instance, allow
}

all_instances_tagged = all tfplan.resource_changes as _, rc {
  (rc.change.actions contains "create" or rc.change.actions contains "update") ?
    resource_has_required_tags(rc) :
    true # Only check on create/update actions
}

main = rule {
  all_instances_tagged
}

ローカルでのポリシーテスト

Terraform Cloud/Enterprise にポリシーをデプロイする前に、Sentinel CLI を使ってローカルでテストできます。sentinel test コマンドでは、モックの tfplan データを使ってテストケースを定義できます。これにより、ライブ環境に影響を与えることなく、ポリシーが意図どおりに動作することを検証し、早い段階でエラーを発見できます。

ポリシーロジックの確認

パブリックな読み取りアクセスを許可した AWS S3 バケットが作成されないようにする Sentinel ポリシーを作成する必要があります。これを適用するには、tfplan データのどの部分を主に検査しますか?

まとめ:Sentinel によるガバナンス

ガバナンスのための強力なポリシー・アズ・コードフレームワーク、HashiCorp Sentinel について学びました。

  • Terraform Cloud/Enterprise と統合して、ルールを適用できます。
  • ポリシーは、インフラストラクチャが適用される前に tfplan を評価します。
  • 異なる適用レベル(Advisory、Soft-Mandatory、Hard-Mandatory)によって、ポリシーの影響を制御できます。
  • リージョンの拒否やタグの適用など、さまざまなポリシーを記述できます。
  • ローカルテストにより、デプロイ前にポリシーが意図どおりに動作することを確認できます。

Sentinel は、インフラストラクチャのデプロイ全体でコンプライアンス、セキュリティ、運用基準を維持するための重要な仕組みです。

無料で開始

AI チューターと学ぶ DevOps Bootcamp — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
142
レッスン
568

よくある質問

「ガバナンスのための Sentinel ポリシー」レッスンは無料ですか?

はい。「ガバナンスのための Sentinel ポリシー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「ガバナンスのための Sentinel ポリシー」で何を学びますか?

HashiCorp Sentinel を使って Policy as Code を記述・適用し、Terraform のデプロイ全体でコンプライアンスとガバナンスを確保する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ガバナンスのための Sentinel ポリシー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. マルチクラウドとハイブリッドクラウドのパターン
  2. ガバナンスのための Sentinel ポリシー
  3. Terraform Cloud と Enterprise
  4. カスタムプロバイダーの構築
← DevOps Bootcampに戻る