BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AWS CloudFormation Guardに、タイプブロック、フィルタリング、再利用可能なルールが追加

AWS CloudFormation Guardに、タイプブロック、フィルタリング、再利用可能なルールが追加

ブックマーク

原文(投稿日:2021/05/23)へのリンク

AWSは、CloudFormation Guardのバージョン2をリリースした。これはCloudFormationテンプレートを検証するためのオープンソースツールである。このリリースでは、タイプブロック、連言標準形のサポート、フィルター、名前付きルールなど、多数の新機能が導入されている。

Guardを使うと、ポリシーをコードとして記述できる。そして、このポリシーを使って、どのような形式のJSONファイルまたはYAMLファイルでも検証できる。これらのルールを使って、CloudFormation ChangeSetsTerraform JSON configuration構成ファイルKubernetes構成などのInfrastructure-as-Codeファイルをいくつでも検証できる。例えば、GuardをCIパイプラインに接続して、デプロイメントに移行する前にChangeSetが安全であることを検証できる。

このリリースでは、タイプブロックを使ってルールを記述できるようになった。これにより、句の間に暗黙のANDを使って、より簡潔なルールを記述できる。たとえば、ボリュームタイプがGP2でサイズが10GB未満の、すべてのEC2ボリュームが暗号化されているかどうかを検証するには、次のように記述できる。

AWS::EC2::Volume {
    Properties {
        Encrypted == true
        Size <= 10
        VolumeType == 'gp2'
    }
}

連言標準形(CNF)がサポートされるようになり、タイプブロック内にOR句を含めることができるようになった。上記の例は、GP2またはGP3ボリュームタイプのいずれかを許可するように変更できる。

AWS::EC2::Volume {
    Properties {
        Encrypted == true
        Size <= 10
        VolumeType == 'gp2' OR
        VolumeType == 'gp3'
    }
}

上記の例は、新しいIN演算子を使って記述することもできる。IN演算子を使うと、チェックする有効なオプションのリストを指定できる。

AWS::EC2::Volume {
    Properties {
        Encrypted == true
        Size <= 10
        VolumeType in ['gp2', 'gp3']
    }
}

フィルタリングと名前付きルールセットがサポートされるようになった。タイプブロックは、リソースのタイプによってのみ一致する簡略フィルターである。ルールに名前を付けると、ファイル内でルールブロックを再利用できる。AWSのシニアディベロッパーアドボケートであるMatteo Rinaudo氏は、次のように述べている。

フィルタと名前付きルールは、Guard 2.0で句を表現するための規定された方法です。両方の機能を使って、読みやすさを向上させ、リファクタリングをサポートし、高次の句のルールを再結合する際の完全な柔軟性を可能にします。

たとえば、リソースにタグが付いていることを検証するには、次の名前付きルールを定義できる。

rule assert_all_resources_have_non_empty_tags {
    Resources.*.Properties.Tags !empty
}

このルールは、DynamoDBテーブルに少なくとも1つのタグがあり、暗号化されていることを検証する、より大きなルール内で使用できる。

let ddb = Resources.*[ Type == 'AWS::DynamoDB::Table' ]

rule dynamo_db_sse_on when %ddb !empty {
    assert_all_resources_have_non_empty_tags

    %ddb.Properties.SSESpecification.SSEEnabled == true
}

説明やパラメータなど、テンプレート内の任意のセクションで検証を実行できるようになった。ユニットテストをルールに対して記述して、それが必要に応じて機能することを検証できる。テストデータファイルは、必要なリソースをモックし、ルール評価の期待される結果を含むJSONまたはYAMLファイルである。

CloudFormation Guardはオープンソースであり、GitHubから入手できる。

この記事に星をつける

おすすめ度
スタイル

BT