Lambda .zip 배포 패키지 암호화

Lambda .zip 배포 패키지 암호화 (Encrypting Lambda .zip deployment packages)

AWS Lambda는 .zip 배포 패키지와 함수 구성 세부 정보에 대해 AWS KMS 키로 저장 데이터에 대한 서버 측 암호화를 항상 제공합니다. 기본적으로 Lambda는 AWS 소유 키를 사용합니다. 이 기본 동작이 워크플로에 맞다면 다른 것을 설정할 필요가 없습니다. AWS는 이 키를 사용하는 데 요금을 부과하지 않습니다.

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

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

출처: AWS Lambda 개발자 안내서

본문

고객 관리형 키 만들기

AWS Management Console 또는 AWS KMS API를 사용해 대칭 고객 관리형 키를 만들 수 있습니다.

대칭 고객 관리형 키를 만들려면:

AWS Key Management Service 개발자 안내서의 대칭 KMS 키 만들기의 단계를 따르세요.

권한

키 정책:

키 정책은 고객 관리형 키에 대한 액세스를 제어합니다. 모든 고객 관리형 키에는 정확히 하나의 키 정책이 있어야 하며, 이 정책에는 누가 키를 사용할 수 있고 어떻게 사용할 수 있는지 결정하는 문이 포함됩니다. 자세한 내용은 AWS Key Management Service 개발자 안내서의 키 정책 변경 방법을 참조하세요.

고객 관리형 키로 .zip 배포 패키지를 암호화할 때 Lambda는 키에 grant를 추가하지 않습니다. 대신 AWS KMS 키 정책이 Lambda가 사용자를 대신해 다음 AWS KMS API 작업을 호출하도록 허용해야 합니다:

  • kms:GenerateDataKey
  • kms:Decrypt

다음 예제 키 정책은 계정 111122223333의 모든 Lambda 함수가 지정된 고객 관리형 키에 필요한 AWS KMS 작업을 호출하도록 허용합니다.

예시 AWS KMS 키 정책 (JSON):

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
            "Condition": {
                "StringLike": {
                "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:111122223333:function:*"
                }
            }
        }
    ]
}

키 액세스 문제 해결에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서를 참조하세요.

보안 주체 권한:

고객 관리형 키로 .zip 배포 패키지를 암호화하면 키에 액세스할 수 있는 보안 주체만 .zip 배포 패키지에 액세스할 수 있습니다. 예를 들어 고객 관리형 키에 액세스할 수 없는 보안 주체는 GetFunction 응답에 포함된 presigned S3 URL을 사용해 .zip 패키지를 다운로드할 수 없습니다. 응답의 Code 섹션에 AccessDeniedException이 반환됩니다.

예시 AWS KMS AccessDeniedException:

{
    "Code": {
        "RepositoryType": "S3",
        "Error": {
            "ErrorCode": "AccessDeniedException",
            "Message": "KMS access is denied. Check your KMS permissions. KMS Exception: AccessDeniedException KMS Message: User: arn:aws:sts::111122223333:assumed-role/LambdaTestRole/session is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:us-east-1:111122223333:key/key-id with an explicit deny in a resource-based policy"
        },
        "SourceKMSKeyArn": "arn:aws:kms:us-east-1:111122223333:key/key-id"
    },
	...
}

AWS KMS 키에 대한 권한에 대해 자세히 알아보려면 AWS KMS의 인증 및 액세스 제어를 참조하세요.

.zip 배포 패키지에 고객 관리형 키 사용

다음 API 파라미터를 사용해 .zip 배포 패키지에 대한 고객 관리형 키를 구성합니다:

  • SourceKMSKeyArn — 소스 .zip 배포 패키지(업로드하는 파일)를 암호화합니다.
  • KMSKeyArn — 환경 변수와 Lambda SnapStart 스냅샷을 암호화합니다.
  • DurableConfig.KMSKeyArn — durable 실행 데이터를 암호화합니다. 이 키는 함수 수준의 KMSKeyArn과 독립적입니다.

SourceKMSKeyArn과 KMSKeyArn이 모두 지정되면 Lambda는 KMSKeyArn 키를 사용해 Lambda가 함수를 호출할 때 사용하는 압축 해제된 패키지 버전을 암호화합니다. SourceKMSKeyArn만 지정되고 KMSKeyArn은 지정되지 않으면 Lambda는 AWS 관리형 키를 사용해 패키지의 압축 해제된 버전을 암호화합니다.

참고

자체 관리형 S3 코드 저장소를 사용하는 함수와 레이어의 경우 Lambda는 소스 코드의 복사본을 저장하지 않습니다. 코드는 S3 버킷에 남아 있으며 소스 코드에 대한 저장 데이터 암호화는 S3 버킷 구성으로 관리됩니다. Lambda는 KMSKeyArn을 사용해 Lambda가 함수를 호출할 때 사용하는 패키지의 압축 해제 버전을 암호화합니다. 자세한 내용은 Amazon Simple Storage Service 사용 안내서의 서버 측 암호화로 데이터 보호를 참조하세요.

Lambda 콘솔

함수를 만들 때 고객 관리형 키 암호화 추가:

  1. Lambda 콘솔의 Functions(함수) 페이지를 엽니다.
  2. Create function(함수 생성) 을 선택합니다.
  3. Author from scratch(처음부터 작성) 또는 Container image(컨테이너 이미지) 를 선택합니다.
  4. Basic information(기본 정보) 아래에서 다음을 수행합니다:
    • Function name(함수 이름) 에 함수 이름을 입력합니다.
    • Runtime(런타임) 에서 함수에 사용할 언어 버전을 선택합니다.
  5. Advanced settings(고급 설정) 를 확장한 다음 Enable encryption with an AWS KMS customer managed key(AWS KMS 고객 관리형 키로 암호화 활성화) 를 선택합니다.
  6. 고객 관리형 키를 선택합니다.
  7. Create function 을 선택합니다.

고객 관리형 키 암호화를 제거하거나 다른 키를 사용하려면 .zip 배포 패키지를 다시 업로드해야 합니다.

기존 함수에 고객 관리형 키 암호화 추가:

  1. Lambda 콘솔의 Functions 페이지를 엽니다.
  2. 함수의 이름을 선택합니다.
  3. Code source(코드 소스) 창에서 Upload from(업로드 위치) 을 선택합니다.
  4. .zip file 또는 Amazon S3 location(Amazon S3 위치) 을 선택합니다.
  5. 파일을 업로드하거나 Amazon S3 위치를 입력합니다.
  6. Enable encryption with an AWS KMS customer managed key 를 선택합니다.
  7. 고객 관리형 키를 선택합니다.
  8. Save(저장) 를 선택합니다.

AWS CLI

함수를 만들 때 고객 관리형 키 암호화 추가:

다음 create-function 예제에서:

  • --code — .zip 배포 패키지의 로컬 경로(ZipFile)와 그것을 암호화할 고객 관리형 키(SourceKMSKeyArn)를 지정합니다.
  • --kms-key-arn — 환경 변수와 배포 패키지의 압축 해제된 버전을 암호화할 고객 관리형 키를 지정합니다.
aws lambda create-function \
  --function-name myFunction \
  --runtime nodejs24.x \
  --handler index.handler \
  --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
  --code ZipFile=fileb://myFunction.zip,SourceKMSKeyArn=arn:aws:kms:us-east-1:111122223333:key/key-id \
  --kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id

다음 create-function 예제에서:

  • --code — Amazon S3 버킷의 .zip 파일 위치(S3Bucket, S3Key, S3ObjectVersion)와 그것을 암호화할 고객 관리형 키(SourceKMSKeyArn)를 지정합니다.
  • --kms-key-arn — 환경 변수와 배포 패키지의 압축 해제된 버전을 암호화할 고객 관리형 키를 지정합니다.
aws lambda create-function \
  --function-name myFunction \
  --runtime nodejs24.x --handler index.handler \
  --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \
  --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion,SourceKMSKeyArn=arn:aws:kms:us-east-1:111122223333:key/key-id \
  --kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key2-id

기존 함수에 고객 관리형 키 암호화 추가:

다음 update-function-code 예제에서:

  • --zip-file — .zip 배포 패키지의 로컬 경로를 지정합니다.
  • --source-kms-key-arn — 배포 패키지의 압축된 버전을 암호화할 고객 관리형 키를 지정합니다. Lambda는 AWS 소유 키를 사용해 함수 호출용 압축 해제된 패키지를 암호화합니다. 패키지의 압축 해제된 버전을 암호화하는 데 고객 관리형 키를 사용하려면 --kms-key-arn 옵션으로 update-function-configuration 명령을 실행하세요.
aws lambda update-function-code \
  --function-name myFunction \
  --zip-file fileb://myFunction.zip \
  --source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id

다음 update-function-code 예제에서:

  • --s3-bucket — Amazon S3 버킷의 .zip 파일 위치를 지정합니다.
  • --s3-key — 배포 패키지의 Amazon S3 키를 지정합니다.
  • --s3-object-version — 버전 관리 객체의 경우 사용할 배포 패키지 객체의 버전입니다.
  • --source-kms-key-arn — 배포 패키지의 압축된 버전을 암호화할 고객 관리형 키를 지정합니다. Lambda는 AWS 소유 키를 사용해 함수 호출용 압축 해제된 패키지를 암호화합니다. 패키지의 압축 해제된 버전을 암호화하는 데 고객 관리형 키를 사용하려면 --kms-key-arn 옵션으로 update-function-configuration 명령을 실행하세요.
aws lambda update-function-code \
  --function-name myFunction \
  --s3-bucket amzn-s3-demo-bucket \
  --s3-key myFileName.zip \
  --s3-object-version myObject Version
  --source-kms-key-arn arn:aws:kms:us-east-1:111122223333:key/key-id

기존 함수에서 고객 관리형 키 암호화 제거:

다음 update-function-code 예제에서 --zip-file은 .zip 배포 패키지의 로컬 경로를 지정합니다. --source-kms-key-arn 옵션 없이 이 명령을 실행하면 Lambda는 AWS 소유 키를 사용해 배포 패키지의 압축된 버전을 암호화합니다.

aws lambda update-function-code \
  --function-name myFunction \
  --zip-file fileb://myFunction.zip

더 알아보기 (Learn more)

  • AWS KMS 키 관리
  • Lambda 배포 패키지
  • 환경 변수 암호화