CloudFormation入門：AWS CloudFormationを使ったセキュリティグループの一括作成について

## はじめに
AWS CloudFormation を使用すると、インフラストラクチャをコードとして管理し、一貫した環境を構築することができます。

本記事では、CloudFormation テンプレートを用いて EC2 のセキュリティグループを作成する方法を解説します。

## CloudFormation テンプレートの概要

以下の CloudFormation テンプレートでは、VPC に紐づくセキュリティグループを作成し、複数のプロトコルおよびポートに対するインバウンドルールを定義しています。

```yaml
AWSTemplateFormatVersion: '2010-09-09'
Description: Create a Security Group

Parameters:
  VpcId:
    Type: AWS::EC2::VPC::Id
    Default: vpc-xxx
    Description: "VPC ID where the security group will be created"

Resources:
  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: "Custom Security Group"
      VpcId: !Ref VpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 445
          ToPort: 445
          CidrIp: 0.0.0.0/0
          Description: "SMB"
        - IpProtocol: tcp
          FromPort: 3268
          ToPort: 3268
          CidrIp: 0.0.0.0/0
        - IpProtocol: udp
          FromPort: 88
          ToPort: 88
          CidrIp: 0.0.0.0/0
        - IpProtocol: udp
          FromPort: 53
          ToPort: 53
          CidrIp: 0.0.0.0/0
          Description: "DNS"
        - IpProtocol: tcp
          FromPort: 3389
          ToPort: 3389
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 3269
          ToPort: 3269
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 88
          ToPort: 88
          CidrIp: 0.0.0.0/0
        - IpProtocol: udp
          FromPort: 135
          ToPort: 135
          CidrIp: 0.0.0.0/0
        - IpProtocol: udp
          FromPort: 389
          ToPort: 389
          CidrIp: 0.0.0.0/0
          Description: "LDAP"
        - IpProtocol: udp
          FromPort: 137
          ToPort: 137
          CidrIp: 0.0.0.0/0
          Description: "NetBIOS"
        - IpProtocol: tcp
          FromPort: 464
          ToPort: 464
          CidrIp: 0.0.0.0/0
        - IpProtocol: udp
          FromPort: 138
          ToPort: 138
          CidrIp: 0.0.0.0/0
          Description: "NetBIOS"
        - IpProtocol: tcp
          FromPort: 636
          ToPort: 636
          CidrIp: 0.0.0.0/0
          Description: "LDAPS"
        - IpProtocol: tcp
          FromPort: 389
          ToPort: 389
          CidrIp: 0.0.0.0/0
          Description: "LDAP"
        - IpProtocol: tcp
          FromPort: 53
          ToPort: 53
          CidrIp: 0.0.0.0/0
          Description: "DNS"
        - IpProtocol: udp
          FromPort: 464
          ToPort: 464
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 139
          ToPort: 139
          CidrIp: 0.0.0.0/0
          Description: "NetBIOS"
        - IpProtocol: tcp
          FromPort: 135
          ToPort: 135
          CidrIp: 0.0.0.0/0
```

## テンプレートの説明

1. **`Parameters` セクション**
   - `VpcId` はセキュリティグループを作成する対象の VPC ID を指定するパラメータ。
   
2. **`Resources` セクション**
   - `MySecurityGroup` は EC2 のセキュリティグループを定義。
   - `SecurityGroupIngress` で許可するインバウンドルールを設定。
   - 各ルールで `IpProtocol`, `FromPort`, `ToPort`, `CidrIp`, `Description` を指定。

## セキュリティの考慮点

- **`CidrIp: 0.0.0.0/0` の利用に注意**
  - すべての IP からのアクセスを許可するため、セキュリティリスクが高まる。
  - 制限する IP アドレス範囲を特定し、適切な CIDR を設定することが推奨される。

- **RDP（ポート 3389）の公開は避ける**
  - リモートデスクトップ（RDP）のポート 3389 を全世界に公開すると、攻撃対象になりやすい。
  - 必要に応じて、特定の IP アドレスに限定することが望ましい。

- **管理用のセキュリティグループを分離する**
  - LDAP, DNS, NetBIOS などの管理用プロトコルを使用する場合、それらを専用のセキュリティグループで管理すると安全性が向上する。

## まとめ

AWS CloudFormation を用いることで、一貫性のあるセキュリティグループを簡単に作成できます。

:::note warn
**しかし、セキュリティグループの設定には慎重な設計が求められます。**
:::

本記事で紹介したポイントを参考に、安全な AWS 環境の構築を目指しましょう。