
CloudFormationを使って作成したリソースをcheckovでセキュリティチェックする
以前、こちらの記事にてCloudFormationの基本的な使い方を解説するために、AWS環境にVPCのみを作成するコードを記述しました。
今回はVPC内に2つのサブネットを作成し、そのサブネット内にデータベースを配置する構成のコードをCloudFormationで記述していきます。さらに、その作成したリソースをcheckovで解析する手順も解説します。CloudFormationの管理担当者は必見の内容です。
checkovとは?
checkovは、Infrastructure as Code (IaC) で記述されたインフラ構成を静的に解析し、セキュリティやコンプライアンスの観点から潜在的な問題点を洗い出すためのオープンソースツールです。
・Terraform (AWS、Google Cloud、Azure、OCIなどの設定ファイル)
・AWS CloudFormation
・Azure Resource Manager (ARM)
・Ansible
・Kubernetes
・Docker
上記のようなIaC管理ツールのセキュリティチェックができる点が特徴です。

CloudFormationを使ってリソースを作成
CloudFormationを使ったリソースの作成方法はこちらの記事で詳しく解説していますが、以下の順に選択します。
- AWSコンソールを開く
- CloudFormationのページを開く
- スタック
- スタックの作成
- Infrastructure Composer からビルド
- Infrastructure Composer で作成
- Template
そして、スタック作成のコード記述欄に下記のコードを記述してください。(コード内のValueのパラメータは、AWS内に表示されるリソースの名前を設定しています。使用する環境に合わせて変更してください。)
Resources: MyVPC01: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 EnableDnsSupport: true EnableDnsHostnames: true Tags: – Key: Name Value: OpsToday-VPC-01 MySubnet01: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC01 CidrBlock: 10.0.1.0/24 AvailabilityZone: !Select [ 0, !GetAZs “” ] MapPublicIpOnLaunch: true Tags: – Key: Name Value: OpsToday-Subnet-01 MySubnet02: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC01 CidrBlock: 10.0.2.0/24 AvailabilityZone: !Select [ 1, !GetAZs “” ] MapPublicIpOnLaunch: true Tags: – Key: Name Value: OpsToday-Subnet-02 MyDBSubnetGroup: Type: AWS::RDS::DBSubnetGroup Properties: DBSubnetGroupDescription: Subnet group for RDS SubnetIds: – !Ref MySubnet01 – !Ref MySubnet02 Tags: – Key: Name Value: OpsToday-DBGroup-01 MyDBInstance: Type: AWS::RDS::DBInstance Properties: DBInstanceIdentifier: mydbinstance AllocatedStorage: 20 DBInstanceClass: db.t3.micro Engine: mysql MasterUsername: admin MasterUserPassword: password1234 DBSubnetGroupName: !Ref MyDBSubnetGroup MultiAZ: false PubliclyAccessible: false StorageType: gp2 Tags: – Key: Name Value: OpsToday-DB-01 |
コードの記述完了後、Create Templateを選択します。
そして、「スタック名:OpsToday-Check-test」を入力してその他のパラメータは変更せず、リソースを作成してください。リソース作成後は、今回作成したVPC、サブネット、RDBが正常に作成されていることを確認しましょう。
AWSリソースをChecovで解析
ここからは、Checkovを使って、CloudFormationで作成したAWSリソースのセキュリティチェックを行う手順を解説します。Checkovのインストールがまだの方や使い方を知りたい方は、別の記事で解説していますのでぜひご覧ください。
cf-checkov.yaml というファイルを作成します。そして、作成したファイルにCloudFormationで書いたコードをコピペします。ファイルが配置されているフォルダ上で以下のコードを実行するとセキュリティチェックは完了です。
checkov -f cf-checkov.yaml |
下記の画像のような出力がされていればチェック成功です。

上記画像内の赤枠部分について詳しく解説します。
「Passed checks」は、チェック対象のリソースがセキュリティポリシーに適合しており、問題がないことを示しています。
「Failed checks」は、セキュリティポリシーに違反している設定や構成が見つかったことを示します。8件のチェックが失敗しており、AWSリソースがセキュリティ基準を満たしていない状態です。
「Skipped checks」は、スキップされたチェック項目を意味します。checkovでは明示的にあるリソースのセキュリティチェックを実施しないという指定が可能です。今回は指定していないため0件となっています。
今回は8件あるFailedのうち1つを解消していきます。

CKV_AWS_157の項目を確認するとRDSのマルチAZが有効になっていないという表示が出ています。
Guideに記載されているURLを開いて詳細を見ていきましょう。

重要度は低いですが、説明欄にマルチAZが有効化されている場合は、計画外のインスタンス停止が発生した場合でもスタンバイしているインスタンスに切り替えることができるメリットがあると記載されています。
マルチAZの項目をFailedからPassedにするために、下にスクロールし、修正という項目を確認しましょう。
Properties 内にあるMultiAZを「true」にすると記載されています。

cf-checkov.yamlのコードを修正して、下記コードを実行して結果を確認します。
checkov -f cf-checkov.yaml |
CKV_AWS_157がPassedに更新されていることが確認できました。

このようにcheckovを使って、セキュリティチェックを行い修正をすることでセキュリティ強度の高い環境の構築が可能となります。
ここまでで、CloudFormationを使ってリソースを作成しcheckovで解析する方法の解説は終了です。今回作成したリソースはAWSマネージメントコンソールのスタック管理画面からスタックを削除を選択して削除してください。

まとめ
CloudFormationを活用してAWSリソースを構築した後、セキュリティを確保するためには、コードに潜む脆弱性や設定ミスを早期に発見することが重要です。本記事では、Checkovを使用してCloudFormationテンプレートをセキュリティチェックする方法を解説しました。
Checkovを導入することで、自動化されたセキュリティスキャンを実現し、ベストプラクティスに基づく安全なインフラ構築が可能になります。特にIAM権限やネットワーク設定の見直しを効率的に行える点は、大規模な環境管理にも役立つポイントです。CloudFormationとCheckovを組み合わせることで、セキュリティを意識したIaC(Infrastructure as Code)の運用をぜひ実践してみてください。