AWS-SecurityGroup(보안그룹)

1. security group에 대한 이야기

인터넷 게이트웨이를 통해 인터넷을 연결하고

라우팅테이블을 통해 트래픽이 어디로 갈지 정의한다고 했습니다.

라우팅테이블의 경우 기본적으로 VPC에서 정의하는 CDIR블럭의 IP를 로컬로 이용해서 통신할 수 있도록 설정되어있고 외부로 나갈수있도록 설정하기기위해 0.0.0.0/0을 추가해주었습니다.

이제는 트래픽을 제어하기 위한 방화벽을 설정하여 특정 IP나 PORT를 제어하기 위해 사용되는것이 security group(보안그룹) 입니다.

Resources:
  AWSVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: Name
          Value: AWSVPC
  AWSPublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref AWSVPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: ap-northeast-2a
      Tags:
        - Key: Name
          Value: AWSpublicsubnet1
  AWSInternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties:
      Tags:
        - Key: Name
          Value: AWSinternetgateway
  AWSVPCGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
      VpcId: !Ref AWSVPC
      InternetGatewayId: !Ref AWSInternetGateway
  AWSPublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref AWSVPC
      Tags:
        - Key: Name
          Value: AWSpublicroutetable
  AWSPublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref AWSPublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref AWSInternetGateway
  AWSPublicSubnet1RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      RouteTableId: !Ref AWSPublicRouteTable
      SubnetId: !Ref AWSPublicSubnet1

  AWSSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 22, 80, 443
      VpcId: !Ref AWSVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
          Description: ssh
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
          Description: http
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
          Description: https

2. Security Group - Console(콘솔)

해당 서버를 작동하기 위해 프론트와 백엔드를 만들어서 EC2를 여러개 만든다면 해당 EC2간에 그리고 외부에서 들어오는 트래픽, 내부에서 나가는 트래픽 등 통신을 어떻게 구성할지가 정해집니다.

저의 경우에는

  • EC2연결을 위한 ssh 22 port
  • 프론트 웹서버 연결을 위한
    • http 80 port
    • https 443 port

로 구성하였습니다. 환경에 맞게 조합하시면됩니다.

라우팅 테이블까지 완료한 상태에서 EC2 메뉴에서 네트워크 및 보안 - 보안그룹을 들어갑니다.

이번에도 생성된 VPC ID로 검색해보면 default VPC secruity group이 있습니다.

VPC의 기본 라우팅테이블이나 보안그룹의 경우 라우드포메이션으로 명시적으로 사용할수없기 때문에 이번에도 별도로 생성해보겠습니다.

기본으로 사용할 경우 모든 동일한 규칙이 적용되기 때문에 꼭 필요한 설정만 사용하는게 좋습니다.

보안그룹 이름을 AWSSecurityGroup로 작성합니다

설명을 22, 80, 443으로 지정하여 어떤포트를 여는지 작성합니다.

VPC를 AWSVPC로 선택합니다.

보안그룹생성메뉴에서

  • 인바운드 규칙 : 들어오는 규칙
    • 사용자 지정 TCP로 포트범위를 22, 80, 443을 지정해줍니다.
    • 소스유형을 Anywhere-IPv4로 지정하면 0.0.0.0/0의 모든 IP로 들어오는범위를 지정 가능합니다.
    • 22포트는 ssh, 80포트는 http, 443포트는 https로 설명에 작성합니다.
  • 아웃바운드 규익 : 나가는 규칙
    • 기본적으로 모든 나가는 트래픽을 허용합니다.
    • 굳이 건들이지 않아도 설정이 기본으로 잡히니 넘어가면됩니다.

생성된것을 확인하고 해당 보안그룹을 삭제합니다.

3. Security Group - cloud formation(클라우드포메이션)

기본적으로과 큰 차이는 없지만 템플릿에서 작성하게되면 VPC와 연결된 보안그룹이 캔버스에서 확인이 가능합니다.

  AWSSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 22, 80, 443
      VpcId: !Ref AWSVPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
          Description: ssh
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
          Description: http
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
          Description: https

생성된 보안그룹을 확인해봅니다.

4. Outputs 설정

EC2를 생성하기위해 어느 IP대역대(서브넷)에 생성할지, 그리고 어떤 보안그룹을 사용할지 별도의 파일로 사용하기위해 Outputs작업을 해줍니다.

이런식으로 클라우드포메이션으로 정의한 인프라를 다른 스택에서 읽어와서 사용할 수 있게됩니다.

Outputs:
  AWSPublicSubnet1Id:
    Description: AWSPublicSubnet1Id
    Value: !Ref AWSPublicSubnet1
    Export:
      Name: AWSPublicSubnet1Id
  AWSSecurityGroupId:
    Description: AWSSecurityGroupId
    Value: !Ref AWSSecurityGroup
    Export:
      Name: AWSSecurityGroupId

생성이 완료되면 스택의 출력부분에서 해당 Outputs를 확인할 수 있습니다.

이제 설정이 다 끝났습니다.

EC2를 생성하기 위해 우리는 vpc, subnet, internetgateway, routetable, securitygroup을 콘솔을 통해 직접 생성해보고 클라우드포메이션으로 인프라를 구성할 수 있도록 진행하였습니다.

간단한 프리티어 EC2를 생성하기 위해 진행한 부분이니 다음으 드디어 EC2를 생성해보겠습니다.

Next

  • SecurityGroup

© 2024 Coding Stairs. All rights reserved.