AWS

AWS EC2, Lambda, EFS 생성 및 EFS 접근 IaC

devfinger 2024. 10. 23. 10:41

Terraform을 사용한 EFS 사용 설정

provider "aws" {
  region = "ap-northeast-2"
}

# EFS 파일 시스템 생성
resource "aws_efs_file_system" "efs" {
  encrypted = true  # 파일 시스템 암호화 옵션
  lifecycle_policy {
    transition_to_ia = "AFTER_30_DAYS"  # 인액티브 파일들을 Infrequent Access로 이동
  }
  tags = {
    Name = "MyEFS"
  }
}

# EFS 마운트 타겟 생성 (EC2에서 접근할 수 있도록)
resource "aws_efs_mount_target" "efs_mount" {
  count          = length(var.subnet_ids)
  file_system_id = aws_efs_file_system.efs.id
  subnet_id      = var.subnet_ids[count.index]
  security_groups = [aws_security_group.efs_sg.id]
}

# EFS에 접근할 수 있는 Security Group
resource "aws_security_group" "efs_sg" {
  name        = "efs_sg"
  description = "Allow EC2 and Lambda to access EFS"
  vpc_id      = var.vpc_id

  ingress {
    from_port   = 2049
    to_port     = 2049
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]  # 보안 이유로 더 제한적인 범위로 설정 필요
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# EC2 인스턴스에 EFS 마운트 (user_data로 EC2에 연결)
resource "aws_instance" "ec2" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
  subnet_id     = var.subnet_id
  security_groups = [aws_security_group.ec2_sg.id]

  user_data = <<-EOF
              #!/bin/bash
              yum install -y amazon-efs-utils
              mkdir /mnt/efs
              mount -t efs ${aws_efs_file_system.efs.id}:/ /mnt/efs
              EOF

  tags = {
    Name = "EC2WithEFS"
  }
}

# Lambda 함수에 EFS 연결
resource "aws_lambda_function" "lambda" {
  filename      = "lambda_function.zip"
  function_name = "my_lambda"
  role          = aws_iam_role.lambda_exec.arn
  handler       = "index.handler"
  runtime       = "nodejs14.x"

  # Lambda에서 EFS에 접근할 수 있는 설정
  file_system_config {
    arn            = aws_efs_access_point.my_access_point.arn
    local_mount_path = "/mnt/efs"
  }
}

resource "aws_efs_access_point" "my_access_point" {
  file_system_id = aws_efs_file_system.efs.id

  posix_user {
    uid = 1000
    gid = 1000
  }

  root_directory {
    path = "/"
    creation_info {
      owner_gid   = 1000
      owner_uid   = 1000
      permissions = 755
    }
  }
}

 

EFS 암호화에 대한 설명

  1. 암호화를 하지 않는 경우: 파일을 저장하거나 전송할 때 암호화되지 않습니다. 따라서 데이터가 전송 중에 가로채거나 도난될 경우, 보안 위험
  2. 암호화를 하는 경우: AWS에서 제공하는 관리형 키 (KMS)로 데이터를 암호화. 데이터가 저장되거나 전송되는 동안 자동으로 암호화되며, 별도의 작업 없이 보안이 강화

암호화된 파일의 처리

  • EFS의 암호화는 AWS에서 관리하는 방식으로, 사용자가 직접 파일을 복호화할 필요가 없다. 즉, 암호화를 설정하면 Lambda나 EC2에서 EFS에 접근할 때 자동으로 복호화된 데이터 사용
  • 따라서 사용자가 직접 암호를 풀어야 할 필요는 없다. AWS가 자동으로 데이터를 암호화 및 복호화

결론적으로, EFS 암호화는 추가적인 보안 계층을 제공하면서도 Lambda나 EC2에서는 투명하게 데이터를 읽고 쓰기 가능