

# Lambda 환경 변수 작업
<a name="configuration-envvars"></a>

환경 변수를 사용하면 코드를 업데이트하지 않고도 함수의 동작을 조정할 수 있습니다. 환경 변수는 함수의 버전별 구성에 저장된 문자열 쌍입니다. Lambda 런타임은 코드에 환경 변수를 사용할 수 있게 하고 함수 및 호출 요청에 대한 정보가 포함된 추가 환경 변수를 설정합니다.

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

환경 변수는 함수 간접 호출 전에 평가되지 않습니다. 정의한 모든 값은 리터럴 문자열로 간주되며 확장되지 않습니다. 함수 코드에서 변수 평가를 수행합니다.

## Lambda 환경 변수 생성
<a name="create-environment-variables"></a>

Lambda 콘솔, AWS Command Line Interface(AWS CLI), AWS Serverless Application Model(AWS SAM) 또는 AWS SDK를 사용하여 Lambda에서 환경 변수를 구성할 수 있습니다.

------
#### [ Console ]

게시되지 않은 함수 버전에서 환경 변수를 정의합니다. 버전을 게시할 때 환경 변수는 다른 [버전별 구성 설정](configuration-versions.md)과 함께 해당 버전에 대해 잠금 상태가 됩니다.

키와 값을 정의하여 함수에 환경 변수를 생성합니다. 함수는 키 이름을 사용하여 환경 변수 값을 검색합니다.

**Lambda 콘솔에서 환경 변수를 설정하려면**

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

1. 함수를 선택합니다.

1. **구성** 탭을 선택하고 **환경 변수**를 선택하세요.

1. **Environment variables(환경 변수)**에서 **편집**을 선택합니다.

1. **Add environment variable(환경 변수 추가)**을 선택합니다.

1. 키와 값을 입력합니다.

**요구 사항**
   + 키는 문자로 시작되며 최소 2자입니다.
   + 키에는 문자, 숫자 및 밑줄(`_`)만 포함됩니다.
   + 키는 [Lambda에 의해 예약](#configuration-envvars-runtime)되지 않습니다.
   + 모든 환경 변수의 총 크기는 4KB를 초과하지 않습니다.

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

**콘솔 코드 편집기에서 환경 변수 목록을 생성하려면**

Lambda 코드 편집기에서 환경 변수 목록을 생성할 수 있습니다. 이는 코딩하는 동안 환경 변수를 빠르게 참조할 수 있는 방법입니다.

1. **코드** 탭을 선택합니다.

1. 아래로 스크롤하여 코드 편집기의 **환경 변수** 섹션으로 이동하세요. 기존 환경 변수가 여기에 나열됩니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/env-var.png)

1. 새 환경 변수를 생성하려면 더하기 기호(![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/add-plus.png))를 선택하세요.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/create-env-var.png)

콘솔 코드 편집기에 나열되어 있는 환경 변수는 암호화된 상태로 유지됩니다. 전송 중 암호화에 대해 암호화 도우미를 활성화한 경우 해당 설정은 변경되지 않습니다. 자세한 내용은 [Lambda 환경 변수 보안](configuration-envvars-encryption.md) 섹션을 참조하세요.

환경 변수 목록은 읽기 전용이며 Lambda 콘솔에서만 사용할 수 있습니다. 이 파일은 함수의 .zip 파일 아카이브를 다운로드할 때 포함되지 않으며, 이 파일을 업로드하여 환경 변수를 추가할 수 없습니다.

------
#### [ AWS CLI ]

다음 예제에서는 `my-function`라는 함수에서 두 개의 환경 변수를 설정합니다 .

```
aws lambda update-function-configuration \
  --function-name my-function \
  --environment "Variables={BUCKET=amzn-s3-demo-bucket,KEY=file.txt}"
```

`update-function-configuration` 명령을 사용하여 환경 변수를 적용하면 `Variables` 구조의 전체 내용이 바뀝니다. 새 환경 변수를 추가할 때 기존 환경 변수를 유지하려면 요청에 기존 값을 모두 포함시킵니다.

현재 구성을 가져오려면 `get-function-configuration` 명령을 사용합니다.

```
aws lambda get-function-configuration \
  --function-name my-function
```

다음 결과가 표시됩니다.

```
{
    "FunctionName": "my-function",
    "FunctionArn": "arn:aws:lambda:us-east-2:111122223333:function:my-function",
    "Runtime": "nodejs24.x",
    "Role": "arn:aws:iam::111122223333:role/lambda-role",
    "Environment": {
        "Variables": {
            "BUCKET": "amzn-s3-demo-bucket",
            "KEY": "file.txt"
        }
    },
    "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15",
    ...
}
```

`get-function-configuration` 출력의 개정 ID를 파라미터로 `update-function-configuration`에 전달할 수 있습니다. 이렇게 하면 구성을 읽을 때와 업데이트할 때 사이에 값이 변경되지 않습니다.

함수의 암호화 키를 구성하려면 `KMSKeyARN` 옵션을 설정합니다.

```
aws lambda update-function-configuration \
  --function-name my-function \
  --kms-key-arn arn:aws:kms:us-east-2:111122223333:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

------
#### [ AWS SAM ]

[AWS Serverless Application Model](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/serverless-getting-started.html )을 사용하여 함수에 대한 환경 변수를 구성할 수 있습니다. `template.yaml` 파일의 [환경](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/sam-resource-function.html#sam-function-environment) 및 [변수](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-environment.html#cfn-lambda-function-environment-variables) 속성을 업데이트한 다음 [sam deploy](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html)를 실행합니다.

**Example template.yaml**  

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: An AWS Serverless Application Model template describing your function.
Resources:
  my-function:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Description: ''
      MemorySize: 128
      Timeout: 120
      Handler: index.handler
      Runtime: nodejs24.x
      Architectures:
        - x86_64
      EphemeralStorage:
        Size: 10240
      Environment:
        Variables:
          BUCKET: amzn-s3-demo-bucket
          KEY: file.txt
      # Other function properties...
```

------
#### [ AWS SDKs ]

AWS SDK를 사용하여 환경 변수를 관리하려면 다음 API 작업을 사용합니다.
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)
+ [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html)

자세한 내용은 선호하는 프로그래밍 언어에 대한 [AWS SDK 설명서](https://aws.amazon.com/developer/tools/)를 참조하세요.

------

## 환경 변수에 대한 예제 시나리오
<a name="configuration-envvars-example"></a>

환경 변수를 사용하여 테스트 환경 및 프로덕션 환경에서 함수 동작을 사용자 지정할 수 있습니다. 예를 들어, 코드는 같지만 구성이 다른 두 개의 함수를 생성할 수 있습니다. 한 함수는 테스트 데이터베이스에 연결되고, 다른 함수는 프로덕션 데이터베이스에 연결됩니다. 이 경우 환경 변수를 사용하여 데이터베이스의 호스트 이름 및 기타 연결 세부 정보를 함수에 전달합니다.

다음 예는 환경 변수로 데이터베이스 호스트 및 데이터베이스 이름을 정의하는 방법을 보여줍니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/lambda/latest/dg/images/console-env.png)


테스트 환경에서 프로덕션 환경보다 더 많은 디버그 정보를 생성하도록 하려면 환경 변수를 설정하여 더 많은 상세 표시 로깅 또는 더 자세한 추적을 사용하도록 테스트 환경을 구성하면 됩니다.

예를 들어 테스트 환경에서 키 `LOG_LEVEL` 및 디버그 또는 트레이스의 로그 수준을 나타내는 값을 사용하여 환경 변수를 설정할 수 있습니다. Lambda 함수의 코드에서 이 환경 변수를 사용하여 로그 수준을 설정할 수 있습니다.

Python 및 Node.js의 다음 코드 예제에서는 이를 달성하는 방법을 보여줍니다. 이 예제에서는 환경 변수의 값이 Python에서는 `DEBUG` 또는 Node.js에서는 `debug`라고 가정합니다.

------
#### [ Python ]

**Example 로그 수준을 설정하는 Python 코드**  

```
import os
import logging

# Initialize the logger
logger = logging.getLogger()

# Get the log level from the environment variable and default to INFO if not set
log_level = os.environ.get('LOG_LEVEL', 'INFO')

# Set the log level
logger.setLevel(log_level)

def lambda_handler(event, context):
    # Produce some example log outputs
    logger.debug('This is a log with detailed debug information - shown only in test environment')
    logger.info('This is a log with standard information - shown in production and test environments')
```

------
#### [ Node.js (ES module format) ]

**Example 로그 수준을 설정하는 Node.js 코드**  
이 예제에서는 `winston` 로깅 라이브러리를 사용합니다. npm을 사용하여 함수의 배포 패키지에 이 라이브러리를 추가합니다. 자세한 내용은 [종속 항목이 있는 .zip 배포 패키지 생성](nodejs-package.md#nodejs-package-create-dependencies) 섹션을 참조하세요.  

```
import winston from 'winston';

// Initialize the logger using the log level from environment variables, defaulting to INFO if not set
const logger = winston.createLogger({
   level: process.env.LOG_LEVEL || 'info',
   format: winston.format.json(),
   transports: [new winston.transports.Console()]
});

export const handler = async (event) => {
   // Produce some example log outputs
   logger.debug('This is a log with detailed debug information - shown only in test environment');
   logger.info('This is a log with standard information - shown in production and test environment');
   
};
```

------

## Lambda 환경 변수 검색
<a name="retrieve-environment-variables"></a>

함수 코드에서 환경 변수를 검색하려면 프로그래밍 언어에 대한 표준 메서드를 사용합니다.

------
#### [ Node.js ]

```
let region = process.env.AWS_REGION
```

------
#### [ Python ]

```
import os
  region = os.environ['AWS_REGION']
```

**참고**  
경우에 따라 다음 형식을 사용해야 할 수 있습니다.  

```
region = os.environ.get('AWS_REGION')
```

------
#### [ Ruby ]

```
region = ENV["AWS_REGION"]
```

------
#### [ Java ]

```
String region = System.getenv("AWS_REGION");
```

------
#### [ Go ]

```
var region = os.Getenv("AWS_REGION")
```

------
#### [ C\$1 ]

```
string region = Environment.GetEnvironmentVariable("AWS_REGION");
```

------
#### [ PowerShell ]

```
$region = $env:AWS_REGION
```

------

Lambda는 저장 시 환경 변수를 암호화하여 안전하게 저장합니다. [다른 암호화 키를 사용하도록 Lambda를 구성](configuration-envvars-encryption.md)하거나, 클라이언트 측의 환경 변수 값을 암호화하거나, AWS Secrets Manager를 사용해 CloudFormation 템플릿에서 환경 변수를 설정할 수 있습니다.

## 정의된 런타임 환경 변수
<a name="configuration-envvars-runtime"></a>

Lambda [런타임](lambda-runtimes.md)은 초기화 중에 여러 환경 변수를 설정합니다. 대부분의 환경 변수는 함수 또는 런타임에 관한 정보를 제공합니다. 이러한 환경 변수의 키는 *예약*되어 있으며 함수 구성에서 설정할 수 없습니다.

**예약된 환경 변수**
+ `_HANDLER` – 함수에 대해 구성된 핸들러 위치입니다.
+ `_X_AMZN_TRACE_ID` – [X-Ray 추적 헤더](services-xray.md)입니다. 이 환경 변수는 간접 호출할 때마다 변경됩니다.
  + 이 환경 변수는 OS 전용 런타임(`provided` 런타임 제품군)에서 정의되지 않았습니다. [다음 호출](runtimes-api.md#runtimes-api-next)의 `Lambda-Runtime-Trace-Id` 응답 헤더를 사용하여 사용자 지정 런타임에 `_X_AMZN_TRACE_ID`을(를) 설정할 수 있습니다.
  + Java 런타임 버전 17 이상에서는 이 환경 변수가 사용되지 않습니다. 대신 Lambda는 `com.amazonaws.xray.traceHeader` 시스템 속성에 추적 정보를 저장합니다.
+ `AWS_DEFAULT_REGION` – Lambda 함수가 실행되는 기본 AWS 리전입니다.
+ `AWS_REGION` – Lambda 함수가 실행되는 AWS 리전입니다. 정의되면 이 값이 `AWS_DEFAULT_REGION`을 재정의합니다.
  + AWS SDK와 함께 AWS 리전 환경 변수를 사용하는 방법에 대한 자세한 내용은 **AWS SDK 및 도구 참조 안내서의 [AWS Region](https://docs.aws.amazon.com/sdkref/latest/guide/feature-region.html#feature-region-sdk-compat)을 참조하세요.
+ `AWS_EXECUTION_ENV` - [런타임 ID](lambda-runtimes.md)로서 앞에 `AWS_Lambda_`가 붙습니다(예: `AWS_Lambda_java8`). 이 환경 변수는 OS 전용 런타임(`provided` 런타임 제품군)에서 정의되지 않았습니다.
+ `AWS_LAMBDA_FUNCTION_NAME` – 함수의 이름입니다.
+ `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` – 함수에 사용 가능한 총 메모리 양(MB)입니다.
+ `AWS_LAMBDA_FUNCTION_VERSION` – 실행할 함수의 버전입니다.
+ `AWS_LAMBDA_INITIALIZATION_TYPE` – 함수의 초기화 유형으로, `on-demand`, `provisioned-concurrency`, `snap-start` 또는 `lambda-managed-instances`입니다. 자세한 내용은 [프로비저닝된 동시성 구성](provisioned-concurrency.md), [Lambda SnapStart를 사용하여 시작 성능 개선](snapstart.md) 또는 [Lambda 관리형 인스턴스](lambda-managed-instances.md) 항목을 참조하세요.
+ `AWS_LAMBDA_LOG_GROUP_NAME`, `AWS_LAMBDA_LOG_STREAM_NAME` – 함수에 대한 Amazon CloudWatch Logs 그룹 및 스트림의 이름입니다. `AWS_LAMBDA_LOG_GROUP_NAME` 및 `AWS_LAMBDA_LOG_STREAM_NAME` [환경 변수](#configuration-envvars-runtime)는 Lambda SnapStart 함수에서 사용할 수 없습니다.
+ `AWS_ACCESS_KEY`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN` - 함수의 [실행 역할](lambda-intro-execution-role.md)에서 가져온 액세스 키입니다.
+ `AWS_LAMBDA_RUNTIME_API` – ([사용자 지정 런타임](runtimes-custom.md)) [런타임 API](runtimes-api.md)의 호스트 및 포트입니다.
+ `LAMBDA_TASK_ROOT` – Lambda 함수 코드의 경로입니다.
+ `LAMBDA_RUNTIME_DIR` – 런타임 라이브러리의 경로입니다.
+ `AWS_LAMBDA_MAX_CONCURRENCY` – (Lambda 관리형 인스턴스만 해당) Lambda가 하나의 실행 환경으로 전송할 최대 동시 간접 호출 수입니다.
+ `AWS_LAMBDA_METADATA_API` - `{ipv4_address}:{port}` 형식의 [메타데이터 엔드포인트](configuration-metadata-endpoint.md) 서버 주소입니다(예: `169.254.100.1:9001`).
+ `AWS_LAMBDA_METADATA_TOKEN` - [메타데이터 엔드포인트](configuration-metadata-endpoint.md)에 대한 요청을 인증하는 데 사용되는 현재 실행 환경의 고유 인증 토큰입니다. Lambda에서는 초기화 시 이 토큰을 자동으로 생성합니다.

다음 추가 환경 변수는 예약되어 있지 않으며 함수 구성에서 확장할 수 있습니다.

**예약되지 않은 환경 변수**
+ `LANG` - 이것은 런타임의 로캘입니다(`en_US.UTF-8`).
+ `PATH` - 실행 경로(`/usr/local/bin:/usr/bin/:/bin:/opt/bin`)입니다.
+ `LD_LIBRARY_PATH` 시스템 라이브러리 경로(`/var/lang/lib:/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib`)입니다.
+ `NODE_PATH` – ([Node.js](lambda-nodejs.md)) Node.js 라이브러리 경로(`/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules`)입니다.
+ `NODE_OPTIONS` – ([Node.js](lambda-nodejs.md)) Node.js 런타임의 경우 `NODE_OPTIONS`를 사용하여 Lambda가 기본적으로 비활성화하는 실험 기능을 재활성화할 수 있습니다.
+ `PYTHONPATH` - ([Python](lambda-python.md)) Python 라이브러리 경로(`$LAMBDA_RUNTIME_DIR`).
+ `GEM_PATH` – ([Ruby](lambda-ruby.md)) Ruby 라이브러리 경로(`$LAMBDA_TASK_ROOT/vendor/bundle/ruby/3.3.0:/opt/ruby/gems/3.3.0`)입니다.
+ `AWS_XRAY_CONTEXT_MISSING` – X-Ray 추적의 경우 Lambda는 X-Ray SDK에서 런타임 오류가 발생하지 않도록 `LOG_ERROR`로 설정합니다.
+ `AWS_XRAY_DAEMON_ADDRESS` – X-Ray 추적의 경우 X-Ray 데몬의 포트 및 IP 주소입니다.
+ `AWS_LAMBDA_DOTNET_PREJIT` - ([.NET](lambda-csharp.md)) 이 변수를 설정하여 .NET 특정 런타임 최적화를 활성화하거나 비활성화합니다. 값에는 `always`, `never` 및 `provisioned-concurrency`가 포함됩니다. 자세한 내용은 [함수에 대해 프로비저닝된 동시성 구성](provisioned-concurrency.md) 섹션을 참조하세요.
+ `TZ` - 환경의 표준 시간대(`:UTC`)입니다. 실행 환경에서는 NTP를 사용하여 시스템 클록을 동기화합니다.

표시된 샘플 값은 최신 런타임을 반영합니다. 특정 변수 또는 해당 값의 존재는 이전 런타임에 따라 다를 수 있습니다.

# 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)를 참조하세요.