doridoridoriand’s diary

主に技術的なことを書いていく予定(たぶん)

CloudFormation忘備録2


前回はただ単体のセキュリティグループを作っただけなので、今回は複数のセキュリティグループを連携させてみる。

例えば図のような経路に対するセキュリティグループを作りたくなったとする。

img-1.png

このときに、それぞれのコンポーネントに対してセキュリティグループを充てる必要が出てくる。 今回の場合ではリクエストを一番最初に受け付けるロードバランサと、そのロードバランサから来たリクエストを処理するAPサーバーの2つとなる。 ロードバランサはSSL終端をしているためHTTPS(443)のみ。APサーバー達はロードバランサからのリクエストしか受け付けないようにする。 (SSH出来ないよとかはとりあえず無視で。それは別のセキュリティグループを作って充てましょう)

前回書いたセキュリティグループのYAMLファイルを流用する。
以下のようにディレクティブを加えた。

---
AWSTemplateFormatVersion: "2010-09-09"
Description: >
  Here is the area of description of this CloudFormation template.
Resources:
  WebAPServersSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SecurityGroup of webservers
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '3000'
          ToPort: '3000'
          SourceSecurityGroupId: !Ref ApplicationLoadbalancerSecurityGroup
      Tags:
        - Key: Name
          Value: dev-web-ap-sg
      VpcId: vpc-XXXXXXXX
  ApplicationLoadbalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SecurityGroup of Application Load Balancer
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '443'
          ToPort: '443'
          CidrIp: 0.0.0.0/0
      Tags:
        - Key: Name
          Value: dev-alb-sg
      VpcId: vpc-XXXXXXXX

別段変わったところは無く、ALB用のセキュリティグループが増えた形となる。ただしAPサーバー達に充てるセキュリティグループ dev-web-ap-sg には変更が入っている。

SecurityGroupIngressのアクセス元を表す表記が CidrIp から SourceSecurityGroupId へ変更となっている。 このように設定することによって、 dev-alb-sg を充てたロードバランサからのみのリクエスト受け付けるように出来る。 ちなみに今回は参照先・参照元共に一緒に生成しているため !Ref を利用して未知のセキュリティグループIDに対応出来るようにしているが、 既存のセキュリティグループを参照したい場合は sg-xxxxxxxx を書いてあげればおk。

前回のCloudFormationのスタックを利用してupdate-stackを実行。

無事にできていた。

img-2.png