キーワードで検索

今日を知り、明日を変えるシステム運用メディア

CloudFormationを使って作成したリソースをcheckovでセキュリティチェックする

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を使ってリソースを作成

CloudFormationを使ったリソースの作成方法はこちらの記事で詳しく解説していますが、以下の順に選択します。

  1. AWSコンソールを開く
  2. CloudFormationのページを開く
  3. スタック
  4. スタックの作成
  5. Infrastructure Composer からビルド
  6. Infrastructure Composer で作成
  7. 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)の運用をぜひ実践してみてください。

現在クラウドエンジニアとして勤務。AWS(SAP、DOP)とAzure(AZ-305)の資格を保有しており、ネットワークやセキュリティに関する業務を主に行っています。

最新情報をお届けします!

最新のITトレンドやセキュリティ対策の情報を、メルマガでいち早く受け取りませんか?ぜひご登録ください

メルマガ登録

最新情報をお届けします!

最新のITトレンドやセキュリティ対策の情報を、メルマガでいち早く受け取りませんか?ぜひご登録ください

メルマガ登録