

# Lambda 환경 변수 보안
<a name="configuration-envvars-encryption"></a>

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

**참고**  
데이터베이스 보안을 강화하려면 환경 변수 대신 AWS Secrets Manager를 사용하여 데이터베이스 보안 인증 정보를 저장하는 것이 좋습니다. 자세한 내용은 [Lambda 함수에서 Secrets Manager 보안 암호 사용](with-secrets-manager.md) 섹션을 참조하세요.

**저장 중 보안**  
Lambda는 AWS KMS key를 이용해 항상 저장 중 서버 측 암호화를 제공합니다. 기본적으로 Lambda는 AWS 관리형 키를 사용합니다. 이 기본 동작이 워크플로에 적합한 경우 다른 작업을 설정할 필요가 없습니다. Lambda가 계정에 AWS 관리형 키를 생성하고 사용자에 대한 권한을 관리합니다. AWS에서는 이 키의 사용에 대한 요금을 청구하지 않습니다.

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

고객 관리형 키에는 표준 AWS KMS 요금이 발생합니다. 자세한 내용은 [AWS Key Management Service 요금](https://aws.amazon.com/kms/pricing/)을 참조하십시오.

**전송 중 보안**  
보안을 강화하기 위해 전송 중 암호화를 위한 도우미를 사용하도록 설정하면 전송 중 보호를 위해 환경 변수가 클라이언트 측으로 암호화됩니다.

**환경 변수 암호화를 구성하려면**

1. AWS Key Management Service(AWS KMS)를 사용하여 서버 측 및 클라이언트 측 암호화에 사용할 Lambda에 대한 고객 관리형 키를 생성할 수 있습니다. 자세한 내용은 *AWS Key Management Service 개발자 안내서*에서 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.

1. Lambda 콘솔을 사용하여 **환경 변수 편집** 페이지로 이동합니다.

   1. Lambda 콘솔의 [함수 페이지](https://console.aws.amazon.com/lambda/home#/functions)를 엽니다.

   1. 함수를 선택합니다.

   1. **구성**을 선택한 다음 왼쪽 탐색 모음에서 **환경 변수**를 선택합니다.

   1. **환경 변수** 섹션에서 **편집**을 선택합니다.

   1. **Encryption configuration(암호화 구성)**을 확장합니다.

1. (선택 사항) 클라이언트측 암호화를 사용하여 전송 중 데이터를 보호하도록 콘솔 암호화 도우미를 활성화합니다.

   1. **전송 중 암호화**에서 **전송 중 암호화에 대해 도우미 사용**을 선택합니다.

   1. 콘솔 암호화 도우미를 사용 설정하려는 각 환경 변수에 대해 환경 변수 옆에 있는 **암호화**를 선택합니다.

   1.  전송 중 암호화할 AWS KMS key에서, 이 절차를 시작할 때 생성한 고객 관리형 키를 선택합니다.

   1. **실행 역할 정책**을 선택하고 정책을 복사합니다. 이 정책은 환경 변수를 복호화할 수 있는 권한을 함수의 실행 역할에 부여합니다.

      이 정책을 저장하여 절차의 마지막 단계에서 사용합니다.

   1. 환경 변수를 복호화하는 함수에 코드를 추가합니다. 예제를 보려면 **암호 코드 조각 해독**을 선택합니다.

1. (선택 사항) 유휴 시 암호화를 위해 고객 관리형 키를 지정합니다.

   1. **고객 마스터 키 사용**을 선택합니다.

   1. 이 절차를 시작할 때 생성한 고객 관리형 키를 선택합니다.

1. **저장**을 선택합니다.

1. 권한을 설정합니다.

   서버 측 암호화와 함께 고객 관리형 키를 사용하는 경우, 함수에서 환경 변수를 보거나 관리할 수 있는 사용자 또는 역할에 권한을 부여하세요. 자세한 내용은 [서버 측 암호화 KMS 키에 대한 권한 관리](#managing-permissions-to-your-server-side-encryption-key) 섹션을 참조하세요.

   전송 중 보안을 위해 클라이언트 측 암호화를 사용하도록 설정하는 경우, 함수가 `kms:Decrypt` API 작업을 호출하려면 권한이 필요합니다. 이전에 이 절차에서 저장한 정책을 함수의 [실행 역할](lambda-intro-execution-role.md)에 추가합니다.

## 서버 측 암호화 KMS 키에 대한 권한 관리
<a name="managing-permissions-to-your-server-side-encryption-key"></a>

사용자 또는 함수의 실행 역할에 대한 AWS KMS 권한 없이도 기본 암호화 키를 사용할 수 있습니다. 고객 관리형 CMK를 사용하려면 키 사용 권한이 필요합니다. Lambda는 사용자의 권한을 사용하여 키에 대한 권한 부여를 생성합니다. 이를 통해 Lambda가 암호화에 해당 키를 사용할 수 있습니다.
+ `kms:ListAliases` – Lambda 콘솔에서 키 보기.
+ `kms:CreateGrant`, `kms:Encrypt` – 함수에 대한 고객 관리형 키 구성하기
+ `kms:Decrypt` – 고객 관리형 키로 암호화된 환경 변수를 보고 관리하기

AWS 계정 또는 키의 리소스 기반 권한 정책에서 이러한 권한을 얻을 수 있습니다. `ListAliases`는 [Lambda의 관리형 정책](access-control-identity-based.md)에서 제공합니다. 키 정책에 따라 **키 사용자** 그룹의 사용자는 나머지 권한을 받습니다.

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

**Example IAM 정책 - 키 ARN별 액세스 거부**    
****  

```
{
    "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 개발자 안내서*의 [Key policies in AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)를 참조하세요.