본문

Lambda 보안 강화

AWS Lambda 보안강화

AWS Lambda는 서버리스 컴퓨팅의 한 형태로, 코드 실행을 위해 물리적 서버 또는 가상 서버를 관리할 필요 없이 간단히 코드를 업로드하고 AWS가 나머지를 처리하도록 하는 서비스입니다. Lambda의 보안 강화를 위한 Lambda Extension의 활용 방안을 살펴보겠습니다.

Lambda Extensions란 무엇인가?

Lambda Extensions는 Lambda 함수를 실행할 때 함께 실행되어 다양한 작업을 수행할 수 있는 추가 구성 요소입니다. 이 확장은 다음과 같은 목적을 가지고 있습니다:

  1. 진단 정보 캡처: 함수 호출 전, 중, 후에 진단 정보를 캡처하여 문제 해결에 도움을 줍니다.
  2. 자동 코드 계측: 코드 변경 없이 자동으로 코드 실행을 모니터링합니다.
  3. 구성 설정 및 비밀 관리: 함수 호출 전에 구성 설정이나 비밀 정보를 가져옵니다.
  4. 보안 에이전트 실행: 보안 에이전트를 통해 기능 활동을 감지하고 경고합니다.

Lambda Extensions는 복잡한 설치나 구성을 필요로 하지 않으며, Lambda Layer를 통해 함수에 도구를 추가하거나 컨테이너 이미지에 도구를 포함하는 방식으로 쉽게 사용할 수 있습니다.

Lambda 보안 강화

 

Lambda 보안 강화를 위해서는 먼저 Lambda 서비스에 발생할 수 있는 보안적 취약점을 이해해야 합니다. Lambda 서비스는 다음과 같은 보안 문제를 가질 수 있습니다:

  1. 안전하지 않은 코드: 서버리스 애플리케이션 개발 시, 안전하지 않은 예제 코드를 사용하는 경우가 많습니다.
  2. 민감정보 노출: API 키나 인증서 등의 민감 정보가 코드 저장소에 노출되는 경우가 있습니다.
  3. 불충분한 보안 설정: 보안 설정이 제대로 이루어지지 않아 공격자가 애플리케이션을 조종할 수 있습니다.

Lambda 보안 강화를 위해 AWS IAM(Identity and Access Management)과 Vault와 같은 비밀 관리 도구를 사용하여 보안을 강화할 수 있습니다. Vault는 민감한 데이터를 안전하게 저장하고 접근할 수 있는 방법을 제공합니다.

Vault Lambda Extension

Vault Lambda Extension을 사용하여 Lambda와 Vault를 연동하면, Lambda 함수 실행 시 민감 정보를 안전하게 관리할 수 있습니다. 이 확장은 다음과 같은 작업을 포함합니다:

  1. AWS Auth를 통한 인증: Vault Lambda Extension은 AWS Auth를 통해 인증하며, 이를 위해 IAM 역할 및 정책을 설정합니다.
  2. 환경 변수 설정: Lambda 함수의 환경 변수에 Vault와 연동을 위한 정보를 설정합니다.
  3. 민감정보 조회: 민감 정보를 메모리에 상주시키거나 임시 파일로 저장하여 Lambda 함수가 이를 활용할 수 있게 합니다.

AWS IAM 설정

Lambda 보안을 강화하기 위해 AWS IAM에서 다음과 같은 작업을 수행합니다:

  1. 사용자 정책 생성: Vault AWS Auth에 인증 시 필요한 권한을 설정합니다.
  2. 사용자 생성: IAM 사용자와 그에 대한 액세스 키와 시크릿 키를 생성합니다.
  3. 역할 생성: Lambda 함수가 Vault에 접근할 수 있도록 역할을 설정합니다.

Vault 설정

Vault에서 Lambda와 연동하기 위해 다음과 같은 작업을 수행합니다:

  1. AWS Auth 활성화: Vault에서 AWS Auth를 활성화합니다.
  2. 역할 정책 생성: Lambda에서 사용할 역할 정책을 생성합니다.
  3. 접근 키와 시크릿 키 설정: Lambda 함수가 Vault에 접근할 수 있도록 AWS Auth 설정을 구성합니다.

Lambda 함수 설정

Lambda 함수를 설정할 때, 다음과 같은 사항을 고려해야 합니다:

  1. 런타임 환경 선택: Python 3.9와 같은 런타임 환경을 선택합니다.
  2. IAM 역할 지정: Lambda 함수가 Vault에 접근할 수 있도록 IAM 역할을 지정합니다.
  3. 환경 변수 설정: Vault의 주소, 인증 방식, 민감정보 저장 위치 등의 정보를 환경 변수로 설정합니다.

Lambda 함수와 Vault Lambda Extension이 구동되면, Lambda 함수는 Vault에서 민감 정보를 안전하게 조회하여 사용할 수 있습니다. 이는 민감 정보가 메모리에 임시 상주되거나 임시 파일로 저장되는 두 가지 방법을 통해 가능합니다.

결론

AWS Lambda의 보안 강화를 위해 Lambda Extensions와 Vault와 같은 도구를 활용하면, 서버리스 애플리케이션의 보안성을 크게 높일 수 있습니다. 이를 통해 민감 정보를 안전하게 관리하고, 보안 취약점을 최소화할 수 있습니다. Lambda Extensions를 활용하여 자동화된 코드 계측, 구성 설정 관리, 보안 에이전트 실행 등을 통해 더욱 안전한 서버리스 환경을 구축할 수 있습니다.

 

실습: Lambda 코드 내 민감정보 관리 및 보안 강화 (Hashicorp Vault 활용)

 

필요자원

  • Vault Server: 이전 실습에서 사용한 Server 재사용
  • Lambda 함수 + Vault Extension: Vault 에 인증 후 민감정보 조회 및 코드에서 활용

AWS IAM 작업

1. AWS IAM에서 사용자가 사용할 정책 생성 - Vault AWS Auth에 인증 시 IAM의 Role를 확인 할 수 있는 권한 설정

 

2. AWS IAM에서 사용자 생성 – Vault AWS Auth에 인증 시 IAM의 Role을 확인 할 수 있는 access_key와 secret_key 필요

 

3. AWS IAM에서 역할 생성 - Lambda에서 Vault에 인증하기 위해 Vault AWS Auth를 사용하는데 이 때 사용하는 Role 설정

 

 

Vault 작업

1. AWS Auth 활성화

 

2. AWS Auth role policy 생성 – Lambda에서 AWS Auth의 role을 호출 하면, role에 설정된 policy의 권한으로 정보 확인

 

3. AWS Auth 설정 : access_key와 secret_key 설정

 

4. AWS Auth role 생성 : Lambda에서 AWS Auth로 인증받기 위해서는 Vault AWS Auth role을 호출 (AWS IAM의 Vault AWS Auth role의 ARN 설정, Vault AWS Auth role polity 설정)

 

5. AWS STS client 설정 : region이 ap-northeast-2이면, AWS Auth의 Role를 사용하기 위해 STS 설정을 해야 함

 

6. 테스트 민감정보 등록

$ vault secrets enable -path=kv/data/test kv-v2

$ vault kv put -mount=kv/data/test lambda api-key=ABCDEFG9876

 

 

Lambda

1. Lambda 함수 생성 - 권한 (AWS Auth를 위한 Role) 설정

 

2. Extension 설정은 맨 하단 계층 추가를 통해 설정

 

 

계층 선택 시 ARN 지정 선택, 정보는 "arn:aws:lambda:ap-northeast-2:634166935893:layer:vault-lambda-extension:19" 입력

 

3. Lambda 의 환경변수에 Vault와 연동을 위한 변수 설정

 

 

Lambda 코드 작성 및 테스트

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

공유

댓글