Post

[AWS-Security] 1.2. 클라우드 네이티브 보안 도구

[AWS-Security] 1.2. 클라우드 네이티브 보안 도구

1. 개요

  1. IAM (Identity and Access Management)
    • IAM은 기술 자산에 대한 접근을 제어하는 데 사용되는 모든 도구와 정책을 의미한다. (AWS에 국한되는 개념 x)
  2. VPC (Virtual Private Cloud)
    • 격리된 가상 네트워크를 생성하는 데 사용되는 서비스이다.
    • EC2 인스턴스 및 파생 컴퓨팅 리소스에 대한 네트워크 접근을 제어할 수 있다.
  3. 일반화
    • 애플리케이션 보안을 위한 대규모 서비스 제품군이 있다.
    • 이미 사용 중인 서비스와 통합하여 사용 가능하다.
    • AWS에서 실행되는 워크로드용으로 구축되어 편리하다는 장점이 있다.

    • AWS Key Management Service는 S3와 DynamoDB 같은 서비스와 통합해 클릭 한 번으로 암호화를 제공한다.
    • Amazon GuradDuty는 CloudTrail과 통합해 계정의 모든 활동을 지속적으로 모니터링하고 무단 행동이나 악의적인 행동이 있을 경우 경고한다.

2. IAM

2.1. 개요

  1. 사용자 (User)
    • 사람이나 애플리케이션을 의미한다.
    • IAM 사용자로 인증해야만 AWS 서비스에 접근할 수 있다.
  2. 정책 (Policy)
    • 사용자가 AWS 서비스 내에서 수행할 수 있는 작업을 설명하는 JSON 문서다.
    • ex) Policy를 통해 사용자가 모든 DynamoDB 테이블을 나열할 수 있도록 가능

AWS IAM의 Policy는 화이트리스트 기반으로, 명시적으로 허용하지 않는 한 모든 작업은 거부된다.

2.2. Policy 부여

1
2
3
4
5
6
7
8
9
10
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "dynamodb:ListTables",
      "Resource": "*"
    }
  ]
}
  • "Effect": "Allow", : 허용(Allow)하는 설정에 대한 정책(Policy)
  • "Action": "dynamodb:ListTables", : 허용되는 권한은 Dynamo DB 서비스의 ListTables 메소드에 한정된다.
  • "Resource": "*" : ListTables 작업은 모든 리소스에 대해 허용한다. (단일 리소스만 한정해서 허용하고 싶은 경우, 지정)

2.3. Policy 전 후 비교

  1. Policy 부여 전
    1
    2
    3
    
     $ aws dynamodb list-tables
    
     An error occurred (AccessDeniedException) when calling the ListTables operation: User: arn:aws:iam::123412341234:user/alice is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:ap-northeast-2:123412341234:table/* because no identity-based policy allows the dynamodb:ListTables action
    
  2. Policy 부여 후
    1
    2
    3
    4
    
     $ aws dynamodb list-tables
     {
         "TableNames": []
     }
    

3. VPC

3.1. AWS IDC

  1. 리전 (Region)
    • 하나의 큰 지리적 영역으로 그룹화 된다.
    • 가장 큰 리전 중 하나는 버지니아 북부에 있는 us-east-1이다.
  2. AZ (Available Zone)
    • 리전 내의 존재하며, 더 작고 격리된 데이터센터의 모음이다.
    • 일부 AWS 서비스는 EC2(어느 AZ에서 실행할지 선택 가능)와 같이 AZ 레벨에서 동작한다. (S3와 같은 서비스는 리전 수준에서 실행되므로 객체를 저장할 리전을 선택한다.)
  3. 글로벌 서비스
    • IAM과 같은 일부 서비스는 모든 리전 및 AZ에서 공유되는 리소스다.

이렇게 실행되는 영역 범위가 다른 것은 AWS 서비스의 고가용성으로 인해 나뉜다. image

3.2. VPC

  • VPC는 리전(Region) 내에 생성할 수 있는 Private Network이다.
  • VPC를 통해 AWS 리소스와 연결하려는 다른 네트워크 영역의 리소스 간에 안전한 네트워크 연결을 생성할 수 있으며, 그렇지 않은 리소스 간에는 차단할 수 있다.
  • 이를 구현할 수 있는 도구들 중, AWS에서 제공하는 네이티브 도구는 Security Group과 Network Security Group이다. (Security Group 위주 설명)

3.2.1. Security Group

  • Security Group은 허용된 연결에 대한 인바운드 및 아웃바운드 규칙 집합을 정의할 수 있는 Stateful 방화벽이다.
  • 지정되지 않은 다른 모든 연결을 거부된다.
  • EC2 인스턴스를 Security Group과 연결하여 VPC에 위치한 EC2에 적용할 수 있다.

3.2.2. Subnet

  • Subnet은 VPC를 구성하는 하위 네트워크 구성 요소다.
  • 개별 서브넷에는 VPC에 지정된 IP 범위의 블록이 할당되며, AZ 내의 존재한다.
  • EC2 인스턴스와 기타 리소스는 VPC에 직접 넣을 수 없으며, Subent 중 하나에 추가되어야 한다.
  • Public과 Private의 두 가지 유형이 있다.
  • Public
    • Internet Gateway에 대한 경로가 있다.
    • 외부와 통신할 수 있다.
  • Private
    • 인터넷으로 연결되는 경로가 없다.

3.2.3. Private Subnet에 대한 접근 방법

  1. VPC의 기본 구성 요소 image

  2. EC2에 구성된 애플리케이션이 동작 가능한 경우
    • 연결을 허용하지 않는 Security Group을 통해 이 인스턴스를 서브넷 및 VPC에 위치시킨다.
      (결과적으로, 아무도 인스턴스에 접근할 수 없다.) image
    • 아래의 CloudFormation 코드를 사용하면 리소스를 모두 생성할 수 있다. (us-east-1 / EC2에 대한 SSH Key 쌍 필요)
    • AZ(us-east-1a), EC2, VPC, Private Subnet, Security Group(인바운드 허용 x)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      
        ---
        AWSTemplateFormatVersion: "2010-09-09"
        Resources:
          VPC:
            Type: AWS::EC2::VPC
            Properties:
              CidrBlock: 172.16.0.0/16
              EnableDnsHostnames: true
      		
          PrivateSubnet:
            Type: AWS::EC2::Subnet
            Properties:
              VpcId: !Ref VPC
              CidrBlock: 172.16.0.0/24
              AvailabilityZone: us-east-1a
      		
          ApplicationSecurityGroup:
            Type: AWS::EC2::SecurityGroup
            Properties:
              GroupDescription: For Sample Internal Application
              VpcId: !Ref VPC
      		
          ApplicationInstance:
            Type: AWS::EC2::Instance
            Properties:
              ImageId: ami-0dc2d3e4c0f9ebd18
              KeyName: mykeypair
              SubnetId: !Ref PrivateSubnet
              SecurityGroupIds:
                - !Ref ApplicationSecurityGroup
      
  3. 애플리케이션 디버깅을 위해 접근이 필요한 경우
    • 인터넷에 대한 경로를 열고, 호스트에 대한 인바운드 SSH 연결을 허용
    • 인터넷에 개방되어 있고 VPC 내에서 Private Host에 대한 Private 접근 권한이 있는 새로운 Bastion Host를 생성
      (Bastion 접속 -> Private Host 접근) image
  4. Bastion Host를 통한 Private Host 접근
    • Bastion Host에 SSH로 연결하고, Bastion Host에서 Private Host로 SSH 연결하는 방법이다.
    • 기존 폐쇄된 네트워크 다이어그램(위 CloudFormation)에서 몇 개의 리소스를 추가하여 해당 네트워크 다이어그램 구성이 가능하다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
      100
      101
      102
      103
      104
      105
      106
      107
      
        ---
        AWSTemplateFormatVersion: "2010-09-09"
        Resources:
          VPC:
            Type: AWS::EC2::VPC
            Properties:
              CidrBlock: 172.16.0.0/16
              EnableDnsHostnames: true
      		
          PrivateSubnet:
            Type: AWS::EC2::Subnet
            Properties:
              VpcId: !Ref VPC
              CidrBlock: 172.16.0.0/24
              AvailabilityZone: us-east-1a
      		
          ApplicationSecurityGroup:
            Type: AWS::EC2::SecurityGroup
            Properties:
              GroupDescription: For Sample Internal Application
              VpcId: !Ref VPC
      		
          ApplicationInstance:
            Type: AWS::EC2::Instance
            Properties:
              ImageId: ami-0dc2d3e4c0f9ebd18
              KeyName: mykeypair
              SubnetId: !Ref PrivateSubnet
              SecurityGroupIds: 
                - !Ref ApplicationSecurityGroup
      		
          InternetGateway:
            Type: AWS::EC2::InternetGateway
      		
          VPCGatewayAttachment:
            Type: AWS::EC2::VPCGatewayAttachment
            Properties:
              VpcId: !Ref VPC
              InternetGatewayId: !Ref InternetGateway
      		
          PublicSubnet:
            Type: AWS::EC2::Subnet
            Properties:
              AvailabilityZone: us-east-1a
              VpcId: !Ref VPC
              CidrBlock: 172.16.1.0/24
              MapPublicIpOnLaunch: true
      		
          RouteTable:
            Type: AWS::EC2::RouteTable
            Properties:
              VpcId: !Ref VPC
      		
          InternetRoute:
            Type: AWS::EC2::Route
            DependsOn: VPCGatewayAttachment
            Properties:
              DestinationCidrBlock: 0.0.0.0/0
              GatewayId: !Ref InternetGateway
              RouteTableId: !Ref RouteTable
      		
          RouteTableAssociation:
            Type: AWS::EC2::SubnetRouteTableAssociation
            Properties: 
              RouteTableId: !Ref RouteTable
              SubnetId: !Ref PublicSubnet
      		
          BastionSecurityGroup:
            Type: AWS::EC2::SecurityGroup
            Properties:
              GroupDescription: For Bastion Host
              VpcId: !Ref VPC
      		
          BastionInstance:
            Type: AWS::EC2::Instance
            Properties:
              ImageId: ami-0dc2d3e4c0f9ebd18
              KeyName: mykeypair
              SubnetId: !Ref PublicSubnet
              SecurityGroupIds: !Ref BastionSecurityGroup
      		
          ApplicationAllowInboundSSHFromBastion:
            Type: AWS::EC2::SecurityGroupIngress
            Properties:
              GroupId: !Ref ApplicationSecurityGroup
              IpProtocol: tcp
              FromPort: 22
              ToPort: 22
              SourceSecurityGroupId: !Ref BastionSecurityGroup
      		
          BastionAllowInboundSSHFromInternet:
            Type: AWS::EC2::SecurityGroupIngress
            Properties:
              GroupId: !Ref BastionSecurityGroup
              IpProtocol: tcp
              FromPort: 22
              ToPort: 22
              CidrIp: 0.0.0.0/0
      		
          BastionAllowOutboundSSHToApplication:
            Type: AWS::EC2::SecurityGroupEgress
            Properties:
              GroupId: !Ref BastionSecurityGroup
              IpProtocol: tcp
              FromPort: 22
              ToPort: 22
              DestinationSecurityGroupId: !Ref ApplicationSecurityGroup
      

    두 호스트 간의 SSH 접근만 필요한 상황임에도, 14개의 서로 다른 리소스를 생성해야 한다. 실수로 인해 보안 취약성이 발생하지 않도록 이러한 제어를 이해하는 것은 매우 중요하다.

4. 그 외 보안 도구

4.1. AWS Native Service

보안 서비스요약
Amazon InspectorEC2 인스턴스에서 에이전트를 실행해 취약성을 검사하는 서비스
AWS Certificate ManagerAWS 애플리케이션에 대한 SSL/TLS 인증서를 관리하는 서비스
AWS Secrets Manager데이터베이스 자격증명 또는 API 키와 같은 암호 정보의 저장, 접근, 교체를 관리하는 서비스
Amazon MacieS3에 저장된 민감한 데이터를 분류하고 보호하기 위한 도구
AWS CloudHSM암호화 키를 생성하기 위한 하드웨어 보안 모듈
AWS Key Management Service암호화 키를 관리하고 다른 AWS 서비스와 편리한 통합 관리 기능 제공
AWS Security Hub개별 AWS 계정의 보안 이벤트 및 규정 준수 상태에 대한 중앙 집중화된 관리 서비스
AWS Web Application Firewall일반적인 웹 애플리케이션 공격을 방어하기 위한 웹 방화벽 서비스
AWS Firewall ManagerAWS WAF 등 조직의 방화벽 규칙에 대한 중앙 집중화된 관리 서비스
Amazon GuradDutyAWS 계정의 허가받지 않은 행동 및 악의적인 활동 탐지
AWS Directory ServiceAWS 애플리케이션에 대한 관리형 Microsoft Active Directory 서비스
AWS Resource Access ManagerAWS 계정 간 리소스 공유 간소화 서비스
AWS ShieldDDoS 공격에 대한 보호 서비스
AWS Trusted Advisor기본 보안 모범 사례 권장 사항 제공 서비스
AWS ConfigAWS 리소스의 모든 구성 변경 사항 모니터링
AWS CloudTrailAWS 계정의 모든 활동 모니터링
AWS Organizations다수의 AWS 계정 관리 간소화 서비스
AWS Control Tower안전한 모범 사례를 바탕으로 신규 계정 및 애플리케이션을 시작할 수 있는 방법 제공

4.2. Maketplace

  • 타사 보안 서비스로 구성된 대규모 생태계가 있다. (차세대 방화벽, 벤치마크, 보안 벤치마크, 취약성 스캐너 등)
  • 이들 중 다수는 AWS Marketplace를 통해 설치할 수 있다.
This post is licensed under CC BY 4.0 by the author.