AWSは、CloudFormationテンプレートに対してコンプライアンスポリシーを適用するオープンソースのCLIツールであるCloudFormation Guardのプレビューリリースを発表した。CloudFormation Guardは、ルールを定義するための軽量の宣言型構文を提供する。リスト、ワイルドカード、正規表現、変数の宣言をサポートし、CloudFormation組み込み関数を使用できる。
CloudFormation Guardを使用して、過剰な支出、セキュリティの脆弱性、法的問題などのリスクを最小限に抑えるルールを作成できる。たとえば、ルールを作成して、S3バケットがデフォルトで暗号化されるようにするか、特定のアベイラビリティーゾーンの使用を防ぐことができる。ツールは、テンプレートの編集中にローカルで実行することも、CIまたはCD実行の一部としてパイプラインに統合することもできる。テンプレート内のいずれかのリソースがルールを満たしていない場合、CloudFormation Guardはエラーメッセージを提供し、非準拠リソースの識別に役立つ。これは、オープンソースのCFRipperやTrendMicro's Conformityなど、他のコンプライアンスツールに似ている。
このリリースでは、CloudFormation Guard Rulegenと呼ばれる2番目のCLIツールが含まれる。このツールは、既存のCloudFormationテンプレートからCloudFormation Guardルールを自動的に生成できる。これからの出力をソートして、必要なルールセットを編集および抽出するためにファイルにパイプすることができる。
最も基本的なルールは、<CloudFormation Resource Type> <Property> == <Value>という形式を取る。たとえば、特定のインスタンスタイプが使用されていることを確認するには、ルールは次のようになる。AWS::EC2::Instance InstanceType == t3.medium。CloudFrontリソースプロパティ内にネストされたフィールドは、ドット表記を使用してアドレス指定できる。たとえば、次のルール:AWS::IAM::Role AssumeRolePolicyDocument.Statement.0.Principal.Service.0 == lambda.amazonaws.comは、このCloudFormationテンプレートのリソースセクションと一致する。
Resources:
LambdaRoleHelper:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
CloudFormation Guardは、等価(==)、不等価(!=)、リスト包含(IN)、およびリスト除外(NOT_IN)の演算子をサポートする。ルールセット内では、各ルールは他のすべてのルールと暗黙的にANDで結合されるが、明示的にOR演算子を使用できる。
LET構文を使用して変数を作成すること、Makefileスタイルの表記(%{Name})を使用して環境変数を作成することもできる。その後、変数セットを使用してコマンドラインから環境変数を渡すことができる。
ワイルドカードを使用して、リストアイテムを参照できる。それらは、ルールファイルとテンプレートの両方を読み取るプリプロセッサマクロとして機能し、テンプレート内の長さに一致するルールのリストにワイルドカードを展開する。ルールは、Rust Regex構文の正規表現と照合することもできる。
AWS CloudFormation GuardとGuard Rulegenはどちらもオープンソースであり、GitHub経由で利用できる。AWS CloudFormationチームは、プレビューリリースに関するフィードバックと貢献を求めている。