0
0

CloudFormationGuardの使い方を調査してみた

Posted at

概要

Guard を使用した AWS Config Rules の作成方法を調査します。

Guard を使用した AWS Config Rules 作成

目標

すべての IPv4 と IPv6 からのインバウンドアクセスを許可するセキュリティグループが存在しないか評価する AWS CloudFormation Guard を使用した AWS Config Rules の作成を行う。

事前準備

すべての IPv4 と IPv6 からのインバウンドアクセスを許可するセキュリティグループを作成します。
リスク回避のため EC2 等に関連付けずに本検証を行います。

  • IPv4 SG (すべての IPv4 からのインバウンドアクセスを許可)
    75cac0f8-48a9-4df6-9fe5-0bd17d0a3449-1920x450r.png

  • IPv6 SG (すべての IPv6 からのインバウンドアクセスを許可)
    0c1c3a23-efa7-4523-aa12-9826f56be926-1920x468r.png

AWS Config Rules 作成

  • Guardを使用してカスタムルールを作成を選択します
    16389556-3705-4181-bbe5-db5fc7572d0a-1920x612r.png

  • ルールの内容部分に検証するポリシーを記述します
    今回は、セキュリティグループがすべての IPv4 または IPv6 からのインバウンドアクセスを許可するインバウンドルールを持つかを検証するポリシーです。
    7a3c9dd1-5b4f-4477-b7c1-fed5b2c6ca21-1920x686r.png

2行目と8行目の条件式が True であれば準拠、False であれば非準拠です。

rule prevent_inbound_Ipv4_access_to_any_ip when this.configuration.ipPermissions[*].ipv4Ranges !empty {  
    this.configuration.ipPermissions[*].ipv4Ranges[*].cidrIp != "0.0.0.0/0" <<  
        IPv4 Source address cannot be 0.0.0.0/0  
    >>  
}  
  
rule prevent_inbound_Ipv6_access_to_any_ip when this.configuration.ipPermissions[*].ipv6Ranges !empty {  
    this.configuration.ipPermissions[*].ipv6Ranges[*].cidrIpv6 != "::/0" <<  
        IPv6 Source address cannot be ::/0  
    >>  
}

動作確認

評価結果を確認すると以下の通りでした。
事前作成した 2つのセキュリティグループが非準拠として検出されました。
959b5432-356b-45d1-94b4-d6810aa8c92a-1920x350r.png

Guard の記法

前提の話ですが、元々 CloudFormation のテンプレートの検証を行うためのオープンソースのツールである AWS CloudFormation Guard が AWS Config Rules でも使えるようになった背景があります。
AWS CloudFormation Guard を使用した AWS Config ルールの作成
そのため、記述方法は、CloudFormation Guard に依存します。
https://github.com/aws-cloudformation/cloudformation-guard
https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html
こちらの記事がとてもわかりやすいです。
AWS Config カスタムポリシールール(Guard) ~1. 基本編~
AWS Config カスタムポリシールール(Guard) ~2. 応用編~

AWS Config が収集した AWS リソースの設定項目(スキーマ)のサンプルを載せます。
Config のリソースインベントリを検索することで設定情報を確認できます。
6417778b-0df3-4de7-ac5f-3aa03c6f8493-1920x451r.png

{
  "version": "1.3",
  "accountId": "xxxxxxxxxxxx",
  "configurationItemCaptureTime": "2024-09-04T02:23:09.715Z",
  "configurationItemStatus": "OK",
  "configurationStateId": "1725416589715",
  "configurationItemMD5Hash": "",
  "arn": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:security-group/sg-03967bc665e21060d",
  "resourceType": "AWS::EC2::SecurityGroup",
  "resourceId": "sg-03967bc665e21060d",
  "resourceName": "IPv4 SG",
  "awsRegion": "ap-northeast-1",
  "availabilityZone": "Not Applicable",
  "tags": {
    "Name": "IPv4 SG"
  },
  "relatedEvents": [],
  "relationships": [
    {
      "resourceType": "AWS::EC2::VPC",
      "resourceId": "vpc-013554dfe32414657",
      "relationshipName": "Is contained in Vpc"
    }
  ],
  "configuration": {
    "description": "IPv4 SG",
    "groupName": "IPv4 SG",
    "ipPermissions": [
      {
        "fromPort": 80,
        "ipProtocol": "tcp",
        "ipv6Ranges": [],
        "prefixListIds": [],
        "toPort": 80,
        "userIdGroupPairs": [],
        "ipv4Ranges": [
          {
            "cidrIp": "0.0.0.0/0"
          }
        ],
        "ipRanges": [
          "0.0.0.0/0"
        ]
      }
    ],
    "ownerId": "xxxxxxxxxxxx",
    "groupId": "sg-03967bc665e21060d",
    "ipPermissionsEgress": [
      {
        "ipProtocol": "-1",
        "ipv6Ranges": [],
        "prefixListIds": [],
        "userIdGroupPairs": [],
        "ipv4Ranges": [
          {
            "cidrIp": "0.0.0.0/0"
          }
        ],
        "ipRanges": [
          "0.0.0.0/0"
        ]
      }
    ],
    "tags": [
      {
        "key": "Name",
        "value": "IPv4 SG"
      }
    ],
    "vpcId": "vpc-013554dfe32414657"
  },
  "supplementaryConfiguration": {}
}

感想

AWS Config Rules を使用してリソースが意図した設定になっているかを確認する際は、マネージドルールの使用する方が良いと思います。マネージドルールでは、一般的なベストプラクティスへの準拠を確認することが出来ます。今回調査をした AWS CloudFormation Guard を使用した AWS Config Rukes 作成は、マネージドルールにない組織独自のポリシーを定義したい時に使える機能だと感じました。その他にカスタムで AWS Config Rules を定義する方法として AWS Lambda を使用する方法もあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0