Lambda 환경 변수 보안

Lambda 환경 변수 보안 (Securing Lambda environment variables)

환경 변수를 보호하기 위해 서버 측 암호화를 사용해 저장 데이터를 보호하고, 클라이언트 측 암호화를 사용해 전송 중인 데이터를 보호할 수 있습니다.

출처: AWS Lambda 개발자 안내서

본문

참고

데이터베이스 보안을 강화하려면 환경 변수 대신 AWS Secrets Manager를 사용해 데이터베이스 자격 증명을 저장할 것을 권장합니다. 자세한 내용은 Lambda 함수에서 Secrets Manager 시크릿 사용을 참조하세요.

저장 데이터 보안 (Security at rest)

Lambda는 항상 AWS KMS 키로 저장 데이터에 대한 서버 측 암호화를 제공합니다. 기본적으로 Lambda는 AWS 관리형 키를 사용합니다. 이 기본 동작이 워크플로에 맞다면 다른 것을 설정할 필요가 없습니다. Lambda는 사용자 계정에 AWS 관리형 키를 만들고 권한을 관리합니다. AWS는 이 키를 사용하는 데 요금을 부과하지 않습니다.

원한다면 AWS KMS 고객 관리형 키를 대신 제공할 수 있습니다. KMS 키 회전을 제어하거나 조직의 KMS 키 관리 요구 사항을 충족하기 위해 이렇게 할 수 있습니다. 고객 관리형 키를 사용하면 KMS 키에 액세스할 수 있는 계정의 사용자만 함수의 환경 변수를 보거나 관리할 수 있습니다.

고객 관리형 키에는 표준 AWS KMS 요금이 부과됩니다. 자세한 내용은 AWS Key Management Service 요금을 참조하세요.

전송 중 보안 (Security in transit)

추가 보안을 위해 전송 중 암호화 도우미를 활성화할 수 있습니다. 이렇게 하면 환경 변수가 전송 중 보호를 위해 클라이언트 측에서 암호화됩니다.

환경 변수에 대한 암호화를 구성하려면:

  1. AWS Key Management Service(AWS KMS)를 사용해 Lambda가 서버 측 및 클라이언트 측 암호화에 사용할 고객 관리형 키를 만듭니다. 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 생성을 참조하세요.
  2. Lambda 콘솔을 사용해 Edit environment variables(환경 변수 편집) 페이지로 이동합니다.
    • Lambda 콘솔의 Functions(함수) 페이지를 엽니다.
    • 함수를 선택합니다.
    • Configuration(구성) 을 선택한 다음 왼쪽 탐색 창에서 Environment variables(환경 변수) 를 선택합니다.
    • Environment variables 섹션에서 Edit(편집) 을 선택합니다.
    • Encryption configuration(암호화 구성) 을 확장합니다.
  3. (선택 사항) 콘솔 암호화 도우미를 활성화해 클라이언트 측 암호화로 전송 중인 데이터를 보호합니다.
    • Encryption in transit(전송 중 암호화) 아래에서 Enable helpers for encryption in transit(전송 중 암호화 도우미 활성화) 를 선택합니다.
    • 콘솔 암호화 도우미를 활성화할 각 환경 변수에 대해 환경 변수 옆의 Encrypt(암호화) 를 선택합니다.
    • AWS KMS key to encrypt in transit(전송 중 암호화용 AWS KMS 키) 아래에서 이 절차 시작 시 만든 고객 관리형 키를 선택합니다.
    • Execution role policy(실행 역할 정책) 을 선택하고 정책을 복사합니다. 이 정책은 함수의 실행 역할에 환경 변수를 복호화할 권한을 부여합니다.
    • 이 정책을 저장해 이 절차의 마지막 단계에서 사용합니다.
    • 환경 변수를 복호화하는 코드를 함수에 추가합니다. 예제를 보려면 Decrypt secrets snippet(시크릿 복호화 스니펫) 을 선택합니다.
  4. (선택 사항) 저장 데이터 암호화를 위한 고객 관리형 키를 지정합니다.
    • Use a customer master key(고객 마스터 키 사용) 을 선택합니다.
    • 이 절차 시작 시 만든 고객 관리형 키를 선택합니다.
  5. Save(저장) 를 선택합니다.
  6. 권한을 설정합니다.
    • 서버 측 암호화에 고객 관리형 키를 사용하는 경우 함수의 환경 변수를 보거나 관리할 수 있게 하려는 모든 사용자나 역할에 권한을 부여합니다. 자세한 내용은 서버 측 암호화 KMS 키에 대한 권한 관리를 참조하세요.
    • 전송 중 보안을 위해 클라이언트 측 암호화를 활성화하는 경우 함수에 kms:Decrypt API 작업을 호출할 권한이 필요합니다. 이 절차에서 앞서 저장한 정책을 함수의 실행 역할에 추가합니다.

서버 측 암호화 KMS 키에 대한 권한 관리

기본 암호화 키를 사용하려면 사용자나 함수의 실행 역할에 AWS KMS 권한이 필요하지 않습니다. 고객 관리형 키를 사용하려면 키를 사용할 권한이 필요합니다. Lambda는 사용자의 권한을 사용해 키에 대한 grant를 만듭니다. 이를 통해 Lambda가 암호화에 키를 사용할 수 있습니다.

  • kms:ListAliases — Lambda 콘솔에서 키를 보기 위해 필요합니다.
  • kms:CreateGrant, kms:Encrypt — 함수에 고객 관리형 키를 구성하기 위해 필요합니다.
  • kms:Decrypt — 고객 관리형 키로 암호화된 환경 변수를 보고 관리하기 위해 필요합니다.

이 권한은 AWS 계정에서 또는 키의 리소스 기반 권한 정책에서 얻을 수 있습니다. ListAliases는 Lambda의 관리형 정책에서 제공합니다. 키 정책은 나머지 권한을 Key users 그룹의 사용자에게 부여합니다.

Decrypt 권한이 없는 사용자도 함수를 관리할 수는 있지만 Lambda 콘솔에서 환경 변수를 보거나 관리할 수는 없습니다. 사용자가 환경 변수를 보지 못하게 하려면 기본 키, 고객 관리형 키 또는 모든 키에 대한 액세스를 거부하는 문을 사용자의 권한에 추가하세요.

예시 IAM 정책 — 키 ARN으로 액세스 거부 (JSON):

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-2:111122223333:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc"
        }
    ]
}

키 권한 관리에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 AWS KMS의 키 정책을 참조하세요.

더 알아보기 (Learn more)

  • AWS KMS 키 관리
  • AWS Secrets Manager로 자격 증명 저장
  • Lambda 환경 변수