こんにちは、インフラエンジニアの綿引です。
今回は AWS CloudFormation について記載したいと思います。
CloudFormation は今まで敬遠してきたのですが、実際に触ってみたら非常に有能でした。。
そこで手始めにセキュリティグループを作ってみたので共有したいと思います。
対象の方は以下のような方でしょうか。
- CloudFormation 初心者の方
- セキュリティグループを手動で作りたくない
テンプレートファイル作成
では早速テンプレートファイルを作成していきます。
今回は json ではなく、yaml で以下の2つのテンプレートを作成します。
- SG-http-https-public.yaml : http と https を許可するセキュリティグループを作成
- SG-base.yaml : 拠点 IP のみ許可するセキュリティグループを作成
http と https を許可セキュリティグループを作成
まずソースとしては以下になります。
AWSTemplateFormatVersion: "2010-09-09" Resources: WebSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: "http,https public" GroupName: http-https-public # セキュリティグループの名前 を記載 SecurityGroupIngress: - IpProtocol: tcp FromPort : 80 ToPort : 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort : 443 ToPort : 443 CidrIp: 0.0.0.0/0 VpcId: vpc-XXXXXXXXXXX # VPC ID を記載
Properties の各項目の説明は以下です。
項目 | 内容 |
---|---|
GroupDescription | セキュリティグループの説明 |
GroupName | セキュリティグループの名前 |
SecurityGroupIngress | インバウンドルールを宣言 |
IpProtocol | IP プロトコル |
FromPort | ポート範囲の開始番号 |
FromPort | ポート範囲の終了番号 |
CidrIp | IPv4 範囲 |
VpcId | VPC の ID |
VpcId だけはお使いの環境によりますので、vpc-XXXXXXXXXXX を変更いただければと思います。
拠点 IP のみ許可するセキュリティグループを作成
次のソースはこれです。
AWSTemplateFormatVersion: "2010-09-09" Resources: WebSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: "base ip list" GroupName: base # セキュリティグループの名前 を記載 SecurityGroupIngress: - IpProtocol: -1 # 全てのプロトコルを許可 CidrIp: XXX.XXX.XXX.XXX/32 # 許可したい IP を記載 Description: base1 - IpProtocol: -1 # 全てのプロトコルを許可 CidrIp: XXX.XXX.XXX.XXX/32 # 許可したい IP を記載 Description: base2 VpcId: vpc-XXXXXXXXXXX # VPC ID を記載
基本的に1つ目のものと変わりませんが「IpProtocol」を「-1」にすることで全てのプロトコルを許可しています。
また「CidrIp」には許可したい IP に変更してください。サブネットも /24 や /29 など自由に変えられます。
他にも「Description」は「説明」になりますので、許可IP が何に該当するかを記載しておくとわかりやすいと思います。
あとは CloudFormation で実行するだけです。実行方法については他にもわかりやすい記事がたくさんあるので割愛したいと思います。
実際のソース
ソースは以下 GitHub に上げておきましたので宜しければお使いください。
GitHub : CloudFormation-Templates SecurityGroup
※ 随時更新しているため上記記載の内容とは若干異なる場合があります
最後に
今回は CloudFormation を使ってセキュリティグループを作成しました。
IP をいちいち登録する手間がなく非常に楽だったので、今後使っていきたいと思いました。
次は WAF のルールも作ってみます。