AWSIaC

AWSのCloudFormationでIaCを実践(3) – SecurityGroup

AWS

AWS CloudFormationを使ってはじめてのIaC実践という事で前回の続きとなります。

目標としてはAWSアカウントを取得したゼロの状態から、IaCでVPCやRole、SecurotyGroupなどの最低限のリソースを作成して、EC2インスタンスを作成する、というところまで行う事です。

前回(第2回)はこちら 
https://syachiku.net/awscloudformationiac2-iam-role/

AWSのCloudFormationでIaCを実践してみる(すべての記事一覧)
第1回 – VPC  https://syachiku.net/awscloudformationiac1-vpc/
第2回 – Role  https://syachiku.net/awscloudformationiac2-iam-role/
第3回 – SecurityGroup  https://syachiku.net/awscloudformationiac3-sg/
第4回 – EC2  https://syachiku.net/awscloudformationiac4-ec2/
第5回 – VPC FlowLogs https://syachiku.net/awscloudformationiac5-flowlogs/
第6回 – CloudTrail https://syachiku.net/awscloudformationiac6-trail/
第7回 – R53 HostedZone https://syachiku.net/awscloudformationiac7-r53-hosted/

前回はこれから作成する予定のec2インスタンスに紐づけるIAM Roleを作成しました。引き続きEC2インスタンス作成に必要となるリソース作成を続けていきます。

※今回実施することは基本的には無料ですが、利用料金が発生する可能性が少なからずありますので、あくまで自己責任でお願いします。

1. 前提条件

  • AWSアカウントが取得できていること
  • 適切な権限(=Admin相当)をもったIAMユーザーを作成していること
  • ルーティングなどの最低限のネットワークの知識があること
  • YAMLの書きかたを知っていること(CloudFormationはjsonもしくはyamlで書けますが、今回はyamlで書いていきます。)
  • AWSのIAMやRoleについて最低限の知識があること

2. 今回作成するAWS環境

今回作成するリソースははEC2インスタンスで利用するSecurityGroupです。

ec2を遠隔操作できるようにするためにSSH(22)へアクセスできるようなSecurityGroupを作成します。

  • SecurityGroup(Public) … Internet側からSSH(22)を許可

※動作確認ができたらSSHは停止予定です。
※実際にEC2で提供するサービス単位でSecurityGroup権限は分離していく予定です。

3. 構成図

4. CloudFormation Template

以下のgithub上に保管していますので参照ください。 
https://github.com/gogoloon/aws-cfn-setup/tree/aws-infra-03

今回は少し短いので以下にも載せておきます。

AWSTemplateFormatVersion: "2010-09-09"
Description:
  security group

Resources:
  CommonSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: "aws-infra public security group"
      VpcId: !ImportValue aws-infra-vpc
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value : aws-infra-publuc-sg

  CommonSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref CommonSecurityGroup
      IpProtocol: -1
      FromPort: -1
      ToPort: -1
      SourceSecurityGroupId: !GetAtt CommonSecurityGroup.GroupId

  CommonSecurityGroupEgress:
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId: !Ref CommonSecurityGroup
      IpProtocol: -1
      FromPort: -1
      ToPort: -1
      SourceSecurityGroupId: !GetAtt CommonSecurityGroup.GroupId

5. スタックの作成

それでは先ほど作成したコードを使って、リソースを作成していきます。

マネージメントコンソールにログオンして、リージョンを大阪に切り替えたのち、CloudFormationを開きます。

「スタックの作成」→「新しいリソースを使用」を選択します。

「テンプレートファイルをアップロード」からコードのファイルを選択してアップします。

スタックの名称やネットワーク設定値を入力(デフォルトから変更したい場合には変更してください)してスタックの作成まで進めます。

6. 作成されたリソースの確認

しばらくするとステータスが「CREATE_COMPLETE」となりスタック作成が完了します。

それでは作成されたリソースを確認してみます。

6.1. SecurityGroup

Internetから入ってくるIN方向にはsshだけが許可されています。

インスタンスからはWebアクセスのみ可能となっています。

7. まとめ

想定した通りのSecurityGroupが作成できました。

次回はいよいよEC2インスタンをDeployしてみます。

今回は以上となります。

コメント