AWS Cloud Security Complete Guide: IAM to EKS Practical Security Architecture

AWS 클라우드 보안 완벽 가이드: IAM부터 EKS까지 실무 중심 보안 아키텍처

AI 요약
제목 AWS 클라우드 보안 완벽 가이드: IAM부터 EKS까지 실무 중심 보안 아키텍처
카테고리 Security Cloud
태그 AWS Security IAM VPC S3 RDS EKS CloudTrail CloudWatch Security-Hub
핵심 내용
  • AWS 보안 아키텍처 개요: Defense in Depth 전략, 다층 보안 방어, AWS 서비스별 보안 레이어, 보안 그룹, NACL, IAM 통합
  • IAM 보안: IAM 정책 작성, 역할 기반 접근 제어 (RBAC), MFA 설정, 최소 권한 원칙, 정기적인 권한 검토
  • VPC 보안: VPC 아키텍처 설계 (Public/Private Subnet), NAT Gateway 설정, Security Group 및 NACL 구성, 네트워크 분리
  • S3 보안: 버킷 정책, 암호화 설정 (서버 측 암호화, KMS), 버전 관리, 접근 로그, Public Access 차단
  • RDS 보안: 데이터베이스 암호화, 보안 그룹 구성, 파라미터 그룹, 스냅샷, 자동 백업
  • EKS 보안: Pod Security Standards, Network Policy, RBAC, 컨테이너 이미지 보안, 시크릿 관리
  • 모니터링 및 감사: CloudTrail 설정, CloudWatch 모니터링, Security Hub 통합, GuardDuty 위협 탐지
기술/도구 AWS (IAM, VPC, S3, RDS, EKS, CloudTrail, CloudWatch, Security Hub, GuardDuty, KMS, Config), Defense in Depth, RBAC, TLS/SSL, Encryption
대상 독자 AWS 보안 엔지니어, 클라우드 아키텍트, DevOps 엔지니어, 보안 전문가, AWS-SAA 준비자

서론

안녕하세요, Twodragon입니다.

AWS 클라우드 환경에서 보안을 강화하기 위해서는 IAM부터 EKS까지 모든 서비스 계층에서 Defense in Depth 전략을 적용해야 합니다. 이 포스팅은 SK Shieldus의 2024년 AWS 클라우드 보안 가이드를 기반으로, 실무에서 즉시 활용 가능한 AWS 보안 아키텍처 설계 및 구현 가이드를 제공합니다.

주요 AWS 서비스별 보안 모범 사례와 코드 예제, 보안 체크리스트를 포함하여 실무 중심의 보안 구축 방법을 제시합니다.User Namespaces는 컨테이너 내 root 사용자를 호스트의 비권한 사용자로 매핑하여 컨테이너 탈출 공격의 위험을 크게 감소시킵니다:

graph TB
    subgraph Host["Host System"]
        HostRoot["Host Root User<br/>UID 0"]
        HostUser["Host Non-root User<br/>UID 1000"]
    end
    
    subgraph Container["Container"]
        ContainerRoot["Container Root<br/>UID 0"]
        ContainerApp["Container App<br/>UID 1000"]
    end
    
    ContainerRoot -->|"User Namespace Mapping"| HostUser
    ContainerApp -->|"Direct Mapping"| HostUser
    HostRoot -->|"Isolated"| ContainerRoot
    
    style HostRoot fill:#ffebee
    style HostUser fill:#e8f5e9
    style ContainerRoot fill:#fff4e1
    style ContainerApp fill:#e1f5ff

📊 빠른 참조

AWS 보안 서비스 개요

컨테이너 보안은 여러 레이어로 구성된 Defense in Depth 전략을 통해 강화됩니다:

graph TB
    subgraph SecurityLayers["Security Layers"]
        ImageScan["Image Scanning<br/>Trivy, Snyk"]
        SecretMgmt["Secret Management<br/>K8s Secrets, Vault"]
        NonRoot["Non-root User<br/>runAsNonRoot"]
        ReadOnly["Read-only Filesystem<br/>readOnlyRootFilesystem"]
        CapDrop["Capabilities Drop<br/>capabilities.drop: ALL"]
        NetworkPolicy["Network Policies<br/>Pod Isolation"]
    end
    
    App["Application Container"]
    
    ImageScan --> SecretMgmt
    SecretMgmt --> NonRoot
    NonRoot --> ReadOnly
    ReadOnly --> CapDrop
    CapDrop --> NetworkPolicy
    NetworkPolicy --> App
    
    style ImageScan fill:#e1f5ff
    style SecretMgmt fill:#e1f5ff
    style NonRoot fill:#e1f5ff
    style ReadOnly fill:#e1f5ff
    style CapDrop fill:#e1f5ff
    style NetworkPolicy fill:#e1f5ff
    style App fill:#fff4e1
서비스 용도 주요 기능
IAM 접근 제어 사용자, 역할, 정책 관리
VPC 네트워크 보안 네트워크 격리, 접근 제어
Security Hub 통합 보안 관리 보안 상태 통합 대시보드
CloudTrail 감사 및 컴플라이언스 API 호출 로깅
CloudWatch 모니터링 메트릭, 로그, 알람
GuardDuty 위협 탐지 이상 활동 탐지
KMS 암호화 키 관리 서비스
Config 설정 관리 리소스 설정 모니터링

1. AWS 보안 아키텍처 개요### 1.1 Defense in Depth 전략

Defense in Depth는 여러 보안 레이어를 중첩하여 보안을 강화하는 전략입니다.

다층 보안 방어 구조

레이어 AWS 서비스 보안 기능
네트워크 레이어 VPC, Security Group, NACL 네트워크 분리, 트래픽 필터링
인증/인가 레이어 IAM, MFA 사용자 인증, 권한 관리
애플리케이션 레이어 WAF, Shield 웹 애플리케이션 보호
데이터 레이어 KMS, S3, RDS 데이터 암호화
모니터링 레이어 CloudTrail, CloudWatch, GuardDuty 로깅, 모니터링, 위협 탐지

1.2 보안 모범 사례

원칙 설명 AWS 구현
최소 권한 원칙 필요한 최소한의 권한만 부여 IAM 정책, Security Group 규칙
암호화 전송 중/저장 데이터 암호화 TLS/SSL, KMS, S3 암호화
로그 관리 모든 활동 로깅 및 모니터링 CloudTrail, CloudWatch
정기적 검토 보안 설정 정기적 검토 및 개선 Config, Security Hub

2. IAM 보안

2.1 IAM 정책 작성

최소 권한 원칙 적용

# IAM 정책 예시: 최소 권한 원칙
Version: '2012-10-17'
Statement:
  - Sid: AllowS3ReadOnly
    Effect: Allow
    Action:
      - s3:GetObject
      - s3:ListBucket
    Resource:
      - 'arn:aws:s3:::secure-bucket'
      - 'arn:aws:s3:::secure-bucket/*'
    Condition:
      StringEquals:
        's3:x-amz-server-side-encryption': 'AES256'
      IpAddress:
        'aws:SourceIp':
          - '10.0.0.0/8'

역할 기반 접근 제어 (RBAC)

# IAM 역할 예시
Resources:
  ApplicationRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: ApplicationRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
      Policies:
        - PolicyName: ApplicationPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - dynamodb:GetItem
                  - dynamodb:PutItem
                Resource: 'arn:aws:dynamodb:*:*:table/ApplicationTable'

참고: 전체 IAM 정책 예시는 AWS IAM 모범 사례AWS 보안 모범 사례를 참조하세요.

2.2 MFA 설정

MFA 방법 설명 사용 사례
가상 MFA 디바이스 Authenticator 앱 일반 사용자
하드웨어 MFA 디바이스 물리적 토큰 관리자 계정
SMS MFA 문자 메시지 간단한 인증 (권장하지 않음)

2.3 IAM 보안 체크리스트

체크리스트 항목 설명 AWS 도구
MFA 활성화 모든 사용자에 MFA 활성화 IAM Console
최소 권한 원칙 필요한 권한만 부여 IAM Access Analyzer
정기적인 권한 검토 90일마다 권한 검토 IAM Access Analyzer
사용하지 않는 자격 증명 제거 오래된 액세스 키, 역할 정리 IAM Credential Report
강력한 비밀번호 정책 복잡한 비밀번호 요구 IAM Password Policy

3. VPC 보안

3.1 VPC 아키텍처 설계

Public/Private Subnet 구성

# VPC 아키텍처 예시
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: SecureVPC
  
  PublicSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: ap-northeast-2a
      MapPublicIpOnLaunch: true
  
  PrivateSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: ap-northeast-2a
      MapPublicIpOnLaunch: false

NAT Gateway 설정

# NAT Gateway 예시
Resources:
  NATGateway:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt EIP.AllocationId
      SubnetId: !Ref PublicSubnet
  
  PrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Routes:
        - DestinationCidrBlock: 0.0.0.0/0
          NatGatewayId: !Ref NATGateway

3.2 Security Group 및 NACL

Security Group 설정

# Security Group 예시
# ISMS-P 요구사항: 네트워크 접근 제어
Resources:
  WebServerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupName: web-server-sg
      GroupDescription: Security group for web servers
      VpcId: !Ref VPC
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
          Description: HTTPS from internet
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
          Description: HTTP from internet
      SecurityGroupEgress:
        - IpProtocol: -1
          CidrIp: 0.0.0.0/0
          Description: Allow all outbound traffic
      Tags:
        - Key: Name
          Value: WebServerSecurityGroup
        - Key: Compliance
          Value: ISMS-P

참고: 전체 Security Group 설정 예시는 AWS Security Groups 모범 사례AWS VPC 보안 모범 사례를 참조하세요.

3.3 VPC 보안 체크리스트

체크리스트 항목 설명 AWS 도구
Private Subnet 활용 데이터베이스는 Private Subnet에 배치 VPC Console
Security Group 규칙 최소화 필요한 포트만 허용 Security Group Console
NACL 설정 네트워크 레벨 접근 제어 NACL Console
VPC Flow Logs 활성화 네트워크 트래픽 로깅 VPC Flow Logs
VPC Peering 보안 VPC Peering 시 보안 그룹 규칙 확인 VPC Peering Console

4. S3 보안

4.1 버킷 정책

# S3 버킷 정책 예시
# ISMS-P 요구사항: 접근 통제 및 암호화
Resources:
  SecureBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: secure-data-bucket
      VersioningConfiguration:
        Status: Enabled
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
            BucketKeyEnabled: true
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      LoggingConfiguration:
        DestinationBucketName: !Ref AccessLogsBucket
        LogFilePrefix: access-logs/
      LifecycleConfiguration:
        Rules:
          - Id: DeleteOldVersions
            Status: Enabled
            NoncurrentVersionExpirationInDays: 90

4.2 S3 보안 체크리스트

체크리스트 항목 설명 AWS 도구
버킷 정책 설정 접근 권한 명확히 정의 S3 Bucket Policy
암호화 활성화 서버 측 암호화 필수 S3 Encryption
버전 관리 활성화 데이터 복구 가능하도록 S3 Versioning
Public Access 차단 Public Access Block 활성화 S3 Block Public Access
접근 로그 활성화 버킷 접근 로그 수집 S3 Access Logging

5. RDS 보안

5.1 데이터베이스 암호화

# RDS 암호화 설정 예시
Resources:
  SecureDatabase:
    Type: AWS::RDS::DBInstance
    Properties:
      DBInstanceIdentifier: secure-db
      Engine: mysql
      EngineVersion: '8.0'
      MasterUsername: admin
      MasterUserPassword: !Ref DatabasePassword
      DBInstanceClass: db.t3.medium
      AllocatedStorage: 100
      StorageEncrypted: true
      KmsKeyId: !Ref RDSKMSKey
      VPCSecurityGroups:
        - !Ref DatabaseSecurityGroup
      DBSubnetGroupName: !Ref DBSubnetGroup
      BackupRetentionPeriod: 7
      PreferredBackupWindow: '03:00-04:00'
      EnableCloudwatchLogsExports:
        - error
        - slowquery

5.2 RDS 보안 체크리스트

체크리스트 항목 설명 AWS 도구
암호화 활성화 저장 데이터 암호화 RDS Encryption
보안 그룹 구성 데이터베이스 접근 제한 Security Group
자동 백업 활성화 정기적인 백업 설정 RDS Automated Backups
SSL/TLS 연결 연결 암호화 필수 RDS SSL/TLS
파라미터 그룹 설정 보안 관련 파라미터 설정 RDS Parameter Groups

6. EKS 보안

6.1 Pod Security Standards

# Pod Security Policy 예시
apiVersion: v1
kind: Namespace
metadata:
  name: secure-namespace
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted
---
apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
  namespace: secure-namespace
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 2000
  containers:
    - name: app
      image: nginx:latest
      securityContext:
        allowPrivilegeEscalation: false
        capabilities:
          drop:
            - ALL

6.2 Network Policy

# Network Policy 예시
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: secure-network-policy
  namespace: secure-namespace
spec:
  podSelector:
    matchLabels:
      app: secure-app
  policyTypes:
    - Ingress
    - Egress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: allowed-app
      ports:
        - protocol: TCP
          port: 8080
  egress:
    - to:
        - podSelector:
            matchLabels:
              app: database
      ports:
        - protocol: TCP
          port: 3306

6.3 EKS 보안 체크리스트

체크리스트 항목 설명 AWS 도구
Pod Security Standards Pod Security Policy 적용 EKS Pod Security
Network Policy 네트워크 트래픽 제어 Kubernetes Network Policy
RBAC 설정 역할 기반 접근 제어 Kubernetes RBAC
컨테이너 이미지 보안 취약점 스캔 및 검증 ECR Image Scanning
시크릿 관리 AWS Secrets Manager 통합 EKS Secrets Manager

7. 모니터링 및 감사

7.1 CloudTrail 설정

# CloudTrail 설정 예시
Resources:
  CloudTrailLogs:
    Type: AWS::CloudTrail::Trail
    Properties:
      TrailName: security-audit-trail
      S3BucketName: !Ref AuditLogsBucket
      IncludeGlobalServiceEvents: true
      IsLogging: true
      IsMultiRegionTrail: true
      EventSelectors:
        - ReadWriteType: All
          IncludeManagementEvents: true
          DataResources:
            - Type: AWS::S3::Object
              Values:
                - 'arn:aws:s3:::secure-bucket/*'
      KMSKeyId: !Ref CloudTrailKMSKey
      CloudWatchLogsLogGroupArn: !GetAtt CloudWatchLogGroup.Arn
      CloudWatchLogsRoleArn: !GetAtt CloudWatchLogsRole.Arn

7.2 CloudWatch 모니터링

모니터링 항목 CloudWatch 메트릭 알람 임계값
비정상 API 호출 CloudTrail API 호출 수 평균 대비 200% 증가
권한 에스컬레이션 IAM 권한 변경 이벤트 즉시 알람
네트워크 이상 VPC Flow Logs 분석 의심스러운 트래픽 패턴
암호화 미적용 S3 암호화 상태 암호화 미적용 객체 발견

7.3 Security Hub 통합

# Security Hub 설정 예시
Resources:
  SecurityHubAccount:
    Type: AWS::SecurityHub::Hub
    Properties:
      EnableDefaultStandards: true
      StandardsSubscriptionArns:
        - arn:aws:securityhub:ap-northeast-2::standards/cis-aws-foundations-benchmark/v/1.2.0
        - arn:aws:securityhub:ap-northeast-2::standards/pci-dss/v/3.2.1

8. 2025년 이후 최신 업데이트

8.1 IAM 보안 강화

리전 기반 액세스 제어: aws:SourceVpcArn 조건 키

2025년 11월, AWS는 리전 기반 액세스 제어를 위한 새로운 글로벌 조건 키 aws:SourceVpcArn을 도입했습니다.

# aws:SourceVpcArn 조건 키 예시
Version: '2012-10-17'
Statement:
  - Effect: Allow
    Action:
      - s3:GetObject
      - s3:PutObject
    Resource: 'arn:aws:s3:::secure-bucket/*'
    Condition:
      StringEquals:
        'aws:SourceVpcArn': 'arn:aws:ec2:ap-northeast-2:ACCOUNT_ID:vpc/vpc-xxxxxxxxx'

주요 활용 사례:

  • AWS PrivateLink를 통한 리소스 접근 제어
  • 데이터 레지던시 요구사항 충족
  • 특정 리전의 VPC 엔드포인트에서만 접근 허용

8.2 VPC 보안 강화

VPC 오리진의 교차 계정 지원

2025년 11월, Amazon CloudFront는 다른 AWS 계정의 VPC 리소스를 오리진으로 설정할 수 있도록 지원합니다.

주요 활용 사례:

  • 멀티 계정 아키텍처에서 공통 프런트 도메인 구성
  • 각 계정별 백엔드 VPC 패턴 구성
  • 보안 격리 유지하면서 리소스 공유

8.3 S3 보안 강화

S3 Express One Zone IPv6 지원 및 테이블 태깅

2025년 11월, S3 Express One Zone은 IPv6를 지원하며, S3 테이블에 대한 태깅 기능이 추가되었습니다.

주요 기능:

  • IPv6 네트워크 지원으로 보안 강화
  • 테이블 태깅을 통한 리소스 관리 및 보안 정책 적용
  • 비용 최적화 및 성능 향상

8.4 RDS 보안 강화

AWS Backup을 통한 Amazon EKS 지원

2025년 11월, AWS Backup은 Amazon EKS 클러스터, 네임스페이스, 볼륨 등 Kubernetes 워크로드를 직접 백업 및 복구할 수 있도록 지원합니다.

주요 기능:

  • 컨테이너 환경의 재해 복구 표준화
  • EKS 클러스터 자동 백업
  • 네임스페이스 및 볼륨 레벨 백업
# AWS Backup EKS 백업 설정 예시
Resources:
  EKSBackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan:
        BackupPlanName: eks-backup-plan
        Rules:
          - RuleName: eks-daily-backup
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: cron(0 3 * * ? *)
            Lifecycle:
              DeleteAfterDays: 30
            CopyActions:
              - DestinationBackupVaultArn: !GetAtt BackupVault.Arn
                Lifecycle:
                  DeleteAfterDays: 90

8.5 EKS 보안 강화

향상된 네트워크 보안 정책

2025년 12월, Amazon EKS는 Kubernetes 워크로드에 대한 네트워크 보안 태세와 클러스터 외부 대상과의 통합을 개선하기 위해 향상된 네트워크 정책 기능을 발표했습니다.

주요 기능:

  • 전체 클러스터에 걸친 네트워크 액세스 필터 중앙 적용
  • DNS 기반 정책을 활용한 클러스터 환경의 송신 트래픽 보호
  • 네트워크 보안 정책의 중앙 관리

EKS Cluster Insights 정책

2025년, EKS는 클러스터 인사이트를 사용한 Kubernetes 버전 업그레이드 준비 및 잘못된 구성 문제 해결을 위해 AmazonEKSClusterInsightsPolicy를 도입했습니다.

주요 기능:

  • 클러스터 노드의 상태 정보 읽기
  • kube-proxy 구성에 대한 읽기 액세스
  • 클러스터의 보안과 안정성 향상
# EKS Cluster Insights Policy 예시
Resources:
  EKSClusterInsightsRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: EKSClusterInsightsRole
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: eks.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonEKSClusterInsightsPolicy

결론

AWS 클라우드 환경에서 보안을 강화하기 위해서는 IAM부터 EKS까지 모든 서비스 계층에서 Defense in Depth 전략을 적용해야 합니다.

주요 보안 원칙:

  1. 최소 권한 원칙: 필요한 최소한의 권한만 부여
  2. 암호화: 전송 중/저장 데이터 암호화
  3. 로그 관리: 모든 활동 로깅 및 모니터링
  4. 정기적 검토: 보안 설정 정기적 검토 및 개선

이 가이드를 참고하여 AWS 환경에서 강력한 보안 아키텍처를 구축하시기 바랍니다.

관련 자료


마지막 업데이트: 2026-01-14 작성 기준: SK Shieldus 2024년 AWS 클라우드 보안 가이드

Comments

0

GitHub 계정으로 로그인하여 댓글을 작성하세요

이 글이 도움이 되셨나요?
댓글을 불러오는 중...
댓글 작성 가이드
  • 건설적인 피드백과 질문을 환영합니다
  • 마크다운 문법을 사용할 수 있습니다
  • 코드 블록은 ``` 로 감싸주세요
  • 상대방을 존중하는 표현을 사용해주세요