Lambda durable function의 보안과 권한
Lambda durable function의 보안과 권한
AWS Lambda durable functions는 durable execution을 실행하고 관리하기 위해 특정 IAM 권한이 필요해요. 각 주체(principal)가 필요한 권한만 부여하는 최소 권한(least privilege) 원칙을 따르세요.
본문
durable function을 위한 IAM 권한
대부분의 durable execution API 작업에 대해 Lambda는 함수 ARN이 아니라 durable execution ARN을 기준으로 요청을 승인합니다. durable execution은 함수 버전의 하위 리소스이며, 그 ARN은 함수 ARN을 확장합니다:
arn:aws:lambda:region:account-id:function:function-name:qualifier/durable-execution/execution-name/execution-id
durable execution ARN의 qualifier는 항상 $LATEST 또는 버전 번호입니다.
정책의 Resource 요소에 비정규화(unqualified) 함수 ARN을 지정하면 Lambda는 요청을 거부합니다. 비정규화 ARN은 durable execution ARN과 절대 일치하지 않기 때문이에요. 접근을 부여하려면 함수 ARN에 qualifier 패턴을 추가하세요:
arn:aws:lambda:us-east-1:123456789012:function:my-function:*— 모든 버전의 durable execution과 일치합니다.arn:aws:lambda:us-east-1:123456789012:function:my-function:1/durable-execution/*— 버전 1의 durable execution만 일치합니다.
대부분의 정책은 배포할 때마다 버전 번호가 바뀔 수 있으므로 :* 형태를 사용합니다.
별칭(alias)은 durable execution 권한에 적용되지 않습니다
별칭을 통해 durable function을 호출할 수는 있지만, 결과 실행의 ARN에는 해석된(리졸브된) 버전 번호가 포함됩니다.
실행 역할 권한
durable function의 실행 역할에는 체크포인트를 만들고 실행 상태를 검색할 권한이 있어야 합니다. 다음 정책은 필요한 최소 권한을 보여줘요:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:CheckpointDurableExecution",
"lambda:GetDurableExecutionState"
],
"Resource": "arn:aws:lambda:region:account-id:function:function-name:*"
}
]
}
콘솔로 durable function을 만들면 Lambda가 이 권한을 실행 역할에 자동으로 추가합니다. AWS CLI나 AWS CloudFormation으로 함수를 만든다면 이 권한을 실행 역할에 직접 추가하세요.
Lambda가 실행 역할을 수임(assume)할 수 있게 하려면 역할의 신뢰 정책(trust policy)이 Lambda 서비스 프린시펄(lambda.amazonaws.com)을 신뢰하는 서비스로 지정해야 해요. 다음 예시는 Lambda가 역할을 수임하도록 허용하는 신뢰 정책입니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
최소 권한 원칙
와일드카드 대신 Resource 요소를 특정 함수 ARN으로 범위를 한정하세요. 이렇게 하면 실행 역할이 체크포인트 작업을 필요한 함수에만 적용하도록 제한됩니다.
여러 함수에 대한 범위 지정 권한 예시
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:CheckpointDurableExecution",
"lambda:GetDurableExecutionState"
],
"Resource": [
"arn:aws:lambda:us-east-1:123456789012:function:orderProcessor:*",
"arn:aws:lambda:us-east-1:123456789012:function:paymentHandler:*"
]
}
]
}
또는 AWS 관리형 정책 AWSLambdaBasicDurableExecutionRolePolicy를 사용할 수 있는데, 여기에는 필수 durable execution 권한과 Amazon CloudWatch Logs용 기본 Lambda 실행 권한이 함께 포함됩니다.
durable execution 관리 권한
Lambda는 lambda:GetDurableExecution, lambda:GetDurableExecutionHistory, lambda:StopDurableExecution 작업을 durable execution ARN에 대해 승인합니다.
함수의 durable execution 목록을 조회하려면 lambda:ListDurableExecutionsByFunction을 사용하세요. Lambda는 이 작업을 요청의 함수 ARN에 대해 승인합니다. ARN 일치에는 다음 규칙이 적용됩니다:
- 비정규화 함수 ARN을 부여하는 정책은 비정규화 함수 이름을 사용하는 요청만 일치합니다.
- 정규화된 ARN을 부여하는 정책은 정규화된 함수 이름을 사용하는 요청만 일치합니다.
자세한 내용은 정책의 Resource 섹션에서 함수 참조하기를 참고하세요.
두 형태의 함수 이름으로 만든 요청을 모두 일치시키려면 다음 정책처럼 비정규화 및 정규화 함수 ARN을 모두 포함하세요:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ManageDurableExecutions",
"Effect": "Allow",
"Action": [
"lambda:GetDurableExecution",
"lambda:GetDurableExecutionHistory",
"lambda:StopDurableExecution"
],
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*"
},
{
"Sid": "ListDurableExecutions",
"Effect": "Allow",
"Action": "lambda:ListDurableExecutionsByFunction",
"Resource": [
"arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction",
"arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*"
]
}
]
}
콜백 전송 권한
콜백 결과를 보내는 외부 시스템은 lambda:SendDurableExecutionCallbackSuccess, lambda:SendDurableExecutionCallbackFailure, lambda:SendDurableExecutionCallbackHeartbeat 작업을 사용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SendCallbacks",
"Effect": "Allow",
"Action": [
"lambda:SendDurableExecutionCallbackSuccess",
"lambda:SendDurableExecutionCallbackFailure",
"lambda:SendDurableExecutionCallbackHeartbeat"
],
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:myDurableFunction:*"
}
]
}
Lambda는 콜백 요청을 콜백을 만든 durable execution의 ARN에 대해 승인합니다.
상태 암호화
Lambda durable functions는 실행 데이터를 저장 시(at rest) 암호화합니다. 각 함수 실행은 다른 실행이 접근할 수 없는 격리된 상태를 유지합니다. 고객 관리형 키를 구성해 durable execution 데이터를 암호화할 수 있어요. 자세한 내용은 AWS Lambda durable execution 데이터 암호화를 참고하세요.
체크포인트 데이터에는 다음이 포함됩니다:
- 스텝 결과와 오류
- 체인 호출 입력
저장 시 암호화되는 durable execution 데이터의 전체 목록은 암호화되는 내용을 참고하세요.
Lambda가 체크포인트 데이터를 읽거나 쓸 때 모든 데이터는 TLS로 전송 중 암호화됩니다.
커스텀 직렬화·역직렬화를 사용한 커스텀 암호화
보안 요구 사항이 중요한 경우, durable SDK를 사용해 커스텀 직렬화·역직렬화(SerDer)로 자체 암호화·복호화 메커니즘을 구현할 수 있어요. 이 접근 방식은 체크포인트 데이터 보호에 사용되는 암호화 키와 알고리즘을 완전히 제어할 수 있게 해줍니다.
중요
커스텀 암호화를 사용하면 Lambda 콘솔과 API 응답에서 작업 결과가 보이지 않게 됩니다. 체크포인트 데이터는 실행 기록에서 암호화된 상태로 나타나며 복호화 없이는 검사할 수 없어요.
커스텀 SerDer 구현에서 사용하는 AWS KMS 키에 대해 함수의 실행 역할에 kms:Encrypt 및 kms:Decrypt 권한이 필요합니다.
CloudTrail 로깅
Lambda는 체크포인트 작업을 AWS CloudTrail의 데이터 이벤트로 로깅합니다. CloudTrail을 사용해 체크포인트가 생성된 시기를 감사하고, 실행 상태 변경을 추적하고, durable execution 데이터에 대한 접근을 모니터링할 수 있어요.
체크포인트 작업은 다음 이벤트 이름으로 CloudTrail 로그에 나타납니다:
CheckpointDurableExecution— 스텝이 완료되고 체크포인트를 만들 때 로깅됩니다.GetDurableExecutionState— 재생 중 Lambda가 실행 상태를 검색할 때 로깅됩니다.
durable function에 대한 데이터 이벤트 로깅을 활성화하려면 Lambda 데이터 이벤트를 로깅하도록 CloudTrail 트레일을 구성하세요. 자세한 내용은 CloudTrail 사용자 안내서의 데이터 이벤트 로깅을 참고하세요.
예시: 체크포인트 작업의 CloudTrail 로그 항목
{
"eventVersion": "1.08",
"eventTime": "2024-11-16T10:30:45Z",
"eventName": "CheckpointDurableExecution",
"eventSource": "lambda.amazonaws.com",
"requestParameters": {
"functionName": "myDurableFunction",
"executionId": "exec-abc123",
"stepId": "step-1"
},
"responseElements": null,
"eventType": "AwsApiCall"
}
교차 계정 고려 사항
AWS 계정 간에 durable function을 호출한다면 호출 계정에 lambda:InvokeFunction 권한이 필요하지만, 체크포인트 작업은 항상 함수 계정의 실행 역할을 사용합니다. 호출 계정은 체크포인트 데이터나 실행 상태에 직접 접근할 수 없습니다.
이 격리 덕분에 외부 계정에서 호출되더라도 체크포인트 데이터는 함수의 계정 내에서 안전하게 유지됩니다.
Lambda에서 상속된 보안 기능
durable function은 Lambda의 모든 보안, 거버넌스, 규정 준수 기능을 상속합니다. 여기에는 VPC 연결, 환경 변수 암호화, 데드 레터 큐, 예약 동시성, 함수 URL, 코드 서명, 그리고 SOC, PCI DSS, HIPAA 같은 규정 준수 인증이 포함됩니다.
Lambda 보안 기능에 대한 자세한 내용은 Lambda 개발자 안내서의 AWS Lambda의 보안을 참고하세요. durable function에 대한 유일한 추가 보안 고려 사항은 이 가이드에 설명된 IAM 권한입니다.